JS加密模块【js-md5(AES) 、 crypto (AES)、 crypto-js()、jsencrypt(非对称加密、RSA)】

一、安装

npm install js-md5
npm install crypto
npm install crypto-js
npm install jsencrypt

二、使用

1、js-md5
js-md5准确来说不算是加密,应该说是将密文序列化了,可以通过下列的网站将md5加密后的字符直接解析出来,因此安全性很低
https://www.cmd5.com/

const md5 = require('js-md5');
function md5Encryption(pwd){return md5(pwd)
}
console.log(md5Encryption('abc123')); //e99a18c428cb38d5f260853678922e03

2、crypto
加入随机密钥后,安全性上比之MD5提高了很多,通过上面的解密网站已经解密不出来了

'use strict'
const crypto  = require('crypto');
// 加密
function encryption(message){// 初始化数据const key = crypto.randomBytes(32) //32位随机共享密钥const iv = crypto.randomBytes(16); //初始向量,16字节const algorithm = 'aes-256-gcm'; //加密算法和操作模式const text = String(message); //将需要加密的数据转成字符串//初始化加密算法const cipher = crypto.createCipheriv(algorithm,key,iv); //传入创建密钥所需参数let encrypted = cipher.update(text,'utf8','hex'); // 初始化加密密文encrypted += cipher.final('hex') //加密密文const tag = cipher.getAuthTag() //生成标签,用于验证密文的来源return [encrypted,tag,key,iv,algorithm] //返回加密密文和密文来源信息
}
// 解密
function decrypt(cipherTextList){const [encrypted,tag,key,iv,algorithm] = cipherTextList //导入解密内容和解密需要用到的密钥const decipher = crypto.createDecipheriv(algorithm,key,iv)decipher.setAuthTag(tag) //传入验证标签,验证密文来源,当验证标签不一致时代码报错let decrypted = decipher.update(encrypted,'hex','utf8');decrypted += decipher.final('utf8')return decrypted
}let ciphered = encryption(1234556344) //加密后返回密文数组
let cipher = decrypt(ciphered) //解密后返回解密密文
console.log(ciphered[0])  // 628e1b71ae1d27ef5e01
console.log(cipher); // 1234556344

3、crypto-js
通过自定义的密钥进行加解密,可以更灵活的加解密密文,但是因为密文的key在可以通过前端看到,所以加密的信息虽然通过解密网站无法解密,但是可以通过在前端得到的公共key进行解密

// crypto-js加密
const CryptoJS  = require('crypto-js');
function cryptoEncryption(aseKey,message){ //aseKey为密钥(必须为:8/16/32位),message为要加密的密文var encrypt = CryptoJS.AES.encrypt(message,CryptoJS.enc.Utf8.parse(aseKey),{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7}).toString();return encrypt
}
// crypto-js解密
function cryptoDecrypt(aseKey,message){var decrypt = CryptoJS.AES.decrypt(message, CryptoJS.enc.Utf8.parse(aseKey), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);return decrypt
}var aseKey = "12345678" //密钥一致才能进行解密
var encrpytText = "abc12345";
var decryptText = 'KLqoT18E3l+OoDFLwS8DsA=='
console.log(cryptoEncryption(aseKey,encrpytText)); //调用加密方法
console.log(cryptoDecrypt(aseKey,decryptText));//调用解密方法

4、非对称(RSA)加密:jsencrypt
非对称加密密钥生成网站:http://web.chacuo.net/netrsakeypair
关于该加密模块,出现在自己做的一个后台管理系统项目中,前端是vue,后端是Java。应用的场景是需要前端通过公钥对需要加密的密文进行加密,后端通过私钥对前端加密的密文进行解密。这样能比之前三个能极大的提高密文安全性。相关的使用方式可以参照下面 关于前端的其他加密解密好文中的第二个。
这里把关于前端方面简化后的代码贴在下方,可供参考,后端方面的参考下方链接的第二个博文

