天天看點

vue和PHP實作ECB加解密

PHP端

/**
*
*$data   要加解密的字元串
*$operation  傳參為true的時候表示解密,否則為加密
*$code 為加解密的加秘鑰(自己定義與vue保持一緻)
*/

function secret($data,$code, $operation = false)
    {
        if ($operation){
            //解密
            if (empty($data)) return false;
            $data = openssl_decrypt(base64_decode($data), 'AES-128-ECB', $code, OPENSSL_RAW_DATA);
            $data = json_decode($data, true);
            return $data;
        }else{
            //加密
            if (is_array($data)) {  //如果傳過來的是數組,轉為json格式
                $data = json_encode($data);
            }
            $data = base64_encode(@openssl_encrypt($data, 'AES-128-ECB', $code, OPENSSL_RAW_DATA));
            return $data;
        }
    }
           

VUE寫法

import CryptoJS from 'crypto-js'  //引入安裝
export default {
    // 加密函數   string要加解密的字元串   code加解密的秘鑰字元串(自己定義保持與PHP端一緻)  operation為true的時候代表解密
    secret(string, code ,operation) {
        var key  = CryptoJS.enc.Utf8.parse(code);
        if (operation){
            // 解密
            let res =  CryptoJS.AES.decrypt(string, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8);
            return JSON.parse(res);
        }else{
            string = JSON.stringify(string);
            // 加密
            return CryptoJS.AES.encrypt(string,key, { mode:CryptoJS.mode.ECB, padding:CryptoJS.pad.Pkcs7 }).toString();
        }
    }

}