【发布时间】:2021-07-26 05:27:49
【问题描述】:
我正在尝试使用 PCKS11(USB 令牌)和 iText 签署 pdf,当我使用 SHA-1 算法时它工作正常,签名有效并且一切正常但是当我将其更改为 SHA256 时签名不是有效,有谁知道为什么?我将把我的代码放在下面:
PKCS11 pkcs11 = PKCS11.getInstance("C:\\Windows\\System32\\example.dll", "C_GetFunctionList", null,false);
long[] slotList = pkcs11.C_GetSlotList(true);
String providerString = "name=*\nlibrary=C:\\Windows\\System32\\example.dll\n" + "slot=" + slotList [0];
SunPKCS11 sunPKCS11 = new SunPKCS11(new ByteArrayInputStream(providerString .getBytes()));
Provider provider = sunPKCS11;
KeyStore keyStore = KeyStore.getInstance("PKCS11", provider);
keyStore.load(null, password);
keyStore.aliases();
Security.addProvider(keyStore.getProvider());
List<String> aliases = Collections.list(keyStore.aliases());
String alias = aliases.get(0);
PrivateKey pk = (PrivateKey)keyStore.getKey(alias,password);
Certificate[] certChain = new Certificate[1];
certChain[0] = signerCert;
PdfReader reader = new PdfReader(inputData);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
PdfStamper stamper = PdfStamper.createSignature(reader, outStream, '\0',null,true);
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
String fieldName = keyStore.getCertificateAlias(signerCert).replaceAll(".","");
appearance.setVisibleSignature(new Rectangle(420, 10, 70, 85), pageNumber,fieldName);
ExternalSignature es = new PrivateKeySignature(pk, DigestAlgorithms.SHA256,
keyStore.getProvider().getName());
ExternalDigest digest = new BouncyCastleDigest();
MakeSignature.signDetached(appearance,
digest, es,
certChain, null,
null, null,
0, CryptoStandard.CADES);
return outStream.toByteArray();
为什么它适用于 SHA-1 而不是 SHA-2?您认为问题出在哪里?
【问题讨论】:
-
example.dll支持哪些算法? -
它确实支持 SHA256 的哈希值和 SHA256RSA 的签名算法。
-
请分享一个使用 sha256 签名的示例 pdf 进行分析。
-
所以我更改了我的哈希值,现在 adobe 显示谁签署了它(因为它曾经是未知的)并且 adobe 还显示哈希算法是 SHA256,它以前没有显示,现在 adobe 说“该文件已被更改,因为......”。我像这样更改了我的哈希: MessageDigest _digest = MessageDigest.getInstance("SHA-256");字节[] 哈希 = _digest.digest(sh); -------------------------------- 我的pdf:file.io/BAvRbgT7RbyB
标签: itext token signature sign pkcs#11