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

news2025/1/11 2:57:16

加解密


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.coloradmin.cn/o/567631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【TI毫米波雷达笔记】IWR6843AOPEVM开箱功能测试

【TI毫米波雷达笔记】IWR6843AOPEVM开箱功能测试 我用的是IWR6843AOPEVM-G 相关资源可以在ti官网下载 要用的软件是 TI官方上位机 mmWave_Demo_Visualizer 可以用网页版 也可以用软件包 建议先上网页版看看版本支不支持对应的板子 网页版&#xff1a; dev.ti.com/gallery/…

CMake之安装

目录 公共选项安装目标安装文件安装目录安装导出 公共选项 install有多个签名&#xff0c;这些签名公用的选项有以下&#xff1a; DESTINATION&#xff1a;指定文件要安装的目录&#xff0c;可以是相对路径或绝对路径。 相对路径&#xff1a;会使用 CMAKE_INSTALL_PREFIX 作为…

rttread-nano 使用记录:rt_kprintf函数格式化打印无法左对齐

rttread-nano 使用记录&#xff1a;rt_kprintf函数格式化打印无法左对齐 今天用rt_kprintf函数打印输出一个表格&#xff0c;为了表格好看每一列我都使用格式化参数-负号符号设置为了左对齐&#xff0c;但是发现无法打印&#xff0c;也无法打印浮点数&#xff0c;换成微库的pri…

通过注册表显示和隐藏“我的电脑”、“回收站”等图标

注册表路径&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel 其中{208D2C60-3AEA-1069-A2D7-08002B30309D}是我的电脑&#xff0c;值的类型为REG_DWORD&#xff0c;改为0后隐藏&#xff0c;1代表显示。 其…

Try ‘apt --fix-broken install’ with no packages解决办法

在Ubuntu中用apt-get安装软件&#xff0c;系统报出Unmet dependencies错误。 Unmet dependencies. Try ‘apt --fix-broken install’ with no packages (or specify a solution) 解决方案如下&#xff1a; sudo apt --fix-broken install sudo apt-get update sudo apt-get u…

建筑专业应届生零基础想学习数据分析,职业发展前景如何?能学会吗?

建筑应届生零基础想学习数据分析&#xff0c;职业发展前景如何&#xff1f;能学会吗&#xff1f; 当然是能学会的&#xff0c;但如果想要有发展前景&#xff0c;不仅是会数据分析而已&#xff0c;更需要实战能力&#xff0c;能够结合不同的业务进行分析&#xff0c;掌握各种常见…

openFast中的陆上风电机组5MW_Land_DLL_WTurb参数详解

文章目录 一、openFAST是什么&#xff1f;二、参数截图三、参数详解 一、openFAST是什么&#xff1f; openFAST是一种开放源代码的工具&#xff0c;为风能工程师提供了用于模拟和设计风力涡轮机的框架。它可以计算风力涡轮机在各种环境条件下的性能&#xff0c;并提供对风力涡…

HTML、CSS、 JavaScript介绍(二)

CSS 指层叠样式表 (Cascading Style Sheets)&#xff0c;CSS定义如何显示 HTML 元素。HTML 标签原本被设计为用于定义文档内容&#xff0c;样式表定义如何显示 HTML 元素&#xff0c;就像 HTML 中的字体标签和颜色属性所起的作用那样。样式通常保存在外部的 .css 文件中。我们只…

「GPT实战」GPT接入直播间实现虚拟人互动

摘要 ChatGPT和元宇宙都是当前数字化领域中非常热门的技术和应用。结合两者的优势和特点&#xff0c;可以探索出更多的应用场景和商业模式。例如&#xff0c;在元宇宙中使用ChatGPT进行自然语言交互&#xff0c;可以为用户提供更加智能化、个性化的服务和支持&#xff1b;在Ch…

清除浮动的方法

