0
我曾經見過很多類似的問題,但我還沒有找到正確的答案。在Java中生成並編碼PKCS7消息
我得到了由C#生成並編碼的簽名SignedCms。
我的目標是在Java中生成相同的簽名。 我設法創建了一個具有相同長度和大部分數據的相似簽名。 但是從120到133位的位置不同,並且最後大約有250位。
根據此Anatomy of PKCS#7 signed message。我有錯誤的簽名和內容塊。 我試過bouncycastle,但我沒有設法生成正確的簽名。 我想使用sun。*類來生成和編碼PKCS#7消息。
X509Certificate x509 = siginingCert;
PrivateKey priv = privateKeyFromPKCS12KeyStore;
byte[] data = sha1HashOfDocument
String digestAlgorithm = "MD5";
String signingAlgorithm = "SHA1withRSA";
AlgorithmId[] digestAlgorithmIds = new AlgorithmId[]{AlgorithmId.get(digestAlgorithm)};
Signature sigSigner = Signature.getInstance(signingAlgorithm);
sigSigner.initSign(priv);
sigSigner.update(data);
byte[] signedAttributes = sigSigner.sign();
ContentInfo contentInfo = new ContentInfo(
sun.security.pkcs.ContentInfo.DATA_OID,
new DerValue(DerValue.tag_OctetString, data));
X509Certificate[] certificates = {x509};
BigInteger serial = x509.getSerialNumber();
String issuerName = x509.getIssuerDN().getName();
AlgorithmId dAlgId = AlgorithmId.getAlgorithmId(digestAlgorithm);
SignerInfo si = new SignerInfo(
new X500Name(issuerName), serial, dAlgId, null,
new AlgorithmId(AlgorithmId.RSAEncryption_oid),
signedAttributes, null);
SignerInfo[] signerInfos = {si};
PKCS7 p7 = new PKCS7(digestAlgorithmIds, contentInfo, certificates, signerInfos);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
p7.encodeSignedData(bytes);
我被困在這個問題上,我不知道我錯過了。
任何幫助表示讚賞。非常感謝。
http://stackoverflow.com/questions/11013111/java-implementation-of-c-sharp-signedcms與此類似 – nixspirit 2012-06-14 03:45:26