【前端数据加密后端解密】crypto-js aes 加解密和 node-rsa 非对称加密和解密对比使用


前言(小剧场)

自从盘古开天辟地以来,前后端分崩离析。后端专心研究功能,前端专心研究逻辑。可是【天下大势】、分久必合、合久必分。前端不止于前端,后端也不止于后端。【行业内卷互相渗透】创造出了【全栈】这个【资本名词】。当然你我也不能例外,但我不一样,我不想学什么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版权协议,转载请附上原文出处链接和本声明。