zoukankan      html  css  js  c++  java
  • 基于PHP和JS的AES相互加密解密方法详解(CryptoJS)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="keywords" content="基于PHP和JS的AES相互加密解密方法详解,AES加密解密">
        <meta name="description" content="基于PHP和JS的AES相互加密解密方法详解,AES加密解密,PHP开发">
        <meta name="author" content="wrongcode">
        <meta name="version" content="1.0.0">
        <title>基于PHP和JS的AES相互加密解密方法详解(CryptoJS)</title>
        <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js"></script>
        <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/aes.min.js"></script>
        <script src="https://cdn.bootcss.com/zepto/1.1.5/zepto.min.js"></script>
    </head>
    <body>
    <div style="margin: 0;text-align:center;">
        <h2>基于PHP和JS的AES相互加密解密方法详解(CryptoJS)</h2>
        <a href="https://blog.csdn.net/Zhihua_W/article/details/79388297" target="_blank"><h5>(原文地址)</h5></a>
    </div>
    <div style="margin:0 18%;">
        <h4>注意说明:</h4>
        <ul>
            <li>1. 首先引入CryptoJS包中的aes.js和pad-zeropadding.js</li>
            <li>2. 其次引入了jquery.min.js和自己封装的function.js(内容主要是加密解密函数)</li>
            <li>3. 加密解密过程中的向量和密钥必须保持一致</li>
            <li>4. 进行加密的数据(字符串类型):{"username":"1001","password":"123456"}</li>
            <li>5. 加密结果是变化的在这不写(变化的原因是因为密钥取得是当前时间)</li>
            <li>6. 具体详情可读代码(注释完整)</li>
        </ul>
    </div>
     
    <div style="margin:0 18%;">
        <h4>加密测试:</h4>
        <ul>
            <li>进行加密的数据(字符串类型):{"username":"1001","password":"123456"}</li>
            <li id="encrypt_key"></li>
            <li id="encrypt_string"></li>
        </ul>
    </div>
    <div style="margin:0 18%;">
        <h4>解密测试:</h4>
        <ul>
            <li>进行解密密的数据(字符串类型、PHP端生成):sOSLA1pWIVbwiQFkf0pcCut292sd/s55mb9NWMoZ4uJ7+7fWIChAfijY0LxDShb7</li>
            <li id="decrypt_key">解密的密钥(PHP端生成):</li>
            <li id="decrypt_string">JS解密后字符串:</li>
        </ul>
    </div>
    
    <script type="text/javascript">   
    
    /**
     * 接口数据加密函数
     * @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);
    }
    </script>
    
    <script>
        //********************************加密**********************************
        //获取当前时间戳13位 + 3位字符
        var timestamp = new Date().getTime().toString() + "WZH";
        //加密密钥16位
        var encrypt_key = timestamp;
        //加密向量16位
        var iv = 'ZZWBKJ_ZHIHUAWEI';
        //要加密的数据
        var encrypt_string = '{"username":"1001","password":"123456"}';
        //加密后密文(加密函数在function.js文件中)
        var encrypted_string = encrypt(encrypt_string, encrypt_key, iv);
        $("#encrypt_key").text("【JS加密密钥】:" + encrypt_key);
        $("#encrypt_string").text("【JS加密后字符串】:" + encrypted_string);
        //********************************结束**********************************
        
        //********************************解密**********************************
        //解密密钥16位(解密向量同上)
        var decrypt_key = '1565000236007WZH';
        //解密密文字符串
        var decrypt_string = "sOSLA1pWIVbwiQFkf0pcCut292sd/s55mb9NWMoZ4uJ7+7fWIChAfijY0LxDShb7";
        var decrypted_string = decrypt(decrypt_string, decrypt_key, iv);
        $("#decrypt_key").text("【解密的密钥(PHP端生成)】:" + decrypt_key);
        $("#decrypt_string").text("【JS解密后字符串】:" + decrypted_string);
        //********************************结束**********************************
    </script>
    </body>
  • 相关阅读:
    js学习笔记之(call、apply)
    windows8 应用的激活与挂起
    SharePoint2010分享
    Windows8 Metro 设计与开发vs11风格样式
    windows8 应用激活
    Windows8 Metro 设计与开发平台预览
    windows8 账户图片设置
    Windows8 Metro 设计与开发必须关注的新特性
    Windows8 Metro 设计与开发你不知道的C模型
    Windows8 Metro 设计与开发VS11的win8模拟器
  • 原文地址:https://www.cnblogs.com/wrongcode/p/11577609.html
Copyright © 2011-2022 走看看