2015-06-11 147 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

回答更新了一些代碼來切斷您的字節數組。 –

相關問題