crypto 模块提供了加密功能,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。我们这里讲crypto AES算法加密

一、使用步骤

1.引入Crypto

1.1   使用Crypto,有两种形式。一种是是在script便签直接引入,例如:

  1.  
  2. <script src="lib/CryptoJS v3.1.2/rollups/aes.js"></script>

1.2  还有一种通过npm安装CryptoJS,例如:

  1.  
  2. npm install crypto-js

1.2.1  如果是通过npm安装,需要引入,代码如下:

  1.  
  2. import CryptoJS from 'crypto-js/crypto-js'

2.开始编写逻辑代码

安装完成后,你根据自己的需求对需要加密的数据进行加密。

二、如何加密

第一种,先上代码:

  1.  
  2.  
  3. //aes加密 encrypt (word) { const key = CryptoJS.enc.Utf8.parse("1234567890000000"); // 加密秘钥 16位 const iv = CryptoJS.enc.Utf8.parse("1234567890000000"); // 加密矢量 let encrypted = ''; if (typeof(word) == 'string') { let srcs = CryptoJS.enc.Utf8.parse(word); encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); } else if (typeof(word) == 'object') { //对象格式的转成json字符串 data = JSON.stringify(word); let srcs = CryptoJS.enc.Utf8.parse(data); encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) } return encrypted.ciphertext.toString(); } },
  4.  
  5.  

代码讲解:

这里的数据可以用两种数据格式,一种是字符串,一种是对象。然后我们对数据进行处理然后再根据自己定义的秘钥和矢量调用aes算法进行加密。

