java签名和验签问题

fang4084 2011-02-14 03:42:55
String sign="dfgfgh";
X509Certificate x509Certificate = (X509Certificate) CAUtil.getCfeformPfx("d:/TestingUser1_sign.pfx", "12345678"); //工具类根据PFX文件得到Certificate对象再强转

Signature signature = Signature.getInstance(x509Certificate.getSigAlgName());
PrivateKey privateKey=CAUtil.GetPvkformPfx("d:/TestingUser1_sign.pfx", "12345678");//工具类根据PFX文件得到私钥
signature.initSign(privateKey);
signature.update(sign.getBytes());
byte[] data=signature.sign(); //签名


X509Certificate cf = (X509Certificate) CAUtil.getX509Certificate("d:/TestingUser1_sign_pub.cer"); //工具类
// 由证书构建签名
Signature s = Signature.getInstance(cf.getSigAlgName());
// 由证书初始化签名,实际上是使用了证书中的公钥
s.initVerify(cf);
s.update(data);
System.out.println( s.verify(sign.getBytes()));

得到的结果却是是FALSE 不知道错在哪里,请各位大大指证.TestingUser1_sign_pub.cer为TestingUser1_sign.pfx的公钥证书
...全文
534 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
s.update(data);
System.out.println( s.verify(sign.getBytes()));

呵呵,这里写反了。update 要 sign 的东西,verify 要 data 的东西。
  • 打赏
  • 举报
回复
不好意思,我实在看不出啥来。
fang4084 2011-02-14
  • 打赏
  • 举报
回复
找出问题了,哎写反了.......
应该是s.update(sign.getBytes());
System.out.println( s.verify(data));
fang4084 2011-02-14
  • 打赏
  • 举报
回复
public static X509Certificate getX509Certificate(String certPath){
X509Certificate x509Certificate=null;
InputStream ism=null;
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
ism=new FileInputStream(certPath);
x509Certificate = (X509Certificate)cf.generateCertificate(ism);

} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(null!=ism){
try {
ism.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return x509Certificate;
}
fang4084 2011-02-14
  • 打赏
  • 举报
回复
public static KeyStore getKeyStore(String keyStorePath, String password) {
// 实例化密钥库
KeyStore ks =null;
FileInputStream is=null;
try {
ks = KeyStore.getInstance(KeyStore.getDefaultType());
// 获得密钥库文件流
is = new FileInputStream(keyStorePath);
// 加载密钥库
ks.load(is, password.toCharArray());


} catch (Exception e) {
e.printStackTrace();
} finally{
if(null!=is){try{is.close();}catch(Exception e){}}
}
return ks;
}

//通过PFX文件获得私钥
public static PrivateKey GetPvkformPfx(String strPfx, String strPassword){
PrivateKey prikey=null;
try {
char[] nPassword = null;
if ((strPassword == null) || strPassword.trim().equals("")){
nPassword = null;
}else{
nPassword = strPassword.toCharArray();
}
KeyStore ks = getKsformPfx(strPfx,strPassword);
String keyAlias = getAlsformPfx(strPfx,strPassword);
prikey = (PrivateKey) ks.getKey(keyAlias, nPassword);
} catch (UnrecoverableKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println("private key = " + prikey);
return prikey;
}


//通过PFX文件获得KEYSTORE
public static KeyStore getKsformPfx(String strPfx, String strPassword){
FileInputStream fis=null;
try {
KeyStore ks = KeyStore.getInstance("PKCS12");
fis = new FileInputStream(strPfx);
// If the keystore password is empty(""), then we have to set
// to null, otherwise it won't work!!!
char[] nPassword = null;
if ((strPassword == null) || strPassword.trim().equals("")){
nPassword = null;
}
else {
nPassword = strPassword.toCharArray();
}
ks.load(fis, nPassword);

return ks;
}catch(Exception e){
e.printStackTrace();
}finally{
if(null!=fis){try {fis.close();} catch (IOException e) {e.printStackTrace();}}
}
return null;
}

//通过PFX文件获得别名
public static String getAlsformPfx(String strPfx, String strPassword){
String keyAlias=null;
try {
KeyStore ks = getKsformPfx(strPfx,strPassword);
Enumeration enumas = ks.aliases();
keyAlias = null;
// we are readin just one certificate.
if (enumas.hasMoreElements()) {
keyAlias = (String)enumas.nextElement();
}
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return keyAlias;
}
//通过PFX文件获得公钥
public static PublicKey getPukformPfx(String strPfx, String strPassword){
PublicKey pubkey=null;
try {
KeyStore ks = getKsformPfx(strPfx,strPassword);
String keyAlias = getAlsformPfx(strPfx,strPassword);
Certificate cert = ks.getCertificate(keyAlias);
pubkey = cert.getPublicKey();
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pubkey;
}

//通过PFX文件获得Certificate
public static Certificate getCfeformPfx(String strPfx, String strPassword){
Certificate cert=null;
try {
KeyStore ks = getKsformPfx(strPfx,strPassword);
String keyAlias = getAlsformPfx(strPfx,strPassword);
cert = ks.getCertificate(keyAlias);
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return cert;
}
  • 打赏
  • 举报
回复
这些代码看不出什么问题。CAUtil 中的代码呢?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