前言(小剧场)
自从盘古开天辟地以来,前后端分崩离析。后端专心研究功能,前端专心研究逻辑。可是【天下大势】、分久必合、合久必分。前端不止于前端,后端也不止于后端。【行业内卷互相渗透】创造出了【全栈】这个【资本名词】。当然你我也不能例外,但我不一样,我不想学什么java、go、python、和c系列。我就想用前端的知识干后端的的事,站着把钱挣了。苦苦寻找下我把目标放在了【unicloud云开发】。多的不说,其他的自行了解。在我写登录逻辑的时候想搞个简单加密,JS有自带的加密方法,但是没有安全性可言,而且JS也已经废除了,没办法只能写云函数加密了。然后就有了今天这篇记录文章。一、crypto-js aes 加解密
插张图缓缓。
const CryptoJS = require('crypto-js'); //npm有手就行
const key = CryptoJS.enc.Utf8.parse("1234123412ABCDEF"); //密钥
const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412'); //密钥偏移量
//注意啊!!!云函数调用每次生成的密钥对肯定不一样,不一样怎么解密啊,所以用点脑子上面的密钥对存起来!!!!!!!!!!
//加密 前端写在本地里 既然密钥存起来了是不是得再写个云函数获取密钥呢!!!
function Encrypt(word) {
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.ciphertext.toString().toUpperCase();
}
//解密 写在云函数里 既然密钥存起来了是不是得再写个云函数获取密钥呢!!!
function Decrypt(word) {
let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
return decryptedStr.toString();
}
export default {
Decrypt ,
Encrypt
}
留心注意密钥对泄露哦!!!!
二、node-rsa 非对称加密和解密
插张图缓缓。
var NodeRSA = require (' node-rsa ');
var key = new NodeRSA();
var key = new NodeRSA({ b :512 } );
var publicDer = key.exportKey('public');
var privateDer = key.exportKey('private');
console.log('公钥:',publicDer);
console.log('私钥:',privateDer);
//注意啊!!!云函数调用每次生成的密钥对肯定不一样,不一样怎么解密啊,所以用点脑子上面的密钥对存起来!!!
代码如下(示例):
//前端加密
var encrypt=new JSEncrypt();
encrypt.setPublicKey(publicDer);//publicDer别问我公钥哪里来,云函数存了请求来的呗
// 加密数据
var res = encrypt.encrypt('我那里贼大');
console.log(res); // base64
//云函数解密
const baseStr = 'hjDE我是加密过后的数据7l3';
const privateKey = new NodeRSA(privateDer);//privateDer别问我私钥哪里来,云函数存了请求来的呗
privateKey.setOptions({encryptionScheme: 'pkcs1'}); // 因为jsencrypt自身使用的是pkcs1加密方案,
//nodejs需要修改成pkcs1,这句话是抄的,我哪有那么nb啊
const decrypted = privateKey.decrypt(baseStr, 'utf8');
console.log(decrypted); //"我那里贼大"
总结
插张图缓缓。
提示:个人观点,不喜狂喷!!我用的第二种加密方式。
crypto-js aes 加解密和node-rsa 非对称加密和解密对比加密速度前者要快很多,加密效果无从得知。一定要注意密钥对泄露问题,不管你是前端加密还是啊后端加密。前端永远只有一个密钥,不能得到一对。
版权声明:本文为weixin_45018320原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。