CryptoJS.AES 关于密码长度的处理问题

查看 13|回复 0
作者:lengong   
AES 密钥长度必须为 128 位、192 位或 256 位。也就是16,24,32字节,但是这里是48字节
用java如何实现 在密钥长度为16,24,32字节是,一下代码结果是一样
[JavaScript] 纯文本查看 复制代码[mw_shl_code=javascript,true]var key = CryptoJS.enc.Utf8.parse('11223344556677889900112233445566');
var iv = CryptoJS.enc.Utf8.parse('1122334455667788');
var e = CryptoJS.AES.encrypt('111', key, {
iv: iv
, mode: CryptoJS.mode.CBC
}).ciphertext;
e = CryptoJS.enc.Base64.stringify(e).toString();
console.info(e);[/mw_shl_code]

[Java] 纯文本查看 复制代码try {
            String keyString = "11223344556677889900112233445566";
            String ivString = "1122334455667788";
            byte[] keyBytes = keyString.getBytes("UTF-8");
            byte[] ivBytes = ivString.getBytes("UTF-8");
            SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
            IvParameterSpec iv = new IvParameterSpec(ivBytes);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key, iv);
            byte[] encryptedBytes = cipher.doFinal("111".getBytes("UTF-8"));
            // 将密文转换为 Base64 编码
            String encryptedBase64 = Base64.encodeBase64URLSafeString(encryptedBytes);
            // 输出结果
            System.out.println("Encrypted (Base64): " + encryptedBase64);
        } catch (Exception e) {
            e.printStackTrace();
        }

如果密钥长度大于32字节,js代码可以正常加解密,java不能正常执行,提示   Key length not 128/192/256 bits.
[JavaScript] 纯文本查看 复制代码[mw_shl_code=javascript,true]var key = CryptoJS.enc.Utf8.parse('1122334455667788990011223344556677889900161f4311');
var iv = CryptoJS.enc.Utf8.parse('1122334455667788');
var e = CryptoJS.AES.encrypt('111', key, {
iv: iv
, mode: CryptoJS.mode.CBC
}).ciphertext;
e = CryptoJS.enc.Base64.stringify(e).toString();
console.info(e);[/mw_shl_code]

长度, 字节

您需要登录后才可以回帖 登录 | 立即注册

返回顶部