2012-04-24 31 views
0

これまでによく似た質問がたくさんありましたが、まだ適切な答えが見つかりませんでした。JavaでPKCS7メッセージを生成してエンコードする

私はC#SignedCmsによって生成され、コード化された署名を取得しました。

私の目標は、Javaで同じシグネチャを生成することです。 同じ長さとそのデータの大部分を持つ同様の署名を作成することができました。 しかし、120〜133ビットと最後の約250ビットの位置に同じビットはありません。

これによれば、Anatomy of PKCS#7 signed message。私は署名と内容のブロックが間違っています。 私はバウンシーキャスルを試みましたが、正しいシグネチャを生成することはできませんでした。 私はsuns. *クラスを使用して、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); 

私はこの問題を抱えていましたが、私が逃したものは何も分かりません。

何か助けていただければ幸いです。どうもありがとう。

+0

http://stackoverflow.com/questions/11013111/java-implementation-of-c-sharp-signedcmsはこれと似ています – nixspirit

答えて

0
byte[] signedData = signature.sign(); 

    SignerInfo si = new SignerInfo(
      new X500Name(issuerName), serial, dAlgId, null, 
      new AlgorithmId(AlgorithmId.RSAEncryption_oid), 
      signedAttributes,signedData ); 
関連する問題