1

"SHA1withRSA"Android で Bouncy Castle を使用した署名に問題があります。Bouncy Castle 署名値が .NET 署名値と一致しません。

のような多くのアルゴリズムを使用しようとしましたが"SHA1withRSA"、満足のいく結果は得られませんでした。"SHA1withRSAAndMGF1""SHA1withRSA/ISO9796-2"

同じメッセージ、同じアルゴリズム、同じ秘密鍵を使用した場合、結果は .NET と Bouncy Castle で同じでなければなりません... そうではありませんか? 私のコードで何が間違っていますか???

秘密鍵の取得:

... 
ks = KeyStore.getInstance("PKCS12"); 
... 
key = ks.getKey(alias, senha.toCharArray()); 
if (key instanceof PrivateKey) { 
    privateKey = (PrivateKey) key; 
} 

署名方法:

public String signer(String txt, String alg) throws Exception { 
    Signature signer = Signature.getInstance(alg, new BouncyCastleProvider()); 
    signer.initSign(privateKey); 
    signer.update(txt.getBytes("UTF-8")); 
    return Base64.encodeToString(signer.sign(), Base64.NO_WRAP); 
} 

私のアプリは XMLDSIG プロトコルを使用して XML を政府の Web サービスに送信する必要があります。

4

1 に答える 1

3

署名されている値には、ランダムなパディング データが含まれる場合があります (署名は常に片側で同じですか?)。一方で署名を生成し、他方で検証を試みる必要があります。

これは、特に次のアルゴリズムに当てはまります。

"SHA1WITHRSAANDMGF1"
"SHA224WITHRSAANDMGF1"
"SHA256WITHRSAANDMGF1"
"SHA384WITHRSAANDMGF1"
"SHA512WITHRSAANDMGF1"

Bouncy Castle プロバイダーをインストールし、署名が公開鍵で検証できるかどうかを確認します。

于 2013-01-13T13:17:11.287 に答える