Цифровая подпись смарт-карты - документ был изменен или поврежден с момента его подписания - PullRequest
0 голосов
/ 21 февраля 2020

Я видел аналогичный ответ на вопрос C# о том, что данные подписи хэшируются дважды, однако не уверен, почему мои данные подписи здесь.

C# PKCS7 Smartchard Digital Signature поврежден

       String provider = sdk.getProviderName();
        List certList = new ArrayList();
        certList.add(signerCert);
        Store certs = new JcaCertStore(certList);
        CMSSignedDataGenerator cmsSignedDataGenerator = new CMSSignedDataGenerator();
        DigestCalculatorProvider digProvider = new JcaDigestCalculatorProviderBuilder().setProvider(provider).build();
        JcaSignerInfoGeneratorBuilder signerInfoGeneratorBuilder = new JcaSignerInfoGeneratorBuilder(digProvider);
        ContentSigner sha256Signer = new JcaContentSignerBuilder("SHA256withRSA").setProvider(provider).build(signerKey);
        cmsSignedDataGenerator.addSignerInfoGenerator(signerInfoGeneratorBuilder.build(sha256Signer, signerCert));
        cmsSignedDataGenerator.addCertificates(certs);
        CMSTypedData msg = new CMSProcessableByteArray(digest); 
        CMSSignedData cmsSignedData = cmsSignedDataGenerator.generate(msg);
        Map hashes = new HashMap();
        hashes.put(CMSAlgorithm.SHA256, digest);
        CMSSignedData finalCMSSignedData = new CMSSignedData(hashes, cmsSignedData.getEncoded());

        return finalCMSSignedData.getEncoded();`

1 Ответ

0 голосов
/ 23 февраля 2020

так что оказалось, что данные перевариваются дважды. Если мы передадим необработанные данные против дайджеста, подпись, которая записывается, является действительной и неизменной

...