【加解密】bcryptjs | CryptoJS | JSEncrypt | node-rsa 加密| 解密 | RSA | ASE | MD5

news/2025/1/11 14:28:06/

加解密


1、 bcryptjs 解密 - 只可加密,比对密码,不可解密

  • 下载
npm i bcryptjs 

  • 作用:字符串加密,已加密的字符串不可破解,只可比对。
  • 优点:加密的字符不可解密
  • 缺点:已加密的字符不可解密,盗不了密码
  • 用作领域:敏感信息加密,例如登录密码
  • npm地址:npm - https://www.npmjs.com/package/bcryptjs

src/utils/bcrypt.js

import bcryptjs from 'bcryptjs'//不可逆加密 bcryptjs /*** 不可逆加解密 ,一旦加密不可解密,只可比对* @param {String} txt 加、解密的文本* @param {String} hash 加密的哈希* @param {String} type default:jia, value:[jia 加密 ,bi 比对密码] 操作类型* @returns {[String|Boolear]} 返回值*/
const cyj = (txt, hash, type = 'jia') => {let res = null// 解密if (type === 'bi') {if (!txt || !hash) {throw '解密参数错误或缺少参数'}res = bcryptjs.compareSync(txt, hash)} else {if (!txt) {throw '加密请传入明文'}// 加密res = bcryptjs.hashSync(txt)}return res
}export default cyj

使用cyj加密

import cyj from './src/utils/bcrypt.js 'const pwd = '728637263我是隐私信息'//加密
const jia = cyj(pwd)console.log(jia)//$2a$10$BsXXaevfIG8Og7mKSF5qFu0vSugvJbYWyr3apz9BElCV254.SoIYe
console.log(cyj(pwd, jia, 'bi'))//true
console.log(cyj(pwd, '我是老6', 'bi'))//false

在这里插入图片描述

2、CryptoJS 加解密 - 单个key加密

  • 下载
npm i crypto-js

  • 作用:对字符加解密。
  • 优点:一个key可以加密与解密,就像锁钥匙,一把钥匙既可以开锁也可以解锁
  • 缺点:这个我不知道
  • npm地址:https://www.npmjs.com/package/crypto-js

CryptoJS .js

import CryptoJS from 'crypto-js'// aes加解密/*** AES加密 * @param {String} originText 原始文本* @param {String} key 密钥* @returns */
const encryptAES = (originText, key) => {if (originText) {const encrypt = CryptoJS.AES.encrypt(originText, key)return encrypt.toString()}return null
}/*** AES解密 * @param {String} ciphertext 加密文本* @param {String} key 密钥* @returns */
const decryptAES = (ciphertext, key) => {if (ciphertext) {const decrypted = CryptoJS.AES.decrypt(ciphertext, key).toString(CryptoJS.enc.Utf8)return decrypted}return null
}/*** 创建AES密钥* @param {Number}  num defalut:10 生成几位数的key* @returns {String} 返回密钥*/
const createAESKey = (num = 10) => {const library = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*+-./~=()[]{};:'?><,`";let key = ""for (var i = 0; i < num; i++) {let randomPoz = Math.floor(Math.random() * library.length);key += library.substring(randomPoz, randomPoz + 1);}return key
}export {decryptAES,encryptAES,createAESKey
}

使用CryptoJS

import {decryptAES,encryptAES,createAESKey
} from './CryptoJS.js'//获取key
const 钥匙 = createAESKey()
const 账号 = '我是老6'const 加密 = encryptAES(账号, 钥匙)
const 解密 = decryptAES(账号, 钥匙)console.log(加密)
console.log(解密)

3、 JSEncrypt | RSA加密 - 2把钥匙

注意:jsencrypt只能在前端使用,不能在后端使用

  • 下载
npm i jsencrypt

  • 作用:加密与解密,有2把钥匙,一把公钥,一把密钥,公钥负责加密,密钥负责解密。
  • 优点:后端有2把钥匙,一把公钥,一把密钥。把公钥发给前端,前端负责加密数据,后端拿着密钥负责解密数据,这样一来,只用拿着密钥的人知道明文是什么了。
  • 缺点:我不知道
  • npm地址:https://www.npmjs.com/package/jsencrypt

jsencrypt.js

import JSEncrypt from 'jsencrypt'  // 引入jsencrypt库  RSA 加、解密/*** RSA 加、解密* @param {String,default:'getkey',value:'encrypt 加密|decrypt 解密 | getkey 获取公私钥'} type 加解密类型 * @param {String} txt 加解密字符* @param {String} key 密钥* @returns {String} 返回加解密字符*/
const rsa = (type = 'getkey', txt, key) => {const jsencrypt = new JSEncrypt()let resData = null// 加密if (type === 'encrypt') {jsencrypt.setPublicKey(key)resData = jsencrypt.encrypt(txt)// 获取公私key} else if (type === 'getkey') {const prikey = jsencrypt.getPrivateKey()const pubkey = jsencrypt.getPublicKey()resData = {prikey,pubkey}// 解密} else {jsencrypt.setPrivateKey(key)resData = jsencrypt.decrypt(txt)}return resData
}export default rsa 

使用rsa加密

import rsa from '. jsencrypt.js'// 公、私钥
const { prikey, pubkey } = rsa()const 密码 = '我是老6'
const 加密 = rsa('encrypt', 密码, pubkey)
const 解密 = rsa('decrypt', 密码, prikey)console.log(加密)
console.log(解密)

