前后端(PHP)使用AES對稱加密


前端代碼:

// 這個是加密用的
function encrypt(text){
    var key = CryptoJS.enc.Utf8.parse('1234567890654321'); //為了避免補位,直接用16位的秘鑰
    var iv = CryptoJS.enc.Utf8.parse('1234567890123456'); //16位初始向量
    var encrypted = CryptoJS.AES.encrypt(text, key, {
            iv: iv,
            mode:CryptoJS.mode.CBC,
            padding:CryptoJS.pad.Pkcs7
        });
    return encrypted.toString();
}
encrypt(123); // AMFSKTJa3K092qSi5XC46w==
// 這個是解密用的 function decrypt (text) { var key = CryptoJS.enc.Utf8.parse('1234567890654321'); //為了避免補位,直接用16位的秘鑰 var iv = CryptoJS.enc.Utf8.parse('1234567890123456'); //16位初始向量 var encrypted = CryptoJS.AES.decrypt(text, key, { iv: iv, mode:CryptoJS.mode.CBC, padding:CryptoJS.pad.Pkcs7

  });

  return encrypted.toString(CryptoJS.enc.Utf8);
}

 

php代碼:

// 加密用的
// 參數1,為數據,參數2為加密算法,AES里最安全的一種
$a = openssl_encrypt('123', 'aes-128-cbc', '1234567890654321', 1, '1234567890123456');
echo base64_encode($a);  // AMFSKTJa3K092qSi5XC46w==


// 解密用的
$b = openssl_decrypt($encrypted, 'aes-128-cbc', $key, 0 , $iv);
echo $b;

// 其中,加密方法的第四個參數為1,而解密的第四個參數為0,不然解密不了

 

這樣可以實現js加密結果和php加密結果一致,而且兩者都能互相解密

另,其他參數不變情況下,修改js的 padding為 CryptoJS.pad.ZeroPadding 會是加密結果不同,但確可以php的 openssl_decrypt 解密,且解密結果一樣。

 


免責聲明!

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



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