5

SHA1 を使用してトークン オブジェクトに署名しようとしています。セキュリティ プロバイダーとして bouncycastle を使用しています。プログラムが何かに署名しようとするたびに、このエラーが発生します。

java.security.SignatureException: java.lang.IllegalArgumentException: input data too large.

何かに署名するための最大サイズは? このオブジェクトに署名する方法について何か提案はありますか?

4

2 に答える 2

7

入力サイズはキーのサイズに制限されます。1024 ビット キーを使用する場合、128 バイトに制限されます。

通常、実際のデータではなく、ダイジェスト (ハッシュ値) に署名します。

于 2010-04-20T19:50:48.813 に答える
1

このエラーを修正するには、より大きなキー サイズを使用する必要があります。たとえば、SHA 512 ビットが選択されている場合、キーは 1024 ビットのものになる可能性があります。ただし、同じ長さ (512) 以下のキーでは失敗します。

BouncyCastle は、使用できないエラー メッセージを表示するだけです。しかし、標準ライブラリはその仕事を正しく行います。それらを比較してください:

// using a 512 bit key here
// leads to this error message if Sun's standard provider is used
Signature sig = Signature.getInstance("SHA512withRSA", "SunRsaSign");
rsa.initSign(privateKey);
rsa.update(data);
rsa.sign();

java.security.InvalidKeyException: Key is too short for this signature algorithm
    at sun.security.rsa.RSASignature.initCommon(RSASignature.java:129)
    at sun.security.rsa.RSASignature.engineInitSign(RSASignature.java:111)
    at sun.security.rsa.RSASignature.engineInitSign(RSASignature.java:101)
    at java.security.Signature$Delegate.engineInitSign(Signature.java:1127)
    at java.security.Signature.initSign(Signature.java:511)


// using a 512 bit key here
// leads to this error message if the BounceCastle provider is used
Signature sig = Signature.getInstance("SHA512withRSA", "BC");
    ...

java.security.SignatureException: java.lang.IllegalArgumentException: input data too large
    at org.bouncycastle.jce.provider.JDKDigestSignature.engineSign(Unknown Source)
    at java.security.Signature$Delegate.engineSign(Signature.java:1160)
    at java.security.Signature.sign(Signature.java:553)
于 2013-11-16T20:46:52.993 に答える