let encryptor = new JSEncrypt() // 新建JSEncrypt对象let publicKey = `公钥`  //设置公钥,可以从上面的非对称加密密钥生成网站中得到encryptor.setPublicKey(publicKey) // 将得到的公钥通过setPbulicKey方法设置到JSEncrypt对象中let rsaPassWord = encryptor.encrypt('加密密文') // 对需要加密的数据进行加密,rspPassWord就是加密密文

python RSA加密解密

文件中的pub.key和pri.key都是在网站http://web.chacuo.net/netrsakeypair 中生成的后保存在本地的,自己保存一下

安装第三方库

pip uninstall crypto pycryptodome  #安装的如果导入不成功卸载了
pip install pycryptodome     #再次安装

代码

import base64
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pksc1_v1_5
from Crypto.PublicKey import RSA
import osdir_path = os.path.dirname(__file__)def encrpt(msg):with open(dir_path+"\\pub.key", 'r', encoding='utf-8') as f:pub = f.read()  # 加密公钥public_key = '-----BEGIN PUBLIC KEY-----\n' + pub + '\n-----END PUBLIC KEY-----'rsakey = RSA.importKey(public_key)cipher = Cipher_pksc1_v1_5.new(rsakey)cipher_text = base64.b64encode(cipher.encrypt(msg.encode()))return cipher_text.decode()def decrypt(encrypt_msg):with open(dir_path+"\\pri.key", 'r', encoding='utf-8') as f:pri = f.read()  # 加密私钥private_key = '-----BEGIN PRIVATE KEY-----\n' + \pri + '\n-----END PRIVATE KEY-----'decodeStr = base64.b64decode(encrypt_msg)  # cipher_text是上面rsa加密的内容rsakey = RSA.importKey(private_key)prikey = Cipher_pksc1_v1_5.new(rsakey)encry_text = prikey.decrypt(decodeStr, b'rsa')return encry_text.decode('utf8')#前端经过加密的密文
ciphertext = "dOESS/7V8a1+RB5xweXnJCGr0SLQqf5H6tNQW/b78HDn9N6kEN2fzeEO4t3AqLkAlOzLXGtYKdONN8Hxs6lV7hPa2bHRJz5X4kzOqj/HsDqy9zd/1ZSoMxl7pi9B0dzhjThFqgydLSPvgAMyVQhvLjo/jOvtUJ6nPrd3pwmLCyJP9fP4vhC7KmJEJMzaOSbgQLFKksiR3Bv0O+mubcgTTSFKHMxgwcAQ+cPGtMNtnUMkCVruMZWUwQ23/0dm3KOWAALlumA59p+JMZNG4zThiXrIIkyGMZ62wmxfINEeTWBvI/7vq0kCOEPMf2RWpNnR+kxnZxKlp1ih7AIOvqAaLg=="# ciphertext = encrpt('admin*cc123') #测试密钥
# print('密文:', ciphertext)plaintext = decrypt(ciphertext)
print('明文:', plaintext)

关于前端的其他加密解密好文:

1、前端使用CryptoJS的几种加密方式
https://www.jianshu.com/p/7b5eb33512fd
2、非对称加密(vue项目)
https://blog.csdn.net/weixin_42423019/article/details/82468626

