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 に答える