AES-256 encryption and decryption in PHP and JS

PHP:

class clsAES
{
    private $key = '';
    private $iv = '';

    public function __construct($key, $iv)
    {
        $this->key = md5($key);
        $this->iv = $iv;
    }

    public function encrypt($data)
    {
        $cryptText = openssl_encrypt($data,"aes-256-cbc",$this->key ,OPENSSL_RAW_DATA,$this->iv);
        return base64_encode($cryptText);
    }

    public function decrypt($data)
    {
        $cryptText = base64_decode($data);
        return trim(openssl_decrypt($cryptText, 'aes-256-cbc', $this->key , OPENSSL_RAW_DATA,$this->iv));
    }
}

JS:

Vue:

import CryptoJS from 'crypto-js'

const KEY = '5NmhVXqSro6j9eyNO3bzw';
const IV = '1234567890123456';

function getAesString(data, key, iv) {//加密
    var key_hash = CryptoJS.MD5(key).toString();
    var key = CryptoJS.enc.Utf8.parse(key_hash);  
    var iv = CryptoJS.enc.Utf8.parse(iv);
    var encrypted = CryptoJS.AES.encrypt(data, key,
        {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
    return encrypted.toString();    //返回的是base64格式的密文
}
function getDAesString(encrypted, key, iv) {//解密
    var key_hash = CryptoJS.MD5(key).toString();
    var key = CryptoJS.enc.Utf8.parse(key_hash);
    var iv = CryptoJS.enc.Utf8.parse(iv);
    var decrypted = CryptoJS.AES.decrypt(encrypted, key,
        {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
    return decrypted.toString(CryptoJS.enc.Utf8);
}
export function getEAES(data) { //加密
    var encrypted = getAesString(data, KEY, IV);
    // var encrypted1 = CryptoJS.enc.Utf8.parse(encrypted);
    return encrypted;
}
export function getDAES(data) {//解密
    return getDAesString(data, KEY, IV);
}
//模块初始化
var init=function () {
    key = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(ym.hezubao).toString());
    iv = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(key).toString().substr(0,16));
}
function encrypt(data) {
    var encrypted='';
    if(typeof(data)=='string')
    {
      encrypted = CryptoJS.AES.encrypt(data,key,{
        iv : iv,
        mode : CryptoJS.mode.CBC,
        padding : CryptoJS.pad.ZeroPadding
      });
    }else if(typeof(data)=='object'){
      data = JSON.stringify(data);
      encrypted = CryptoJS.AES.encrypt(data,key,{
        iv : iv,
        mode : CryptoJS.mode.CBC,
        padding : CryptoJS.pad.Pkcs7    //ZeroPadding
      })
    }
    return encrypted.toString();
}
/*AES解密
* param : message 密文
* return : decrypted string 明文
*/
function decrypt(message) {
    decrypted='';
    decrypted=CryptoJS.AES.decrypt(message,key,{
      iv : iv,
      mode : CryptoJS.mode.CBC,
      padding : CryptoJS.pad.ZeroPadding
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}
<script src="./js/crypto-js.js"></script>
<script src="./js/aes.js"></script>
<script>
var key = '3132333435363738393041424344454631323334353637383930414243444566';
     console.log('密钥:', key);
     key = CryptoJS.enc.Hex.parse(key)
     iv = CryptoJS.enc.Hex.parse("30313233343536373839414243444546")
     var src = "werty7890";
     console.log('原字符串:', src);
     var enc = CryptoJS.AES.encrypt(src ,key,{
         iv:iv,
         mode: CryptoJS.mode.CBC,  
         padding: CryptoJS.pad.Pkcs7
     })

     //console.log('加密:',enc.toString());
     var enced = enc.ciphertext.toString()
     console.log("加密:", enced);

     var dec = CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(enced), key,{
         iv:iv,
         mode: CryptoJS.mode.CBC,  
         padding: CryptoJS.pad.Pkcs7
     })
     console.log('解密:',CryptoJS.enc.Utf8.stringify(dec));

Comments are closed.