5

我正在尝试在 java 加密代码中设置 BlockSize 和 KeySize。
这是我的代码可以正常工作,但如何指定 aes.BlockSize=128 和 aes.KeySize=128?
我在 .NET 中参考了 Aes aes = AesManaged(),我们可以在其中设置以下参数,如下所示

aes.BlockSize = 128;
aes.KeySize = 128;
CipherMode.ECB;
aes.Padding = PaddingMode.None;           

在下面的代码中,我设置了以下三个参数:

aes.Key = key
aes.Mode = CipherMode.ECB
aes.Padding = PaddingMode.None

但我无法设置

aes.BlockSize = 128
aes.KeySize = 128;

public static void main(String args[]) {

            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));
            }

            short[] data = new short[96];

            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] = 23;
            data[10] = 3;

            SecretKeySpec skeySpec = new SecretKeySpec(keyForEncription, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            CipherOutputStream cos = new CipherOutputStream(bos, cipher);
            DataOutputStream dos = new DataOutputStream(cos);

            byte[] byteArray_data = new byte[data.length];

            for (int i1 = 0; i1 < data.length; i1++)
                byteArray_data[i1] = (byte) data[i1];

                dos.write(byteArray_data, 0, 16);
            dos.close();

            byte[] ENCRYPTED_DATA = bos.toByteArray();

            for (int i1 = 0; i1 < 8; i1++) {

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

            SecretKeySpec skeySpec_decryption = new SecretKeySpec(keyForDecription,
                    "AES");
            Cipher cipher1 = Cipher.getInstance("AES/ECB/NoPadding");
            cipher1.init(Cipher.DECRYPT_MODE, skeySpec_decryption);

                    ByteArrayInputStream bis = new ByteArrayInputStream(ENCRYPTED_DATA);
            CipherInputStream cis = new CipherInputStream(bis, cipher1);
            DataInputStream dis = new DataInputStream(cis);

            byte[] DECRYPTED_DATA = new byte[byteArray_data.length];
            dis.readFully(DECRYPTED_DATA, 4, 16);
            cis.close();
4

1 回答 1

9

由于您使用 16 字节(128 位)的密钥初始化密码,因此它隐含地将其用作密钥大小。

关于块大小,JCA 规范说:

AES 是一种 128 位分组密码,支持 128、192 和 256 位密钥。

因此块大小始终为 128 位。

于 2013-03-15T15:30:25.733 回答