0

次のバイト配列を暗号化したい mycode は正常に動作しますが、長いサイズの出力 newByteArray が得られます 出力された配列のサイズを 16 にすることは可能ですか

 byte [] keyForEncription= new byte[16];
        byte [] keyForDecription= new byte[16];
        long  FixedKey= 81985526925837671L;
        long  VariableKey=744818830;
            for (int i1 = 0; i1 < 8; i1++)
        {

            keyForEncription[i1] = (byte)(FixedKey >> (8 * i1));
            keyForEncription[i1 + 8] = (byte)(VariableKey >> (8 * i1));
        }


    byte[] data = new byte[255];

    data[0]= 2;
    data[1]= 0;
    data[2]= 0;
    data[3]= 0;
    data[4]= 0;
    data[5]= 6;
    data[6]= 6;
    data[7]= 81;
    data[8]= 124;
    data[9]= 123;
    data[10]= 123;
    data[11]= 12;
    data[12]= 3;
    data[13]= 27;
    data[15]= 12;
    data[16]= 0;
    data[17]= 0;
    data[18]= 0;
    data[19]= 0;

    System.out.println("Original byte Array : " +Arrays.toString(data));

    SecretKeySpec skeySpec = new SecretKeySpec(keyForEncription, "AES");
   Cipher cipher1 = Cipher.getInstance("AES/ECB/NoPadding");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[] newByteArray = new byte[data.length];
    newByteArray = cipher.doFinal(byteArray);
    System.out.println("Encrypted Array : " +Arrays.toString(newByteArray));

暗号化された配列の出力は次のとおりです。 50, -116, -47, -53, 103, -40, -61, 62, 42, 15, -124, 98, -28, -77, 94, 78, -50, -116, -47, - 53, 103, -40, -61, 62, 42, 15, -124, 98, -28, -77, 94, 78, -50, -116, -47, -53, 103, -40, -61 , 62, 42, 15, -124, 98, -28, -77, 94, 78, -50, -116, -47, -53, 103, -40, -61, 62, 42, 15, -124 、98、-28、-77、94、78、-50、-116、-47、-53、103、-40、-61、62、42、15、-124、98、-28、-77、 94、78]

4

1 に答える 1

1

ここでは、次のコードが正常に機能します。

    byte[] key = new byte[16];
    SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
    Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

    byte[] data = "hello world.....".getBytes();
    byte[] encrypted = cipher.doFinal(data);
    System.out.println("Encrypted Array : " + Arrays.toString(encrypted));

"hello world".getBytes()ただし、入力サイズが 16 の倍数ではないため、これは機能しません。

Exception in thread "main" javax.crypto.IllegalBlockSizeException: Input length not multiple of 16 bytes
    at com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:854)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:828)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)
    at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:313)
    at javax.crypto.Cipher.doFinal(Cipher.java:2086)
    at com.foo.bar.CryptoTest.main(CryptoTest.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

ただし、パディングが使用されていないため、これは予想どおりです。それが例外である場合(質問が言うように「無効なキー」ではない場合)、入力データの長さを修正します。それ以外の場合は、正確で完全なエラー スタック トレースを質問に貼り付けてください。

于 2013-03-15T10:47:00.830 に答える