3

我正在尝试在 Netbeans Java 中加密我捕获的 IP 地址,但是当我运行我的表单时,我收到了消息addr is of illegal length。为什么我会收到这个错误?

这是代码:

if (packet instanceof IPPacket) {

    IPPacket ipp = (IPPacket) packet;
    InetAddress dest = ipp.dst_ip;
    KeyGenerator keygenerator;

    try {
        keygenerator = KeyGenerator.getInstance("DES");
        SecretKey myDesKey = keygenerator.generateKey();
        Cipher desCipher;
        // Create the cipher
        desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);
        byte[] ipEncrypted = desCipher.doFinal(ipp.dst_ip.getAddress());
        InetAddress src = ipp.src_ip;
        //   System.out.println(dest);
        try {
            ipp.dst_ip = InetAddress.getByAddress(ipEncrypted);
        } catch(Exception e) {
             System.out.println(e.getMessage());
        }
        ipp.src_ip = src;
    } catch(Exception ex ) {
        System.out.println(ex.getMessage());
    }
4

2 回答 2

4

因为 DES 输出 8 字节块,而 IPv4 和 IPv6 地址分别需要 4 字节或 16 字节。

于 2012-11-19T18:06:09.587 回答
1

public static InetAddress getByAddress(byte[] addr) throws UnknownHostException 返回给定原始 IP 地址的 InetAddress 对象。参数按网络字节顺序排列:地址的最高字节在 getAddress()[0] 中。此方法不阻塞,即不执行反向名称服务查找。

IPv4 地址字节数组必须为 4 字节长,IPv6 字节数组必须为 16 字节长

我相信对于 DES,块大小是 8 个字节......所以加密的输出大小是 8 的倍数。你可以通过检查 ipEncrypted 的长度来确认这一点。

于 2012-11-19T18:05:54.497 回答