我现在也有一个公钥证书,有一个签名串(签名后转成base64的),有一个原文。我现在要验证这个原文是否合法。代码如下:
FileInputStream fr = new FileInputStream("D:/test.cer"); //验证的公钥证书
CertificateFactory cf = CertificateFactory.getInstance("X.509"); //符合x.509标准
X509Certificate cert = (X509Certificate)cf.generateCertificate(fr);
MessageDigest md = MessageDigest.getInstance("SHA-1"); //原文进行SHA1摘要进行验证
byte[] mdinfo = md.digest("111111".getBytes());//原文就是六个1,且在签名之前这个是做了SHA1摘要的。所以我在验证之前也做SHA1
Signature rsa = Signature.getInstance("MD5withRSA"); //签名算法是MD5withRSA
rsa.initVerify(cert);
rsa.update(mdinfo);
String verify = "GhZcguZ1lQdxiHOoK5rEsQyMAj89WVqmBlnB+R7Bixi77FJ0IF8ePk0VWXB+4/uq8r5IKYBV2wlkVahZVOm49GLQfSr05pL+aUyzv0oBnoHvmir5iv+xfEX2A+a8urLQPLSJCsXK07Nck1szmtjb5mwcp+qp4qzouOtSoGgP8xQ="; //base64后的签名
byte[] sign = Base64Test.getFromBASE64(verify); //把base64转成二进制
System.out.println(rsa.verify(sign));签名的过程是将要签名的数据做SHA1摘要,然后用标准的x.509证书进行签名,得到128位的签名块,最后用base64编码为什么结果总是false呢?我这个逻辑不对吗?签名是符合x.509标准的.有懂JAVA安全编程的吗?可以提供证书帮忙验证.谢谢。
FileInputStream fr = new FileInputStream("D:/test.cer"); //验证的公钥证书
CertificateFactory cf = CertificateFactory.getInstance("X.509"); //符合x.509标准
X509Certificate cert = (X509Certificate)cf.generateCertificate(fr);
MessageDigest md = MessageDigest.getInstance("SHA-1"); //原文进行SHA1摘要进行验证
byte[] mdinfo = md.digest("111111".getBytes());//原文就是六个1,且在签名之前这个是做了SHA1摘要的。所以我在验证之前也做SHA1
Signature rsa = Signature.getInstance("MD5withRSA"); //签名算法是MD5withRSA
rsa.initVerify(cert);
rsa.update(mdinfo);
String verify = "GhZcguZ1lQdxiHOoK5rEsQyMAj89WVqmBlnB+R7Bixi77FJ0IF8ePk0VWXB+4/uq8r5IKYBV2wlkVahZVOm49GLQfSr05pL+aUyzv0oBnoHvmir5iv+xfEX2A+a8urLQPLSJCsXK07Nck1szmtjb5mwcp+qp4qzouOtSoGgP8xQ="; //base64后的签名
byte[] sign = Base64Test.getFromBASE64(verify); //把base64转成二进制
System.out.println(rsa.verify(sign));签名的过程是将要签名的数据做SHA1摘要,然后用标准的x.509证书进行签名,得到128位的签名块,最后用base64编码为什么结果总是false呢?我这个逻辑不对吗?签名是符合x.509标准的.有懂JAVA安全编程的吗?可以提供证书帮忙验证.谢谢。
你不用base64转换,直接写死吗?
这句吗?