2016-11-20 84 views
-2

我正在使用下面的代碼來實現ECB和PKSC5 Padding的三重DES編碼。我使用的密鑰存儲在一個名爲原folder.I重點正在逐漸低於exception-三重DES編碼 - java.security.InvalidKeyException:密鑰大小必須是128或192位

java.security.InvalidKeyException: key size must be 128 or 192 bits 

爲什麼會出現這種異常,我在哪裏去了?

public byte[] encrypt(String message) throws Exception { 

     getResources().getIdentifier("key", 
       "raw", getPackageName()); 
     byte[] bytes = new byte[1024]; 
     try { 
      BufferedInputStream buf = new BufferedInputStream(getResources().openRawResource(
        getResources().getIdentifier("key", 
          "raw", getPackageName()))); 
      buf.read(bytes, 0, bytes.length); 
      buf.close(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     final SecretKey key = new SecretKeySpec(bytes, "DESede/ECB/PKCS5Padding"); 
     final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); 
     cipher.init(Cipher.ENCRYPT_MODE,key); 

     final byte[] plainTextBytes = message.getBytes("utf-8"); 
     final byte[] cipherText = cipher.doFinal(plainTextBytes); 

     return cipherText; 
    } 
+1

該異常不可能更清晰。 –

+0

@JamesKPolk我無法將字符串轉換爲以上例外的cipherText bcoz ..我不明白你的意思是「這個例外不可能變得更清楚」。 – Bhuvi

+0

@Bhuvi不要使用ECB模式,這是不安全的,請參閱[ECB模式](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29),向下滾動到企鵝。 取而代之的是將CBC模式與隨機IV一起使用,只是將加密數據與IV一起用於解密。另外3DES不能用於新作品。 – zaph

回答

0

您傳遞了一個長度爲1024的數組作爲您的密鑰。密鑰必須是長度16(128位)或24(192位)。 1024不是這些數字。

如果您正在爲您的閱讀進行過度定位,請在閱讀後將數組修剪至適當的大小。

+0

一個16字節的密鑰可能工作或不工作,具體取決於實現。 3DES密鑰是24個字節,OP正在使用的實現似乎需要16或24個字節,其中一部分重新用於16個字節的版本。請注意,密鑰大小是56位,112位和168位,每個字節的LSB被忽略,它曾經是奇偶校驗。 – zaph

相關問題