Crypto加密解密
crypto 模块提供了加密功能,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。我们这里讲crypto AES算法加密
一、使用步骤
1.引入Crypto
1.1 使用Crypto,有两种形式。一种是是在script便签直接引入,例如:
<script src="lib/CryptoJS v3.1.2/rollups/aes.js"></script>
1.2 还有一种通过npm安装CryptoJS,例如:
npm install crypto-js
1.2.1 如果是通过npm安装,需要引入,代码如下:
import CryptoJS from 'crypto-js/crypto-js'
2.开始编写逻辑代码
安装完成后,你根据自己的需求对需要加密的数据进行加密。
二、如何加密
第一种,先上代码:
//aes加密
encrypt (word) {
const key = CryptoJS.enc.Utf8.parse(""); // 加密秘钥 16位
const iv = CryptoJS.enc.Utf8.parse(""); // 加密矢量
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();
}
},
代码讲解:
这里的数据可以用两种数据格式,一种是字符串,一种是对象。然后我们对数据进行处理然后再根据自己定义的秘钥和矢量调用aes算法进行加密。
第二种,先上代码:
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;
}
代码讲解:
首先我们将数据进行排序,然后将排序好的数据进行MD5加密作为接口的签名,接着将排好序的数据和接口签名拼接上进行AES加密,倒数第二步,将AES加密后的密文进行base64加密,最后将最终的密文encodeURIComponent。
三、如何解密
1.后台返回的数据也是密文
2.后台返回的数据是json格式
代码如下:
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
});
// 第一种
let resData=decryptResult.toString(CryptoJS.enc.Utf8).toString();
return JSON.parse(resData);
// 第二种
return CryptoJS.enc.Utf8.stringify(decryptResult)
}
Crypto加密解密的更多相关文章
- python Crypto 加密解密
本片文字记录使用python 的Crypto 工具对图片或者文本进行加密解密的方法: import numpy as np from PIL import Image from base64 impo ...
- Crypto 加密解密
import binascii from Crypto.Cipher import AES #秘钥,此处需要将字符串转为字节 from utils import config from utils.e ...
- crypto AES 加密 解密
1.aes加密解密说明 https://juejin.im/entry/59eea48e6fb9a0451968c25f aes是对称加密算法 md5是摘要算法,不算是加密,主要用来对信息一致性和完整 ...
- php使用openssl进行Rsa长数据加密(117)解密(128) 和 DES 加密解密
PHP使用openssl进行Rsa加密,如果要加密的明文太长则会出错,解决方法:加密的时候117个字符加密一次,然后把所有的密文拼接成一个密文:解密的时候需要128个字符解密一下,然后拼接成数据. 加 ...
- java aes_cbc_256 加密解密
在之前我们在openssl上和ios上分别测试了 AES256位cbc模式的加密和解密 今天用java提供的api来测试一下:进而确定一下在PC,iOS,安卓上三个平台下的加密解密数据: 1. 首先通 ...
- openssl evp RSA 加密解密
openssl evp RSA 加密解密 可以直接使用RSA.h 提供的接口 如下测试使用EVP提供的RSA接口 1. EVP提供的RSA 加密解密 主要接口: int EVP_PKEY_encryp ...
- .NET/android/java/iOS AES通用加密解密(修正安卓)
移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...
- C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...
- des加密解密——java加密,php解密
最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混 ...
随机推荐
- linuix没有网络
今天在虚拟机安装玩Centos7以后,update报了一个错 有两个方法可以解决 方法一. 1.打开 vi /etc/sysconfig/network-scripts/ifcfg-ens33(每个机 ...
- spring boot 页面根路径获取和jsp获取的不同之处(粘贴即用)
不同之处已做高亮. jsp 写法: <script type="text/javascript" src="${pageContext.request.contex ...
- Spring Boot 整合 elk
一.elk 简介 Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstas ...
- ejs常用语法
nodejs的模板引擎有很多, ejs是比较简单和容易上手的.常用的一些语法: 用<%...%>包含js代码 用<%=...%>输出变量 变量若包含 '<' '>' ...
- mixins混入
mixins混入:定义类,多重继承 使用方法见附件: mixins混入.zip
- csharp: LocalDataCache.sync
app.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...
- SSM登陆拦截器实现
首先在springmvc中配置拦截器 <!-- 配置拦截器 --> <mvc:interceptors> <mvc:interceptor> <!-- 拦截所 ...
- BIM与GIS
BIM行业是建筑与IT结合而形成的一个新兴行业,既然能说是行业,说明它包含的内容非常丰富,懂一点和完全懂是两码事,就好像一滴水和一片大海的范围一样.现在国内有很多高校开设了BIM专业,并对口招收了学生 ...
- C# MessageBox自动关闭
本文以一个简单的小例子,介绍如何让MessageBox弹出的对话框,在几秒钟内自动关闭.特别是一些第三方插件(如:dll)弹出的对话框,最为适用.本文仅供学习分享使用,如有不足之处,还请指正. 概述 ...
- Android 为TV端助力
记录两次事情: 第一个给view添加动画效果,需要保证view是可以获取焦点的 第二个给listview,GridView设置选择器 listselector时,要保证他的子item无背景,否则选择器 ...