前后端加密解密 【JS加密模块(md5 、 crypto 、 crypto-js、jsencrypt) python RSA加密解密(pycryptodome )模块安装与使用】相关推荐

  1. python rsa加密解密_RSA加密解密(python版)

    RSA的算法涉及三个参数,n.e.d. 其中,n是两个大质数p.q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度. e1和d是一对相关的值,e可以任意取,但要求e与(p-1)*(q-1)互质: ...

  2. 使用Crypto++5.5.2完成RSA加解密,真正的把公钥放在字符串内,而不是放在文件内

    本文摘自 小楼一夜听春雨得博客: http://hi.baidu.com/magic475/blog/item/e8b82139020ae622b8998f96.html 使用Crypto++5.5. ...

  3. vue安装jsencrypt_vue使用JSEncrypt实现rsa加密及挂载方法

    挂载全局方法 使用jsencrypt进行rsa加密 原文链接:Js参数RSA加密传输,jsencrypt.js的使用 - CSDN博客* https://blog.csdn.net/p31201115 ...

  4. Crypto++库实现AES和RSA加密解密

    本文介绍使用Crypto++进行AES加密和RSA加密 Crypto++库在VS中配置方法 Crypto++库下载地址: https://www.cryptopp.com/, 目前已经更新到8.1版本 ...

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

    python中用于RSA加解密的库有好久个,本文主要讲解rsa.M2Crypto.Crypto这三个库对于RSA加密.解密.签名.验签的知识点. 知识基础 加密是为了保证传输内容隐私,签名是为了保证消 ...

  6. Python RSA加密与解密 公钥和私钥 读写pem文件

    非对称加密算法: 文件加密需要公开密钥(publickey)和私有密钥(privatekey). 接收方在发送消息前需要事先生成公钥和私钥,然后将公钥发送给发送方.发送放收到公钥后,将待发送数据用公钥 ...

  7. Python RSA 加密解密

    RSA算法是一种非对称加密算法,可以用于数据的加密和解密.在Python中,我们可以使用Crypto库来实现RSA加密和解密. 要在Python中使用Crypto库进行加密和解密操作,需要先安装Cry ...

  8. python rsa加密解密 字符串_python_rsa加密解密

    代码: #!/usr/bin/env python #encoding=utf-8 ''' 测试rsa加密解密 ''' from M2Crypto import RSA msg = 'aaaa-aaa ...

  9. python - RSA加密

    什么是RSA?这里粘贴一些定义. RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种"由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制. ...

最新文章

  1. [ZZ]如何在Web页面上直接打开、编辑、创建Office文档
  2. C运算符解析及优先级
  3. arcgis已试图对空几何执行该操作_ArcGIS中地理配准与空间校正的不同
  4. 我的世界linux开服权限不足,我的世界路由器开服怎么获得超级管理员权限
  5. Python分析热门话题“不生孩子的人后来都怎么了”,看看丁克家庭最后都怎么样了...
  6. java transient 应用场景_关于java:transient关键字的用途是什么以及何时使用它?...
  7. linux的acid属性,Linux_Linux下主要浏览器Acid3大测试(组图),最近浏览器大战愈演愈烈,而 - phpStudy...
  8. 51单片机简易智能温度检测系统
  9. AE-after Effects 笔记
  10. 从测试流程角度,对产品质量的一些总结思考
  11. 施德来:有赞电商小程序的实践
  12. Python加密与解密
  13. 情人节浪漫3D照片墙【附源码】
  14. 深度盘点:整理100个 Pandas 常用函数
  15. 【最全】ISTQB- FL模拟题(含答案)
  16. AutomationAnywhere(AA)实现读取Excel文件
  17. MATLAB之高斯消元法
  18. 笔记本固态硬盘选型(总线、接口、协议、SATA、PCIe、AHCI、NVMe、M.2、NGFF)
  19. 微策生物递交注册:转型推动业绩大幅增长,年复合增长率达170%
  20. 开发那点事(十五)微信小程序webView首次进入白屏优化方案

热门文章

  1. Megan 专栏 dopostback
  2. gdb 调试python 进程,包括core dump 调试
  3. 如何使用 Creator【摄像机组件】实现局部缩放的效果?
  4. chrome账户密码管理
  5. 2014年计算机初级应用考试是,2015年9月一级计算机基础及MSOffice应用真考试卷及答案(1)...
  6. htc g1usb驱动
  7. c语言 gb2312转utf8,嵌入式utf-8转码gb2312的c语言实现,附源码
  8. 2021年中国合成网吊索市场趋势报告、技术动态创新及2027年市场预测
  9. 微信小程序开发问题集锦
  10. Layui 的表格自适应列宽的方法