2017-12-26 48 views
0

pkcs#7とbouncycastleを使用してテキストとzipファイルに署名して確認するプログラムがあります。署名した後、完全に私のテキストファイルを確認することができpkcs#7とJavaのbouncyCastleを使用してzipファイルに署名できません

String finalmsg="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n" + 
        "<Envelope>\n" +" <OrgContent>"+new String(Base64.encode(contentbytes))+"</OrgContent>\n"+" <Signature>"+new String(Base64.encode(signedBytes))+"</Signature>\n"+" <Certificate>"+ 
        new String(Base64.encode(keyStore.getCertificate("CertName").getEncoded()))+"</Certificate>\n"+"</Envelope>"; 

アム: (元データ、SignedBytesおよび証明書データbase64エンコードが含まれている)テキストおよびZIPファイルの両方に次の文字列を書いています。また、コードがある私のzipファイルを確認することができていますが、zipファイルを解凍することはできませんよ

以下(zipファイルエラーの予期せぬ終了を取得しています)ファイルに私の署名されたメッセージを書くために使用しています:

if(file.getName().contains(".zip")) { 
byte[] b = finalmsg.getBytes(StandardCharsets.UTF_8); 
try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(address+"SIGVERFILES/s2/"+name), 4096)) { 
    out.write(b); 
} 
} else { 
    FileWriter fw = new FileWriter(address+"SIGVERFILES/s2/"+name,true); 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.write(finalmsg); 
    bw.close(); 
} 

他の当事者が署名したzipファイルも正常に確認して解凍できます。だから、私の認証コードは大丈夫です。私はzipファイルを書いている途中で何かが間違っていると思う。 インデントを気にしないでください。私がここで間違っていることを見つけようとしていますか?

もうコードスニペットが必要かどうかお知らせください。

答えて

0

XML文字列をファイルに書き込んだり、名前を "whatever.zip"に変更したり、結果を有効なzipファイルにすることはできません。 Zipは、独自の制約を持つバイナリファイル形式です。そのうちの1つは、ファイルの先頭に「PK」で始まるマジック番号です。

符号付きデータの交換にも独自の制約があり、PKCS#7 SignedDataも正規化形式です。

BouncyCastleは、適切にラップされた有効な署名付きデータを生成するヘルパークラスを提供します。彼らのドキュメントと例を確認してくださいherehere

アタッチされたシグネチャまたはデタッチされたシグネチャを生成するかどうかを決める必要があります。シグネチャが添付されている場合、ASN.1構造には署名付きメッセージが含まれているため、シグネチャを検証して同じデータブロック:RSA証明書)。切り離された署名では、データとその署名を別々に送信する必要があります(ただし、受信者は署名を検証するためには両方を必要とします - 例:公開FTPサーバーでダウンロードできる署名付きファイル)。通常、質問は、受信者が最初に署名を検証せずにペイロードを使用するかどうかを尋ねるだけで答えられます。

関連する問題