目录 清除浮动 2.1 清除浮动的方法 — ① 直接设置父元素高度 2.2 清除浮动的方法 — ② 额外标签法 2.3 清除浮动的方法 — ③ 单伪元素清除法 2.4 清除浮动的方法 — ④ 双伪元素清除法 2.5 清除浮动的方法 — ⑤ 给父元素设置overflow : hidden 清除浮动 ➢ 含义&#…

springboot+java大学生新生入学报到报道系统+jsp004

新生报到系统分为学院管理员&#xff0c;宿舍管理员&#xff0c;财务管理员&#xff0c;辅导员&#xff0c;学生五种登录身份 学院管理员界面登入后台后有个人信息的展示&#xff0c;可对余下的四种身份信息进行增删改查&#xff0c;可进行对高考信息的导入导出&#xff0c;对报…

藏经阁(八)LCD控制器 ILI9341 解析

文章目录 TFT屏幕介绍LCD控制器ILI9341控制器内部框图ILI9341时序详解RGB565数据格式 TFT屏幕介绍 LCD(Liquid CrystalDisplay)的全称是液晶显示器&#xff0c;是现在用的比较多的手机屏幕材料&#xff0c;特点是价格便宜&#xff0c;使用普及广泛&#xff0c;在显示的时候需要…

Spring Boot 中如何使用 Spring Cloud Alibaba 实现微服务治理

Spring Boot 中如何使用 Spring Cloud Alibaba 实现微服务治理 在现代化的微服务架构中&#xff0c;服务的数量和复杂度越来越高&#xff0c;如何有效地管理这些服务变得越来越重要。Spring Cloud Alibaba 提供了一套完整的微服务治理解决方案&#xff0c;包括服务注册与发现、…

自动化托盘四向穿梭车密集库|HEGERLS托盘四向穿梭车系统具有哪些核心技术?

随着国内外物流行业需求的快速上升&#xff0c;托盘四向穿梭式立体库因其在流通仓储体系中所具有的高效密集存储功能优势、运作成本优势与系统化智能化管理优势&#xff0c;已发展为仓储物流的主流形式之一。河北沃克HEGERLS根据客户需求精准发力&#xff0c;推出了工业级的高品…

煤矿电子封条系统 yolov7

煤矿电子封条系统通过yolov7网络模型算法&#xff0c;煤矿电子封条系统可以实现对煤矿井下人员的出入管理&#xff0c;提高对煤矿井下人员的监管效果。YOLOv7 的策略是使用组卷积来扩展计算块的通道和基数。研究者将对计算层的所有计算块应用相同的组参数和通道乘数。然后&…

chatgpt赋能python:PythonSearch:剖析目前最常用的搜索引擎

Python Search: 剖析目前最常用的搜索引擎 搜索引擎在我们日常生活中扮演着非常重要的角色&#xff0c;尤其是Google、Bing、Yahoo这样的大型搜索引擎。Python作为一种高效的编程语言&#xff0c;在搜索引擎的开发中也发挥着至关重要的作用。本文将解析目前最常用的搜索引擎&a…

chatgpt赋能python:Python说:为什么这门编程语言如此重要?

Python说&#xff1a;为什么这门编程语言如此重要&#xff1f; 在过去的十年里&#xff0c;Python已经成为了最受欢迎的编程语言之一。它具有明显的优势&#xff1a;易于学习&#xff0c;简单易用&#xff0c;支持多种应用场景和操作系统。Python说&#xff1a;不论是初学者还…

IDEA常用插件分享

分享几个常用的IDEA开发插件&#xff0c;极大的提高工作效率 1、Alibaba Java Coding Guidelines 阿里巴巴代码规约&#xff1a; Alibaba Java Coding Guidelines 专注于Java代码规范&#xff0c;目的是让开发者更加方便、快速规范代码格式。该插件在扫描代码后&#xff0c;将…

javaWebssh中小学课件资源系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh中小学课件资源系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT…

16:00面试,还没10分钟就出来了 ,问的实在是太...

自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推我去了一家互联网公司&#xff0c;兴冲冲见面试官…