gpt4 book ai didi

java - 如何在 java 中使用 AES 加密设置 block 大小和 key 大小

转载 作者:搜寻专家 更新时间:2023-10-31 19:39:58 25 4
gpt4 key购买 nike

我正在尝试在 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();

最佳答案

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

关于 block 大小,JCA specification说:

AES is a 128-bit block cipher supporting keys of 128, 192, and 256 bits.

因此 block 大小始终为 128 位。

关于java - 如何在 java 中使用 AES 加密设置 block 大小和 key 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com