android 16字节3des,使用双倍长度的3DES密钥加密Java并产生16字节的数组密码

该问题探讨如何在Java中使用16字节数组创建双倍长度的3DES密钥,并用于加密消息,期望得到16字节的加密结果。目前的实现通过在16字节密钥后面添加其前8字节以形成24字节的3DES密钥,但加密后返回的是24字节的结果。询问是否有方法创建16字节的3DES密钥或在使用24字节密钥加密时获取16字节的输出。
摘要由CSDN通过智能技术生成

我需要在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值