4、node-rsa - 后端RSA解加密 (可搭配前端jsencrypt)

注意

  • node-rsa只能在后端使用
  • jsencrypt只能在前端使用

  • 安装
cnpm i node-rsa

node-rsa封装

  • 该封装仅后端node环境下可用,前端不可用。
  • 该封装可配合前端 jsencrypt一起使用,例如前端jsencrypt的加密数据,可用此封装解密等。

servers/rsa.js

import NodeRSA from "node-rsa"/*** 后端node获取公、私钥* keySize {Number} 生成私钥、密钥大小,与jsencrypt保持一致,默认1024* @returns {Object} { pubkey,prikey} pubkey 公钥 | prikey私钥*/const nodeGetKey = (keySize = 1024) => {const nodeKey = new NodeRSA({ b: keySize  })const pubkey = nodeKey.exportKey('public')const prikey = nodeKey.exportKey('private')return {pubkey,prikey}
}/*** 后端node加密* @param {String} txt 加密的文本* @param {String} pubkey 公钥* @returns {String} 返回加密的文本*/
const nodeEncrypt = (txt, pubkey) => {const nodeKey = new NodeRSA(pubkey)nodeKey.setOptions({ encryptionScheme: 'pkcs1' })// 因为jsencrypt自身使用的是pkcs1加密方案, nodejs需要修改成pkcs1。const encrypted = nodeKey.encrypt(txt, 'base64')return encrypted
}/*** 后端node解密* @param {String} hash 加密的文本* @param {String} prikey 私钥* @returns */
const nodeDecrypt = (hash, prikey) => {const nodeKey = new NodeRSA(prikey)nodeKey.setOptions({ encryptionScheme: 'pkcs1' }) // 因为jsencrypt自身使用的是pkcs1加密方案, nodejs需要修改成pkcs1。const decrypted = nodeKey.decrypt(hash, 'utf8')return decrypted}export {nodeDecrypt,nodeGetKey,nodeEncrypt
}

http://www.ppmy.cn/news/83667.html

相关文章

WebSocket全双工通信SpringBoot实现

【IT老齐238】十分钟上手WebSocket全双工通信协议_哔哩哔哩_bilibili【IT老齐238】十分钟上手WebSocket全双工通信协议, 视频播放量 8348、弹幕量 23、点赞数 318、投硬币枚数 157、收藏人数 257、转发人数 30, 视频作者 IT老齐, 作者简介 老齐的个人V: itlaoqi001 ~~欢迎前来交…

鳌图 AutoCapital:进化中的新型机构长什么样?

鳌图 AutoCapital 提供了一条新的产业投资思路。 数科星球原创 作者丨苑晶 编辑丨大兔 时代塑造个人&#xff0c;时代也会迭代出现新的投资机构。第一代投资人和投资机构&#xff0c;或是学成于美国或就职于投行&#xff1b;目前人民币基金越来越多出现了产业和投资双背景的…

详细介绍一下Go1.17 特性,优缺点以及需要改进的地方

Go1.17 是 Go 语言的一个重要版本,于2021年8月16日发布。这个版本包含了一些新的特性、改进和 bug 修复,下面对其进行详细介绍。 Go 编译器和工具链的速度得到了大幅度提升。在新版本中,新增的 SSA 后端可以使 Go 编译器的编译速度提升 20% 至 30%。并且在 Go 1.17 版本中,…

Android 12.0屏蔽掉SystemUI的某些通知提示音

1.概述 在12.0的系统开发中,在系统SystemUI中会发一些通知的声音,但是同时也会在开机的时候,会有一些通知的声音,特别是不想要的一些通知的声音, 这些对于产品还是有一些影响的,所以为了产品体验,就需要屏蔽掉一些开机的通知的声音 2.屏蔽某些通知的提示音的核心代码 …

uniapp沉浸式渐变状态栏

插件地址&#xff1a;沉浸式渐变状态栏 - DCloud 插件市场 标准用法 <v-headerview actionBarColor"#fac90f" titleColor"#ffffff" pageTitle这是标题 ><template v-slot:title><!--如需自定义标题&#xff0c;用这个slot自定义内容。否则…

【计算机网络】网络命令的使用

文章目录 一、实验目的二、实验工具三、实验要求四、实验过程01 ping 命令的使用应用1&#xff1a;验证本地计算机上是否正确安装了 TCP/IP 协议应用2&#xff1a;测试某个目的主机可达性应用3&#xff1a;键入 ping&#xff0c;查看 ping 的其他参数含义 02 netstat 命令的典型…

Ubuntu环境变量踩坑实录

用户级别的环境变量 .bash_profile.bash_login.bashrc 坑的原理&#xff1a; 1.当bash shell作为登录shell启动时&#xff08;比如用户登录系统时&#xff09;&#xff0c;首先会查找并执行/.bash_profile文件。如果这个文件不存在&#xff0c;那么它会尝试查找并执行/.bash_…

如何将文件制作成二维码

日常生活和工作中&#xff0c;为了让大家更方便的查阅文件&#xff0c;可将文件生成二维码&#xff0c;打印在通知书、会议要求&#xff0c;或是直接用“二维码”分享。通过草料二维码可以将多种类型的文件快速生成文件二维码&#xff0c;微信扫码查看即可查看和下载文件。 ● …