在进行项目中的的借口设定的时候,往往都需要对接口采用一定的加密方式。本文中将介绍一下crypto-js.js的加密方式。而crypto-js.js就是一个前端加密库,你可以把它当做一个前端插件来引用即可。详细介绍:点击打开链接
本项目中使用express开发,前后台均使用crypto-js.js来进行加密解密处理。对于才开始的时候,我想使用的是前台的crypto-js来进行数据加密,后台使用nodejs的crypto对应的模块来进行解密。但是在后台(nodejs)的加解密时候,使用了Buffer的矢量,这在前台貌似是实现不出来的,也有可能是我孤陋了,反正我是没有搞出来,在后来我仔细看了下crypto-js的源码,发现在nodejs的后端不需要使用crypto.js 的模块来对应的解析前台传过来的加密内容,可以直接将crypto-js的模块引入到后端的项目中,然后再使用同样的解密方式来解密出来即可。让我恍然大悟的就是crypto-js源码的这一段。
(function (root, factory) {
if (typeof exports === "object") {
// CommonJS
module.exports = exports = factory();
}
else if (typeof define === "function" && define.amd) {
// AMD
define([], factory);
}
else {
// Global (browser)
root.CryptoJS = factory();
}
}
下面给大家演示个demo吧,其实说是demo感觉还是有一定的抄袭成分,哈哈。
前端Js加密:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="js/crypto-js.js" ></script>
</head>
<body>
<script type="text/javascript">
function getAesString(data, key, iv) { //加密
var key = CryptoJS.enc.Utf8.parse(key);
var iv = CryptoJS.enc.Utf8.parse(iv);
var encrypted = CryptoJS.AES.encrypt(data, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString(); //返回的是base64格式的密文
}
function getAES(data) { //加密
var key = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'; //密钥
var iv = '1234567812345678';
var encrypted = getAesString(data, key, iv); //密文
var encrypted1 = CryptoJS.enc.Utf8.parse(encrypted);
return encrypted;
}
document.write("加密内容:"+getAES("123"));
</script>
</body>
</html>
后端nodejs解密:
var CryptoJS = require("./crypto-js");
function getDAesString(encrypted, key, iv) { //解密
var key = CryptoJS.enc.Utf8.parse(key);
var iv = CryptoJS.enc.Utf8.parse(iv);
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}
function getDAes(data) { //解密
var key = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'; //密钥
var iv = '1234567812345678';
var decryptedStr = getDAesString(data, key, iv);
return decryptedStr;
}
console.log(getDAes("44PsEnkgY329oB8GtwQuGA=="));
其实我是为了方便大家对于前后端分离加解密这样做的,上面的后端代码是可以放在前台的html中的。