三重DES编码-java.security.InvalidKeyException:密钥大小必须为128或192位

时间:2016-11-20 13:46:21

标签: android encryption 3des ecb pkcs#5

我使用下面的代码用ECB和PKSC5 Padding实现Triple DES编码。我使用的密钥存储在raw文件夹中名为key的文件中。我得到以下异常 -

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 :(得分:0)

您传递了一个长度为1024的数组作为密钥。密钥必须是长度16(128位)或24(192位)。 1024不是这些数字。

如果您正在进行阅读,请在阅读后将阵列调整到合适的大小。