我现在也有一个公钥证书,有一个签名串(签名后转成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安全编程的吗?可以提供证书帮忙验证.谢谢。

解决方案 »

  1.   

    String verify = "GhZcguZ1lQdxiHOoK5rEsQyMAj89WVqmBlnB+R7Bixi77FJ0IF8ePk0VWXB+4/uq8r5IKYBV2wlkVahZVOm49GLQfSr05pL+aUyzv0oBnoHvmir5iv+xfEX2A+a8urLQPLSJCsXK07Nck1szmtjb5mwcp+qp4qzouOtSoGgP8xQ="; //base64后的签名
    你不用base64转换,直接写死吗?
      

  2.   

    这是我用111111签名后做base64得到的串,我现在要用这个串得到二进制然后再进行验证签名。你不用base64转换,直接写死吗?===这是什么意思?我不是有byte[] sign = Base64Test.getFromBASE64(verify); //把base64转成二进制
    这句吗?