使用Bouncy Castle Crypto进行解密时出现非法参数异常

时间:2010-09-22 19:45:21

标签: java bouncycastle

任何人都可以指出我正确的方向。我不确定为什么在解密密钥时我得到非法的参数异常。这曾经比较早。这是堆栈跟踪。

java.lang.IllegalArgumentException: DES key too long - should be 8 bytes
    at org.bouncycastle.crypto.engines.DESEngine.init(Unknown Source)
    at org.bouncycastle.crypto.modes.CBCBlockCipher.init(Unknown Source)
    at org.bouncycastle.crypto.BufferedBlockCipher.init(Unknown Source)
    at com.project.util.Encryptor.decrypt(Encryptor.java:90)
    at com.project.util.Encryptor.decryptString(Encryptor.java:103)
    at com.project.util.EncryptionUtil.getdecryptedlicense(EncryptionUtil.java:145)
    at com.project.util.EncryptionUtil.<clinit>(EncryptionUtil.java:52)
    at com.project.ebiz.security.jaas.SQLLoginModule.login(SQLLoginModule.java:176)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
    at javax.security.auth.login.LoginContext.login(LoginContext.java:579)

1 个答案:

答案 0 :(得分:0)

我必须是一个心灵读者,因为你根本没有显示任何代码。我将进行以下WAG:

您使用8长字符串来存储硬编码密钥,并使用String.getBytes()方法将其转换为字节数组。此方法使用平台默认字符集,几乎总是一个大禁忌。在您测试过的平台上,默认字符集类似于US-ASCII,它总是将一个字符转换为一个字节。在您遇到问题的平台上,默认字符集是UTF-16变体。

这是我的猜测。