您的位置:首页 > 其它

3des加密数据长度报错

2017-07-04 18:36 127 查看
javax.crypto.IllegalBlockSizeException: error:0607F08A:digital envelope routines:EVP_EncryptFinal_ex:data not multiple of block length

这个报错的原因是要加密的数据长度不是密钥长度的倍数!

修改如下(红色代码加上后就不会报错了):

while (in.length()%16 != 0){ in = in + "0"; }

//3DES加密
public static String TDesEnc(String key, String in){
while (in.length()%16 != 0){
in = in + "0";
}
try {
return bcd2str(TDesEnc(hexStringToByte(key.toUpperCase()), hexStringToByte(in.toUpperCase())));
} catch (Exception e) {
e.printStackTrace();
}
return "";
}

//3DES加密
public static byte[] TDesEnc(byte[] key, byte[] in) throws Exception {

Key deskey = null;
byte[] tdesKey = new byte[24];
if (key.length % 8 != 0)
return null;

if (key.length == 8) {
System.arraycopy(key, 0, tdesKey, 0, 8);
System.arraycopy(key, 0, tdesKey, 8, 8);
System.arraycopy(key, 0, tdesKey, 16, 8);
}

if (key.length == 16) {
System.arraycopy(key, 0, tdesKey, 0, 16);
System.arraycopy(key, 0, tdesKey, 16, 8);
}

DESedeKeySpec spec = new DESedeKeySpec(tdesKey);
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
deskey = keyfactory.generateSecret(spec);

Cipher cipher = Cipher.getInstance("desede" + "/ECB/NoPadding");

cipher.init(Cipher.ENCRYPT_MODE, deskey);
byte[] bOut = cipher.doFinal(in);

return bOut;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  des 3des