侧边栏壁纸
博主昵称
梦之中小俊

以前高中时,羡慕大学考试只要及格就行;现在大学了,怀念高中考试及不及格都行??

PHP

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

梦之中小俊
2021-08-02 / 0 评论 / 578 阅读 / 推送成功!
在最近的项目中,前端后台数据交互需要进行加密之后传输使用,以保证系统数据的安全。有关数据加密解密的问题,有很多种加密的方式,在这里我选择了AES的加密方式。特此写下此篇博文,总结讲述下PHP和JS进行相互AES加密解密的方法。

关于源代码点击地址进行下载:http://download.csdn.net/download/zhihua_w/10261363



 



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


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

注意说明:

  • 1. 首先引入CryptoJS包中的aes.js和pad-zeropadding.js
  • 2. 其次引入了jquery.min.js和自己封装的function.js(内容主要是加密解密函数)
  • 3. 加密解密过程中的向量和密钥必须保持一致
  • 4. 进行加密的数据(字符串类型):{"username":"1001","password":"123456","terminal":"PC"}
  • 5. 加密结果是变化的在这不写(变化的原因是因为密钥取得是当前时间)
  • 6. 具体详情可读代码(注释完整)

加密测试:

  • 进行加密的数据(字符串类型):{"username":"1001","password":"123456","terminal":"PC"}

解密测试:

  • 进行解密密的数据(字符串类型、PHP端生成):8bkd/doBOrG3+pTEGkRwk9A3ZLrzXtf10E6Nn9CSoHXRXHydM7xt7PllPhUSItuK8ciF5g6UZ7DruCPQCVNZIJzI4ZHyUMJlV2aHyqMhbEoyS3pK6lPs1MsOeU/H7BZ5
  • 解密的密钥(PHP端生成):
  • JS解密后字符串:

 

JS(funciton.js)代码

/**
 * ===============================================
 * Author: ZHIHUA·WEI <968959@qq.com.com>
 * Project: 基于PHP和JS的AES相互加密解密方法详解(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.ZeroPadding
    });
    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,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}

 

PHP(index.php)代码

 '1001', 'password' => '123456', 'terminal' => 'PC');
//转换成json字符串
$encrypt_data = json_encode($arr);
$encrypted = encrypt($encrypt_data, $encrypt_key, $iv);
//加密结果
var_dump($encrypted);
exit;
//********************************结束**********************************
 
//******************************集成函数********************************
/**
 * 加密字符串
 * @param string $data 字符串
 * @param string $key 加密key
 * @param string $iv 加密向量
 * @return string
 */
function encrypt($data, $key, $iv)
{
    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
    return base64_encode($encrypted);
}
 
/**
 * 解密字符串
 * @param string $data 字符串
 * @param string $key 加密key
 * @param string $iv 加密向量
 * @return object
 */
function decrypt($data, $key, $iv)
{
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($data), MCRYPT_MODE_CBC, $iv);
    $json_str = rtrim($decrypted, "\0");
    return json_decode($json_str);
}

前端demo






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


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

注意说明:

  • 1. 首先引入CryptoJS包中的aes.js和pad-zeropadding.js
  • 2. 其次引入了jquery.min.js和自己封装的function.js(内容主要是加密解密函数)
  • 3. 加密解密过程中的向量和密钥必须保持一致
  • 4. 进行加密的数据(字符串类型):{"username":"1001","password":"123456","terminal":"PC"}
  • 5. 加密结果是变化的在这不写(变化的原因是因为密钥取得是当前时间)
  • 6. 具体详情可读代码(注释完整)

加密测试:

  • 进行加密的数据(字符串类型):{"username":"1001","password":"123456","terminal":"PC"}

解密测试:

  • 进行解密密的数据(字符串类型、PHP端生成):8bkd/doBOrG3+pTEGkRwk9A3ZLrzXtf10E6Nn9CSoHXRXHydM7xt7PllPhUSItuK8ciF5g6UZ7DruCPQCVNZIJzI4ZHyUMJlV2aHyqMhbEoyS3pK6lPs1MsOeU/H7BZ5
  • 解密的密钥(PHP端生成):
  • JS解密后字符串:
//第一步,引入



本文共 个字数,平均阅读时长 ≈ 分钟,您已阅读:0时0分0秒。
3

打赏

评论 (0)

OωO
  • ::(呵呵)
  • ::(哈哈)
  • ::(吐舌)
  • ::(太开心)
  • ::(笑眼)
  • ::(花心)
  • ::(小乖)
  • ::(乖)
  • ::(捂嘴笑)
  • ::(滑稽)
  • ::(你懂的)
  • ::(不高兴)
  • ::(怒)
  • ::(汗)
  • ::(黑线)
  • ::(泪)
  • ::(真棒)
  • ::(喷)
  • ::(惊哭)
  • ::(阴险)
  • ::(鄙视)
  • ::(酷)
  • ::(啊)
  • ::(狂汗)
  • ::(what)
  • ::(疑问)
  • ::(酸爽)
  • ::(呀咩爹)
  • ::(委屈)
  • ::(惊讶)
  • ::(睡觉)
  • ::(笑尿)
  • ::(挖鼻)
  • ::(吐)
  • ::(犀利)
  • ::(小红脸)
  • ::(懒得理)
  • ::(勉强)
  • ::(爱心)
  • ::(心碎)
  • ::(玫瑰)
  • ::(礼物)
  • ::(彩虹)
  • ::(太阳)
  • ::(星星月亮)
  • ::(钱币)
  • ::(茶杯)
  • ::(蛋糕)
  • ::(大拇指)
  • ::(胜利)
  • ::(haha)
  • ::(OK)
  • ::(沙发)
  • ::(手纸)
  • ::(香蕉)
  • ::(便便)
  • ::(药丸)
  • ::(红领巾)
  • ::(蜡烛)
  • ::(音乐)
  • ::(灯泡)
  • ::(开心)
  • ::(钱)
  • ::(咦)
  • ::(呼)
  • ::(冷)
  • ::(生气)
  • ::(弱)
  • ::(狗头)
泡泡
阿鲁
颜文字
取消
  1. 头像
    6767 Lv.1
    iPhone · Safari
    沙发

    画图

    回复
  2. 头像
    6767 Lv.1
    Windows 10 · Google Chrome
    板凳

    表情

    回复
  3. 头像
    透露 Lv.2
    Android · QQ Browser
    第30楼

    649494848

    回复