首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中使用AES加密设置BlockSize和KeySize

如何在java中使用AES加密设置BlockSize和KeySize
EN

Stack Overflow用户
提问于 2013-03-15 14:22:07
回答 1查看 12.5K关注 0票数 5

我试图在java加密代码中设置BlockSize和KeySize。

下面是我的代码,运行良好,但是如何指定aes.BlockSize=128和aes.KeySize=128?

我参考了.NET中的Aes =.NET(),其中我们可以设置如下参数

代码语言:javascript
复制
aes.BlockSize = 128;
aes.KeySize = 128;
CipherMode.ECB;
aes.Padding = PaddingMode.None;           

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

代码语言:javascript
复制
aes.Key = key
aes.Mode = CipherMode.ECB
aes.Padding = PaddingMode.None

但我不能

代码语言:javascript
复制
aes.BlockSize = 128
aes.KeySize = 128;
代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-15 15:30:25

因为您正在用16字节(128位)的键初始化密码,所以它使用它作为密钥大小。

关于块的大小,JCA规范说:

AES是128位、192位和256位的支持密钥的128位分组密码.

所以块大小总是128位。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15434802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档