第二种,先上代码:

  1.  
  2.  
  3. encryption (data) { let strs=[]; for(let i in data){ strs.push(i+'='+data[i]); } strs.sort(); // 数组排序 strs=strs.join('&'); // 数组变字符串 let endData=strs+'&sign='+CryptoJS.MD5(strs+'ADfj3kcadc2349akvm1CPFFCD84f') .toString(); // MD5加密 let key = CryptoJS.enc.Utf8.parse("0880076B18D7EE81"); // 加密秘钥 let iv = CryptoJS.enc.Utf8.parse("CB3EC842D7C69578"); // 矢量 let encryptResult = CryptoJS.AES.encrypt(endData,key, { // AES加密 iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 // 后台用的是pad.Pkcs5,前台对应为Pkcs7 }); return encodeURIComponent(CryptoJS.enc.Base64.stringify(encryptResult.ciphertext)); // Base64加密再 encode; }
  4.  
  5.  

代码讲解:

首先我们将数据进行排序,然后将排序好的数据进行MD5加密作为接口的签名,接着将排好序的数据和接口签名拼接上进行AES加密,倒数第二步,将AES加密后的密文进行base64加密,最后将最终的密文encodeURIComponent。

三、如何解密

1.后台返回的数据也是密文

2.后台返回的数据是json格式

代码如下:

  1.  
  2.  
  3. decryption(data) { let key = CryptoJS.enc.Utf8.parse("0880076B18D7EE81"); // 加密秘钥 let iv = CryptoJS.enc.Utf8.parse("CB3EC842D7C69578"); // 矢量 let baseResult=CryptoJS.enc.Base64.parse(data); // Base64解密 let ciphertext=CryptoJS.enc.Base64.stringify(baseResult); // Base64解密 let decryptResult = CryptoJS.AES.decrypt(ciphertext,key, { // AES解密 iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
  4.   // 第一种
  5. let resData=decryptResult.toString(CryptoJS.enc.Utf8).toString();
  6. return JSON.parse(resData);
  7. // 第二种
  8.   return CryptoJS.enc.Utf8.stringify(decryptResult)
  9. }

crypto 的使用方法和说明的更多相关文章

  1. 记一次在node.js中使用crypto的createCipheriv方法进行加密时所遇到的坑

    Node.js的crypto模块提供了一组包括对OpenSSL的哈希.HMAC.加密.解密.签名,以及验证等一整套功能的封装.具体的使用方法可以参考这篇文章中的描述:node.js_crypto模块. ...

  2. Node.js 内置模块crypto使用事件方法(onreadable)加密的一些问题

    javaScript代码如下: 'use strict'; const crypto = require('crypto'); //实例化一个AES加密对象 const aesEncrept = cr ...

  3. ImportError: No module named Crypto.Cipher

    from Crypto.Cipher import AES 报错: ImportError: No module named Crypto.Cipher 解决方法: pip install pycry ...

  4. Node.js 内置模块crypto加密模块(3) HMAC

    HMAC:哈希消息认证码 ( Hash-based Message Authentication Code ) HMAC是密钥相关的哈希算法 使用 HMAC 进行加密的Node实现的一种方法: &qu ...

  5. 60.浅谈nodejs中的Crypto模块

    转自:https://www.cnblogs.com/c-and-unity/articles/4552059.html node.js的crypto在0.8版本并没有改版多少,这个模块的主要功能是加 ...

  6. python RSA加密、解密、签名

    python RSA加密.解密.签名 python中用于RSA加解密的库有好久个,本文主要讲解rsa.M2Crypto.Crypto这三个库对于RSA加密.解密.签名.验签的知识点. 知识基础 加密是 ...

  7. Shiro RememberMe 1.2.4远程代码执行漏洞-详细分析

    本文首发于先知: https://xz.aliyun.com/t/6493 0x01.漏洞复现 环境配置 https://github.com/Medicean/VulApps/tree/master ...

  8. Pyhton AES_cbc解密

    最近很多朋友问我加密解密有没有啥好推荐的方式,一般对AES的加密解密方式直接用在线加密或者解密就行,我为了方便测试,将网址以python脚本的形式写了出来,很简单的东西,2分钟搞定,随手记录一下~~ ...

  9. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

随机推荐

  1. ABAP-复制采购订单行项目到新的行

    FUNCTION zmm_fm_copy2new. *"------------------------------------------------------------------- ...

  2. ABAP 金额转换成大写

     FUNCTION zzfi_change_amount.*"---------------------------------------------------------------- ...

  3. 帝国CMS(EmpireCMS) v7.5后台任意代码执行

    帝国CMS(EmpireCMS) v7.5后台任意代码执行 一.漏洞描述 EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行. 二 ...

  4. java120经典面试题

    经典面试题 -----version 1.0 题注:以下答案仅限本人个人见解,若有错误和建议请多多指教.QQ:1807812486 题目来源 1.什么是Java虚拟机?为什么Java被称作是" ...

  5. (18)ASP.NET Core 基于现有数据库创建EF模型(反向工程)

    1.简介 Entity Framework Core可通过数据库提供给应用程序的插件访问许多不同的数据库.我们可以通过使用Entity Framework Core构建执行基本数据访问的ASP.NET ...

  6. zookeeper和dubbo安装与搭建

    Zookeeper+Dubbo安装与搭建 (原创:黑小子-余) 本文有借鉴:https://www.cnblogs.com/UncleYong/p/10737119.html (一)zookeeper ...

  7. Liunx学习总结(六)--进程

    进程概述 简单来讲程序是一个包含可以执行代码的静态的文件.进程是一个开始执行但是还没有结束的程序的实例.当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作 ...

  8. nanopi NEO2 学习笔记 3:python 安装 RPi.GPIO

    如果我要用python控制NEO2的各种引脚,i2c 或 spi ,RPi.GPIO模块是个非常好的选择 这个第三方模块是来自树莓派的,好像友善之臂的工程师稍作修改移植到了NEO2上,就放在 /roo ...

  9. 使用VS Code 开发.NET CORE 程序指南

    1. 前言 近两年来,很多前端的同学都开始将 VSCode 作为前端主力开发工具,其丰富的扩展给程序开发尤其是前端开发带来了很多便利,但是作为微软主力语言的 .NET,却由于有宇宙第一编辑器 Visu ...

  10. POJ 1236 Network of Schools - 缩点

    POJ 1236 :http://poj.org/problem?id=1236 参考:https://www.cnblogs.com/TnT2333333/p/6875680.html 题意: 有好 ...