JAVA后台与前端JAVASCRIPT之间AES加密解密互通

调试了一天终于把java后台与javascript之间的AES加密解密成功了,记录一下过程。

后台java解密代码:解码算法及模式为

AES/CBC/PKCS5Padding

key与iv要为16位

得到16的字符数组按照16进制编码转化为字符串

public static String encrypt(String content, String key) throws Exception {
        try {

            Key keySpec = new SecretKeySpec(key.getBytes(), "AES");    //两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DES

            String iv   = "1234567890123456";//初始化向量参数,AES 为16bytes. DES 为8bytes.

            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, keySpec,ivSpec);
            //Cipher cipher = AesUtil.generateCipher(Cipher.ENCRYPT_MODE,"1234567890123456".getBytes(),"1234567890123456".getBytes());

            byte[] byteResult = cipher.doFinal(content.getBytes());

            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteResult.length; i++) {
                String hex = Integer.toHexString(byteResult[i] & 0xFF);
                if (hex.length() == 1) {
                    hex = '0' + hex;
                }
                sb.append(hex.toUpperCase());
            }
            return sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

 

前端JAVASCRIPT代码如下:

37999D4237A3D2701EB368EC53097EC963B5E128D13C8360051ECE37AF7D3A649626AA1D828B9B61813A7557C2C464CDFD913D84C8E507804B51B5904323C8BF为java后台生成的密文

需要先转为16进制字节数组,再转化为BASE64编码才能被
CryptoJS.AES.decrypt方法使用。

key与iv也要经过CryptoJS.enc.Utf8.parse方法转化才能使用。
得到的decrypted1是一个对象,需要进行解析才能使用。

依赖的js文件是CryptoJS v3.1.2:<script type="text/javascript" src="js/aes.js"></script>
        var encryptedHexStr = CryptoJS.enc.Hex.parse("37999D4237A3D2701EB368EC53097EC963B5E128D13C8360051ECE37AF7D3A649626AA1D828B9B61813A7557C2C464CDFD913D84C8E507804B51B5904323C8BF");
        
        // 将密文转为Base64的字符串
        // 只有Base64类型的字符串密文才能对其进行解密

        var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        //alert("encryptedBase64Str");
        var decrypted1 = CryptoJS.AES.decrypt(encryptedBase64Str, CryptoJS.enc.Utf8.parse("1234567890123456"),
                {
                    iv: CryptoJS.enc.Utf8.parse("1234567890123456"),
                    mode:CryptoJS.mode.CBC,
                    padding:CryptoJS.pad.Pkcs7
                });
        alert(CryptoJS.enc.Utf8.stringify(decrypted1).toString());
        var txt = (CryptoJS.enc.Utf8.stringify(decrypted).toString());

 

猜你喜欢

转载自blog.csdn.net/mafei6827/article/details/79645215