数字签名:用于验证和提取认证信息的示例代码

时间:2011-05-27 06:43:50

标签: java .net digital-signature digital-certificate

我使用第三方工具验证签名并从签名中获取证书详细信息(如序列号,CA等)。此实用程序的问题是它已获得许可,仅适用于某些计算机。

我可以使用简单的java或.net代码验证数据签名吗?(而不是使用付费应用程序)。我没有私钥从签名数据中提取证书信息。

如果我有pfx文件,或者有人可以在java或.net中建议示例代码以提取证书详细信息。来自签名数据。

使用非对称加密对数据进行签名。

2 个答案:

答案 0 :(得分:5)

从证书中提取详细信息:

  1. 创建一个保存证书数据的字符串。只需确保它在开始时-----BEGIN CERTIFICATE-----和最后-----END CERTIFICATE-----
  2. 现在使用Java中的以下代码提取证书详细信息。
  3. InputStream inStream = new ByteArrayInputStream(certString.toString().getBytes("UTF-8"));
    BufferedInputStream bis = new BufferedInputStream(inStream);
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    Certificate cert = cf.generateCertificate(bis);
    X509Certificate xCert = (X509Certificate)cert;
    
    System.out.println("Certificate Type: "+cert.getType());
    System.out.println("Public Key: \n"+cert.getPublicKey());
    try{
          System.out.println("Signature Algorithm"+xCert.getSigAlgName());
          System.out.println("IssuerDN : "+xCert.getIssuerDN());
          System.out.println("Serial Number : "+xCert.getSerialNumber());
          System.out.println("SubjectDN : "+xCert.getSubjectDN());
    }catch(Exception exp){
          :
    }
    

    InputStream inStream = new ByteArrayInputStream(certString.toString().getBytes("UTF-8")); BufferedInputStream bis = new BufferedInputStream(inStream); CertificateFactory cf = CertificateFactory.getInstance("X.509"); Certificate cert = cf.generateCertificate(bis); X509Certificate xCert = (X509Certificate)cert; System.out.println("Certificate Type: "+cert.getType()); System.out.println("Public Key: \n"+cert.getPublicKey()); try{ System.out.println("Signature Algorithm"+xCert.getSigAlgName()); System.out.println("IssuerDN : "+xCert.getIssuerDN()); System.out.println("Serial Number : "+xCert.getSerialNumber()); System.out.println("SubjectDN : "+xCert.getSubjectDN()); }catch(Exception exp){ : }

答案 1 :(得分:1)

如果您有PFX文件,那么可能包含验证签名所需的公钥证书。

或者,如果您的签名是PKCS#7签名,则签名本身将保存数据,签名和证书。假设PKCS#7没有分离。

你需要问你的签名者,他如何转移他的证书进行验证。