首页 > 解决方案 > java.security.InvalidKeyException:无效的密钥长度:8 字节

问题描述

我有一个要求,我有一个十六进制密钥 1122334455667788 和十六进制消息 2962A83E5D3D5187 用 3des 解码。但是当我尝试对其进行解码时,我收到错误“java.security.InvalidKeyException:无效的密钥长度:8 字节”。请有人帮忙吗?

我的解密代码

public class TripleDES {

    public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                                 + Character.digit(s.charAt(i+1), 16));
        }
        return data;
    }


public static void main(String[] args) throws Exception {

    byte[] keyBytes=hexStringToByteArray("1122334455667788");
    byte[] message=hexStringToByteArray("2962A83E5D3D5187");
     final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
        final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
        final Cipher decipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
        decipher.init(Cipher.DECRYPT_MODE, key, iv);

        // final byte[] encData = new
        // sun.misc.BASE64Decoder().decodeBuffer(message);
        final byte[] plainText = decipher.doFinal(message);    
    }
}

标签: java3des

解决方案


import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class TripleDES {

    public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }

    public static void main(String[] args) throws Exception {
        byte[] keyBytes = hexStringToByteArray("1122334455667788");
        byte[] message = hexStringToByteArray("2962A83E5D3D5187");
        final SecretKey key = new SecretKeySpec(keyBytes, "DES");
        final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
        final Cipher decipher = Cipher.getInstance("DES/ECB/NoPadding");
        decipher.init(Cipher.DECRYPT_MODE, key);
        final byte[] plainText = decipher.doFinal(message);
        System.out.println("Decrypted Data :: "+new String(plainText));
    }
}

输出

Decrypted Data :: FB

推荐阅读