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 只是给我们一个不可用的错误信息。但是 std lib 的工作是正确的。比较它们:

// 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 回答