Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set BlockSize and KeySize using AES encription in java

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();
like image 769
Jivan Avatar asked Mar 15 '13 14:03

Jivan


People also ask

What is the correct block size and a possible key size in AES?

AES is a block cipher with a block length of 128 bits. AES allows for three different key lengths: 128, 192, or 256 bits.

What block size is AES encryption?

For AES, the only valid block size is 128 bits.

What is the size of AES encryption key?

For AES, the legal key sizes are 128, 192, and 256 bits.

Does AES encryption change file size?

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).


1 Answers

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.

like image 134
JB Nizet Avatar answered Oct 20 '22 21:10

JB Nizet