基于PHP7和JS的AES相互加密解密方法详解2(CryptoJS)

PHP 专栏收录该内容
68 篇文章 0 订阅

综述

在18年的时候写了一篇《基于PHP和JS的AES相互加密解密方法详解(CryptoJS)》,上面详细描述了如何使用PHP和JS对数据进行相互的AES加密解密。

由于当初使用的是PHP5中的mcrypt_decryptmcrypt_encrypt方法,在PHP7中已经废弃了。故写本篇文章进行更新在PHP7中如何与JS进行相互的AES加密解密。

openssl加密解密

使用的是php5.*之前的mcrypt_decryptmcrypt_encrypt函数,这两个函数已经在php7.1后弃用了,进行替代的是openssl的openssl_encryptopenssl_decrypt;在使用这两个函数时切记一定要打开openssl扩展。

代码调整

具体的代码可去demo中进行下载“基于PHP和JS的AES相互加密解密方法详解(CryptoJS)_PHP_JS_AES源码”。下面进贴出所修改地方的代码文件。

php代码修改部分(index.php)


<?php
/**
 * ===============================================
 * Created by ZHIHUA·WEI.
 * Author: ZHIHUA·WEI <zhihua_wei@foxmail.com>
 * Date: 2020/01/09 17:40
 * Project: 基于PHP7和JS的AES相互加密解密方法详解2(CryptoJS)
 * Power: php code
 * ===============================================

// 仅对下述的两个集成加密解密方法函数代码进行了修改,下载后进行替换源码即可

//******************************集成函数********************************
/**
 * 加密字符串
 * @param string $data 字符串
 * @param string $key 加密key
 * @param string $iv 加密向量
 * @return string
 */
function encrypt($data, $key, $iv)
{
    $encrypted = openssl_encrypt($data, "AES-128-CBC", $key, true, $iv);
    return base64_encode($encrypted);
}

/**
 * 解密字符串
 * @param string $data 字符串
 * @param string $key 加密key
 * @param string $iv 加密向量
 * @return object
 */
function decrypt($data, $key, $iv)
{
    $decrypted = openssl_decrypt(base64_decode($data), 'AES-128-CBC', $key, true, $iv);
    $json_str = rtrim($decrypted, "\0");
    return json_decode($json_str);
}

JS部分代码(funciton.js)

/**
 * ===============================================
 * Created by ZHIHUA·WEI.
 * Author: ZHIHUA·WEI <zhihua_wei@foxmail.com>
 * Date: 2020/01/09 17:50
 * Project: 基于PHP7和JS的AES相互加密解密方法详解2(CryptoJS)
 * Power: Javascript common function
 * ===============================================
 */

/**
 * 接口数据加密函数
 * @param str string 需加密的json字符串
 * @param key string 加密key(16位)
 * @param iv string 加密向量(16位)
 * @return string 加密密文字符串
 */
function encrypt(str, key, iv) {
    //密钥16位
    var key = CryptoJS.enc.Utf8.parse(key);
    //加密向量16位
    var iv = CryptoJS.enc.Utf8.parse(iv);
    var encrypted = CryptoJS.AES.encrypt(str, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted;
}

/**
 * 接口数据解密函数
 * @param str string 已加密密文
 * @param key string 加密key(16位)
 * @param iv string 加密向量(16位)
 * @returns {*|string} 解密之后的json字符串
 */
function decrypt(str, key, iv) {
    //密钥16位
    var key = CryptoJS.enc.Utf8.parse(key);
    //加密向量16位
    var iv = CryptoJS.enc.Utf8.parse(iv);
    var decrypted = CryptoJS.AES.decrypt(str, key, {
        iv: iv,
        padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8);

    return decrypted;
}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值