Зависит ли длина цифровой подписи от цифрового токена (цифрового сертификата)? - PullRequest
0 голосов
/ 25 октября 2018

Зависит ли длина цифровой подписи от цифрового токена (цифрового сертификата)?Я генерирую цифровую подпись, используя следующий код, и длина цифровой подписи варьируется от сертификата к сертификату.Длина уникальна для всех сертификатов или зависит от сертификата?Я использую цифровой токен ePass.

 Security.addProvider(new BouncyCastleProvider());
                                        try {
                                            Signature signature = Signature.getInstance(DIGEST_SHA1);
                                            signature.initSign(privateKey);
                                            signature.update("abc".getBytes("UTF-8"));

                                        //  X509Certificate certFromKeystore = (X509Certificate) ks.getCertificate(signName);
                                            X509Certificate certFromKeystore = x509CertificateToSign;
                                            // System.out.println(alias+"***"+certFromKeystore.toString());
                                            List certList = new ArrayList();
                                            CMSTypedData data = new CMSProcessableByteArray("abc".getBytes());
                                            certList.add(certFromKeystore);
                                            Store certs = new JcaCertStore(certList);
                                            CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
                                            ContentSigner sha1Signer = new JcaContentSignerBuilder(DIGEST_SHA1)
                                                    .setProvider("SunMSCAPI").build(privateKey);
                                            gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
                                                    new JcaDigestCalculatorProviderBuilder().setProvider(BC_PROVIDER).build())
                                                            .build(sha1Signer, certFromKeystore));
                                            gen.addCertificates(certs);
                                            CMSSignedData signedData = gen.generate(data, false);
                                            BASE64Encoder encoder = new BASE64Encoder();
                                            String signedContent = encoder.encode((byte[]) signedData.getSignedContent().getContent());
                                            System.out.println(
                                                    "=============Signed content:=============" + "\n" + signedContent + "\n");
                                            String envelopedData = encoder.encode(signedData.getEncoded());
                                            System.out.println("==============Enveloped data===============" + "\n"
                                                    + envelopedData + "==" + envelopedData.length());

1 Ответ

0 голосов
/ 25 октября 2018

Это зависит от формата цифровой подписи, который вы используете.

Базовый контейнер подписи (т. Е. PKCS # 1) включает в себя только подписанный хеш.Расширенный формат может также включать сам сертификат или ссылку на сертификат.

В вашем случае, CMS, вы включаете сертификат, поэтому размер результата будет отличаться для каждого

...