2016-11-20 86 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

相关问题