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());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM