2010-09-22 135 views
1

任何一个人都可以指向正确的方向。我不知道为什么我在解密密钥时遇到非法参数异常。这用于早期工作。这是栈跟踪。用Bouncy Castle Crypto解密时出现非法参数异常

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) 
+2

我无法想象一个错误消息更清晰。 – 2010-09-22 22:48:03

回答

0

因为您根本没有显示任何代码,所以我必须成为一名读者。我将制作以下WAG:

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

这是我的猜测。

相关问题