gpt4 book ai didi

1 个 block (16 字节)的 Java AES-128 加密返回 2 个 block (32 字节)作为输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:15 25 4
gpt4 key购买 nike

我使用以下代码进行 AES-128 加密来编码一个 16 字节的 block ,但编码值的长度给出了 2 个 32 字节的 block 。我错过了什么吗?

    plainEnc = AES.encrypt("thisisapassword!");
    import java.security.*;    import java.security.spec.InvalidKeySpecException;    import javax.crypto.*;    import sun.misc.*;    public class AES {         private static final String ALGO = "AES";         private static final byte[] keyValue =             new byte[] { 'T', 'h', 'e', 'B', 'e', 's', 't',    'S', 'e', 'c', 'r','e', 't', 'K', 'e', 'y' };    public static String encrypt(String Data) throws Exception {            System.out.println("string length: " + (Data.getBytes()).length); //length = 16            Key key = generateKey();            Cipher chiper = Cipher.getInstance(ALGO);            chiper.init(Cipher.ENCRYPT_MODE, key);            byte[] encVal = chiper.doFinal(Data.getBytes());            System.out.println("output length: " + encVal.length); //length = 32            String encryptedValue = new BASE64Encoder().encode(encVal);            return encryptedValue;        }        public static String decrypt(String encryptedData) throws Exception {            Key key = generateKey();            Cipher chiper = Cipher.getInstance(ALGO);            chiper.init(Cipher.DECRYPT_MODE, key);            byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);            byte[] decValue = chiper.doFinal(decordedValue);            String decryptedValue = new String(decValue);            return decryptedValue;        }        private static Key generateKey() throws Exception {            Key key = new SecretKeySpec(keyValue, ALGO);            return key;    }}

最佳答案

Cipher.getInstance("AES") 返回使用 PKCS #5 填充的密码。在所有情况下都会添加此填充 - 当明文已经是 block 大小的倍数时,会添加整个填充 block 。

Cipher.getInstance() 调用中明确指定您的意图,以避免依赖默认值并可能导致混淆:

Cipher.getInstance("AES/ECB/NoPadding");

您还会看到您正在使用 ECB 模式,这几乎在任何情况下都是一个糟糕的选择。

关于1 个 block (16 字节)的 Java AES-128 加密返回 2 个 block (32 字节)作为输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18440907/

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