试图用java生成与C最终签名不匹配的文本数字签名#

试图用java生成与C最终签名不匹配的文本数字签名#,java,rsa,signature,digital,Java,Rsa,Signature,Digital,我想按照以下步骤使用数字证书(ePass2003)生成数字签名: 获取编码字符串 使用SHA-256算法生成哈希 生成签名 以该签名的Base64字符串为例 我试图通过使用java来实现这一点: 1.获取编码数据: byte[]encoded=java.util.Base64.getEncoder().encode(data.getBytes()) 2.使用SHA-256算法生成哈希: MessageDigest messageDigest = MessageDigest.getInstanc

我想按照以下步骤使用数字证书(ePass2003)生成数字签名:

  • 获取编码字符串
  • 使用SHA-256算法生成哈希
  • 生成签名
  • 以该签名的Base64字符串为例

  • 我试图通过使用java来实现这一点:

    1.获取编码数据:

    byte[]encoded=java.util.Base64.getEncoder().encode(data.getBytes())

    2.使用SHA-256算法生成哈希:

    MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
    byte[] messageDigestMD5 = messageDigest.digest(encoded);
    StringBuffer stringBuffer = new StringBuffer();
    for (byte bytes : messageDigestMD5) {    
        stringBuffer.append(String.format("%02x", bytes & 0xff));
    }
    
    我得到的信息如下: 0a8cc33cf59da5b9df69df8cfdcf42b795738adffc428ece54f001b8090ba0dd

    3.生成签名 为此,我还尝试了java签名类和bouncy castle:

    Security.addProvider(new BouncyCastleProvider());
    X509Certificate certificate = (X509Certificate) ks.getCertificate(alias);
    PrivateKey privKey = (PrivateKey) ks.getKey(alias, null);
    List<X509Certificate> certList = new ArrayList<X509Certificate>();
    CMSTypedData cmsData= new  CMSProcessableByteArray(stringBuffer.toString().getBytes());
    certList.add(certificate);
    Store certs = new JcaCertStore(certList);
    CMSSignedDataGenerator cmsGenerator = new CMSSignedDataGenerator();
    ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256withRSA").build(privKey);
    cmsGenerator.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().setProvider("BC") .build()).build(contentSigner, certificate.getEncoded()));
    cmsGenerator.addCertificates(certs);
    CMSSignedData cms = cmsGenerator.generate(cmsData, true);
    
    但我得到的结果是: “MiagcSQGSIB3DQEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqGjJfBMD8Ga1echm4VqyxHbJjDcBoyxJyRhFzHbGxGzZxJ0AxHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHZCWGQWHTZWRHYMFKMRWWGGYDVQZEXMzMW5MB3RVD2VYMSIWIAYDVQQDEXKOBILDB2LIFNVBHV0AW9UCYBDQSAYMDE4XDT3MDGYODYMDYMDYNDYNFXDTE5MDGYODYMDYMDYMDYMDYMDYLDYMZLOWGGEGVMQSWCQYDVQGEWJJTJEHMB8GA1ECHMYUKYUKVMS00UGU01TTCBM1JVEVEVEVEVELLIWYWDWYWDWYWIWYWYWYWYWYWYWDFYWYWYWDFYWDYWDM5NZYWDM5NZM0NZYWDM0WYWDYWDYWDYWDM4WYWDM0WYWDM0WYDYDYDYDYDYDYDYWD2.研究了一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究方法,一种新的研究,一种新的新的研究方法,在一种新的研究的一代的一代的一代的研究,一代的一代的一代的研究,一代的一代的研究,一代的一代的一代的一代的一代的研究,一代的一代的一代的一代中国中国中国中国中国中国中国的中国中国的中国的中国的研究,一代中国的中国的中国的中国的中国的中国的中国的中国的中国政府,一代研究一代中国的中国的中国一代中国的一代中国的中国的中国NCSZJ0ESC4.一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的中国的一个中国的中国的中国的的NZIDMGYDYDglmawnhdgvZiHb3ZPzgvZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZ2HbZiHbZiHbZlHbZlHbZiHbZlHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZiHbZ2HbZiHbZiHbZ2Cc2Cc2Cc2Cb2Hb2HbZlHbZlHbZlHb2Cb2Cb2Cb2Cb2Cb2Cb2Cb2Cb2Cb2Cb2Cb2Cb2CbZlBGNvBaytaklomuewwydvqqkezhhdwphcmf0ie5hcm1hzgegvmfsbgv5iezcnrpbgl6zjzigfuzcbdAgvTawnHgGgGgTaxRzDbGa1EcxMuqVyDgGlmewUzYbBbDxRob3JPDHKxDzZanbgNvBbBbBbBbBbBbBbBbFbJ4dJxD4dQyxHyxDdDdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdCdKyKyKyKyKyK2.中国政府在2月2日发布了一份研究报告。2月2日发布了一份研究报告。2月2日,中国政府在2月2日发布了一份研究报告。2月2日,2 2 2号研究报告。中国政府在一份研究报告中,一份研究报告中的一份工作是一份中国政府在一份研究报告中提出了一份关于一份中国政府的一份研究报告,一份关于一份研究一份关于一份关于一份关于一份关于一份研究一份关于一份关于一份关于一份关于一份关于一份关于一份研究的研究的研究的论文的论文的研究,一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份关于一份研究的研究的论文的研究的研究的论文的研究的研究的论文的论文的论文的研究,一份关于一份研究的研究的WiloxTKgtajmmid42.这个词的意思是:一个中国政府对一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府对一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府对一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府对一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府在一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的政府的政府PHCMF0IE5HCM1HZGEGVMFSBGV5IEZCNRPBGL6ZXJZIGFUZCBDAGVTANGHBHMGTGLTAXRZEDMBSG1ECXmuq2VydglmewluzybdbdxRob3JPDHKxdZandbgNvbbetbjM4mda1NDEqmJhdemmCqa1ECRMDqm9KyZyXyMgrYBSb2Fk2KyBg1ZyKfKwGyKwGyKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKwKw一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国的一个(2 2个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国的一个中国政府的一个中国政府的一个中国政府的一个中国的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国的一个中国政府的一个中国的一个中国的一个中国政府的一个中国政府的一个中国政府的一个中国的一个中国的VI44ANSN5at006JqlstRUKDnwVr19S70B9egg2xCbJ1JgLVo2LvUBMv0RSkygCcsj9cgDGCmtb/03KKBU4DCA6C12/JABTIFLMSY7STVIO84UHPRYFSLZECDNP1L6VHCYQVZNEJPIM3VKJNAU8RUCOXIXEH/T+HVTTCKOTNVLOAAAAAAAA==” 在C#中,我使用:

    public byte[] Sign(string text, X509Certificate2 cert){
    RSACryptoServiceProvider csp = null;
    csp = (RSACryptoServiceProvider)cert.PrivateKey;
    SHA1Managed sha1 = new SHA1Managed();
    UnicodeEncoding encoding = new UnicodeEncoding();
    byte[] data = encoding.GetBytes(text);
    byte[] hash = sha1.ComputeHash(data);
    byte[] CryptoSignJson = csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA-256"));
    return CryptoSignJson;
    }
    
    有三个输出: “Miagcsqgsib3dqeha6camiacaquwgxczajbgnvbaytaklomuewwwyqkezhhdwphcmf0ie5hcm1hzgegvmbgv5iezlcnrpbgl6zxxjzigfuzcbdagvtagvtaghhbhmgtgltaxrdzdbsga1ecxmuqdzyglmewwybdbdxrob3jpdhkxdzzanbgnvbbetbjm4ndeqmqmqbg4dqdqdqdqdqdqcqdqdqdqdqdqdqdqdqg9zzyzyzyzzzzyzyzyzyzzzzzgzgzgzjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj研究结果表明,这是一种新的研究成果。这是一种新的研究成果。一种新的研究方法是一种新的研究方法,一种新的研究方法,一种新的研究成果,一种新的研究方法,一种新的研究方法,一种新的研究结果,一种新的研究结果,一种新的研究结果,一种新的研究结果是一种新的研究结果,一种新的研究结果是,一种新的研究结果,一种新的研究结果,即,一种新的研究结果是,一种新的研究结果是,一种新的研究结果是,即,即,一种新的研究结果是,或者是,或者是,或者是,或者是,2 2 2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-IYK3STMF0UMQBMC6QVOXJ0+i452.这两个词的意思是:一个词的意思是:一个词的意思是:一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个词的意思是,一个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2个2 jkjv6wrwdhsyrwgrdcnxhzwdkavn2.我们现在使用的是一个ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZGLWAKTU4JCBJHYMC25R5ar2ziBWgC0v5HmFV1+Y7O561DF7EGQ2CBMYQ6FCQ05ITN6UNOY0LMMSDBN3PEUANOL4THLLTAEQSCE4S6KVSLHPW6UOUUTGAY4VB2J
    public byte[] Sign(string text, X509Certificate2 cert){
    RSACryptoServiceProvider csp = null;
    csp = (RSACryptoServiceProvider)cert.PrivateKey;
    SHA1Managed sha1 = new SHA1Managed();
    UnicodeEncoding encoding = new UnicodeEncoding();
    byte[] data = encoding.GetBytes(text);
    byte[] hash = sha1.ComputeHash(data);
    byte[] CryptoSignJson = csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA-256"));
    return CryptoSignJson;
    }