我需要在Java中使用16字节数组密钥材料创建双倍长度的3DES密钥,使用它加密消息并获取16字节长度的数组。我能够使用24个字节但不是16个字节...使用双倍长度的3DES密钥加密Java并产生16字节的数组密码
因为DESede需要24字节[],唯一能产生具有16字节长密钥材料的双倍长度3DES密钥的方法,我能通过使用DESede实例,然后通过在末尾添加前8个字节来增加其长度来获得24个字节。像这样:
byte[] keyMaterial = // Assume this one is 16 bytes.
byte[] newKeyBytes = ByteBuffer.wrap(new byte[ 24 ])
.put(Arrays.copyOfRange(keyMaterial, 0, 16))
.put(Arrays.copyOfRange(keyMaterial, 0, 8))
.array();
SecretKeyFactory mySecretKeyFactory = SecretKeyFactory.getInstance("DESede");
KeySpec myKeySpec = new DESedeKeySpec(newKeyBytes);
SecretKey encryptionKey = mySecretKeyFactory.generateSecret(myKeySpec);
现在,当我有我的DESede密钥时,我可以用下面的方式使用它来加密消息。另外,我需要使用“ECB”模式:
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, encryptionKey);
byte[] returnValue = cipher.doFinal(dataToEncrypt)
但是结果是我回到24字节数组,而不是16字节数组,我想这是因为我有24字节数组加密。
有没有办法创建一个16字节长而不是24字节的3DES SecretKey,或者当用24字节长的SecretKey进行加密时,根据需要取回16字节长的加密消息而不是24字节长?
谢谢!
2017-07-27
Simplyi