I am trying to set the BlockSize and KeySize in java encryption code.
Here is my code that works fine but how to specify the aes.BlockSize=128 and aes.KeySize=128?
I have taking reference of Aes aes = AesManaged() in .NET in which we can set the following parameter as follows
aes.BlockSize = 128;
aes.KeySize = 128;
CipherMode.ECB;
aes.Padding = PaddingMode.None;
In the code below I have set the following three parameters:
aes.Key = key
aes.Mode = CipherMode.ECB
aes.Padding = PaddingMode.None
but I am not able to set
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();
AES is a block cipher with a block length of 128 bits. AES allows for three different key lengths: 128, 192, or 256 bits.
For AES, the only valid block size is 128 bits.
For AES, the legal key sizes are 128, 192, and 256 bits.
AES does not expand data. Moreover, the output will not generally be compressible; if you intend to compress your data, do so before encrypting it. However, note that AES encryption is usually combined with padding, which will increase the size of the data (though only by a few bytes).
Since you're initializing the cipher with a key of 16 bytes (128 bits), it uses that as the key size implicitely.
And regarding the block size, the JCA specification says:
AES is a 128-bit block cipher supporting keys of 128, 192, and 256 bits.
So the block size is always 128-bits.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With