AES 加密解密 CryptoJS + php 方案

AES 加密解密 CryptoJS + php 方案

当前业务需求需要针对报文做简单加密。最终选择AES,php 端AES的实现大体就是mcrypt 或者 openssl。这里选择openssl,个人感觉openssl实现起来代码更加简洁一点。

直接上代码先
  • PHP 服务端
  • * AES加密 * @param array $data 待转换报文 * @param string $key 加密KEY * @param string $iv 偏移量 * @param string $method 方法,参考资料一 * @return string public static function opensslEncrypt( $data, $key, $iv = '', $method = 'AES-256-CBC' $plaintext = json_encode($data); $str = openssl_encrypt($plaintext, $method, $key, 0, $iv); $search = ['+', '/']; $replace = ['-', '_']; return str_replace($search, $replace, $str); * AES解密 * @param string $encrypt 待转换密文 * @param string $key 加密KEY * @param string $iv 偏移量 * @param string $method 方法,参考资料一 * @return array public static function opensslDecrypt( $encrypt, $key, $iv = '', $method = 'AES-256-CBC' $replace = ['+', '/']; $search = ['-', '_']; $str = openssl_decrypt(str_replace($search, $replace, $encrypt), $method, $key, OPENSSL_ZERO_PADDING, $iv); $plaintext = substr($str, 0, strrpos($str, "}") + 1); return json_decode($plaintext, true);

    感谢 symfony/webpack-encore-bundle 一如既往强大的symfony提供的 encore,直接使用webpack很方便集成Crypto-JS

    // 这里需要自行npm安装 crypto-js
    import CryptoJS from 'crypto-js'; 
    let key = '654mca0l38b489d9f306a5b8e105334b',
        iv = 'c5defg0045222c52';
     * @param string work 待加密报文
     * @return string
    export function encrypt (word) {
        let encrypt = CryptoJS.AES.encrypt(word,CryptoJS.enc.Utf8.parse(key),{
            iv:CryptoJS.enc.Utf8.parse(iv),
            mode:CryptoJS.mode.CBC,
            padding:CryptoJS.pad.Pkcs7
        return encrypt.toString();
     * @param string work 待解密报文
     * @return string
    export function decrypt (word) {
        let decrypted = CryptoJS.AES.decrypt(word,CryptoJS.enc.Utf8.parse(key),{
            iv:CryptoJS.enc.Utf8.parse(iv),
            mode:CryptoJS.mode.CBC,
            padding:CryptoJS.pad.Pkcs7
        return decrypted.toString(CryptoJS.enc.Utf8)