2015-06-11 108 views
-2

我在密码加密和解密java文件中遇到以下异常。密钥长度必须在40到1024位之间

我在这个网站的大部分地方得到了这个问题的解决方案是用Java加密扩展(JCE)无限强度管辖权策略文件替换现有的安全策略文件。

我做到了这一点,但仍然是相同的错误即将到来。

但是,相同的代码在Linux操作系统的jdk1.6中工作正常。我从网站复制了最新的1.7兼容Java加密扩展(JCE)无限强度管辖权策略文件。

JDK版本 - jdk1.7.0_25
服务器操作系统 - Linux的

例外:
java.security.InvalidKeyException:你解释的密钥长度必须是40和1024位

+0

哪里是你的代码? –

+0

SecretKeySpec secretkeyspec = new SecretKeySpec(HexDecode(s1), \t \t \t \t \t“RC4”); 密码密码= Cipher.getInstance(“RC4”); cipher.init(Cipher.ENCRYPT_MODE,secretkeyspec); abyte0 = cipher.doFinal(HexDecode(s2)); – Muralidharan

+0

在Cipher.getInstance(“RC4”)这行中得到异常 – Muralidharan

回答

0

之间在传递密钥的注释中是512字节长。错误消息是“密钥长度必须在40到1024位之间”。

512字节* 8位= 4096位。你的钥匙确实太长了。

如果你没有解码,将其与按键超过1024位长较早编码的东西,然后用这个代码在128个字节(= 1024个比特)来切断:

byte[] key = HexDecode(s1); 
if (key.length > 128) 
{ 
    key = Arrays.copyOf(key, 128); 
} 
SecretKeySpec secretkeyspec = new SecretKeySpec(key, "RC4"); 
+0

任何人都可以请为此提供解决方案吗? – Muralidharan

+0

@Muralidharan,如果你知道密钥更长的话,你可以在1024比特处截取它,即128字节。然而,在切换到JDK7之前已经加密的东西呢?那一个将是遥不可及的。在这种情况下,我建议使用自己的RC4实现,google用于“java rc4实现”。 –

+0

回答更新了一些代码来切断您的字节数组。 –

相关问题