首页 > 编程语言 >PHP与JS互相加密解密方法2.0【转载】

PHP与JS互相加密解密方法2.0【转载】

时间:2022-08-15 12:24:48浏览次数:84  
标签:PHP 加密 string 16 JS iv key CryptoJS 2.0

本文转自:https://blog.csdn.net/qq_32845825/article/details/123705487
前言:
之前写过一个加密解密1.0版本的,但是随着PHP版本升级,那个不能用了,当初使用的是PHP5中的mcrypt_decrypt和mcrypt_encrypt方法,在PHP7中已经废弃了。当前进行替代的是openssl的openssl_encrypt和openssl_decrypt。

解决方法:
php代码部分

<?php
 
/**
 * 加密字符串
 * @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代码部分

/**
 * 接口数据加密函数
 * @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;
}

标签:PHP,加密,string,16,JS,iv,key,CryptoJS,2.0
From: https://www.cnblogs.com/aixiu/p/16587835.html

相关文章

  • JSP的概述以及JSP的指令
    JSP的概述1、作用:用于配置JSP页面,导入资源文件2、格式:<%@指令名称属性名1=属性值1属性名2=属性值2......%>3、分类1、page:配置JS......
  • 解决fastJson反序列化问题 com.alibaba.fastjson.JSONObject cannot be cast to 的问
    问题描述:个简单的查询逻辑即查询前先从redis取,取到后则进行反序列化。StringresJson=redisService.getString(name);if(StringUtil.isNotEmpty(resJson)){//......
  • JS学习-Web Workers API接口
    WebWorkersAPI接口通过使用WebWorkers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线......
  • vscode配置setting.json
    配置setting.json{  "editor.largeFileOptimizations":false,  "editor.fontSize":15,  "bracketPairColorizer.depreciation-notice":false,  "f......
  • JSP概念和JSP原理
    JSP入门学习概念:JavaServerPages:Java服务器端页面可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码用于简化书写<html><head>......
  • 技术分享 | 接口自动化测试之JSON Schema模式该如何使用?
    原文链接JSONSchema模式是一个词汇表,可用于注释和验证JSON文档。在实际工作中,对接口返回值进行断言校验,除了常用字段的断言检测以外,还要对其他字段的类型进行检测。对......
  • JsonConfig配置Clob
    1.情景展示  项目使用的是Oracle数据库,并且表中的某些字段类型设置成了clob类型;  当我们从数据库读取数据的时候,需要单独对clob字段进行处理,否则返回的是内存地址......
  • 使用JS正则获取字符串中全部的特定匹配项(分组)
     。。 示例:conststr='bedab1cvhuab2ikmab3ng';constreg=/ab(\d+)/g;constans=[];letmatched=null;while((matched=reg.exec(str))!==null){......
  • ExtJS - UI组件 - Buttion
    更新记录转载请注明出处:https://www.cnblogs.com/cqpanda/p/16587153.html2022年8月15日发布。2022年8月13日从笔记迁移到博客。ExtJS教程汇总:https://www.cnblog......
  • ExtJS - Sencha Fiddle
    更新记录转载请注明出处:https://www.cnblogs.com/cqpanda/p/16587154.html2022年8月15日发布。2022年8月13日从笔记迁移到博客。ExtJS教程汇总:https://www.cnblog......