JS学习-CryptoJS加密库

news2024/11/15 11:26:55

CryptoJS加密库

安装库

npm install crypto-js

如下例子

对称加密

const CryptoJS = require('crypto-js');   //引入加密库
var str="123456"
//md5加密
console.log(CryptoJS.MD5(str).toString())
var str2 = CryptoJS.enc.Utf8.parse(str);
//可以把字符串转成UTF-8编码

//base编码
var base64str = CryptoJS.enc.Base64.stringify(str2)
console.log(base64str)

//base64解码
var words = CryptoJS.enc.Base64.parse(base64str)
var parseStr = CryptoJS.enc.Utf8.stringify(words)
console.log(parseStr)

//SHA256
var enSHA256 = CryptoJS.SHA256(str).toString()
console.log(enSHA256)

//SHA512
var enSHA512 = CryptoJS.SHA512(str).toString()
console.log(enSHA512)

//对称加密
//aes对称加密

const key = CryptoJS.enc.Utf8.parse("1234123412ABCDEF")  //⼗六位⼗六进制数作为密钥
const iv  = CryptoJS.enc.Utf8.parse("ABCDEF1234123412")  //⼗六位⼗六进制数作为密钥偏移量

//解密方法
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,
        mode:CryptoJS.mode.CBC,
        padding:CryptoJS.pad.Pkcs7})
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString()
}

//加密方法
function Encrypt(word){
    let srcs = CryptoJS.enc.Utf8.parse(word)
    let encrypted = CryptoJS.AES.encrypt(srcs,key,{
        iv,
        mode:CryptoJS.mode.CBC,
        padding:CryptoJS.pad.Pkcs7
    });
    return encrypted.ciphertext.toString().toUpperCase();
}

var aesStr = Encrypt("123456")
console.log(aesStr)
var pasStr = Decrypt(aesStr)
console.log(pasStr)

在这里插入图片描述

rsa ⾮对称加密算法

npm install jsencrypt

https://config.net.cn/tools/RSA.html
在这里插入图片描述

const JSEncrypt = require('jsencrypt');

//公钥
var PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD7lARUUUt5yAg1WDoreU4fAuZbSIBxFIv/RR74dns13rzjZgqj66x5cs5rcns+rs4BTMetaoiEcX+uM4dAhkHdM9qvmGiiX87QM5/a4jam9N//0IWAUU199oUaxQINjOTTbpDoNL/CrfpWVPPw/ATQxMnEEnXCCTPM8WD1szLuTQIDAQAB"

//私钥
var PRIVATE_KEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAPuUBFRRS3nICDVYOit5Th8C5ltIgHEUi/9FHvh2ezXevONmCqPrrHlyzmtyez6uzgFMx61qiIRxf64zh0CGQd0z2q+YaKJfztAzn9riNqb03//QhYBRTX32hRrFAg2M5NNukOg0v8Kt+lZU8/D8BNDEycQSdcIJM8zxYPWzMu5NAgMBAAECgYAk5pFa/8CbGILRtkL0APs7M7zvmzsRuxKMywnvpktMu8LHdP5vDEC0YKlT28slhtTbHnS0ZEmpaY9xkQfP6FFtEv0B1uXTKM2rpX7rXRCpXKj1BcapSvNmK5lb824ILG6GY54t2BGdRGizjwlWDvMjRkdlITHMAkygFeWVZo4IKQJBAP5XXhLhalj7xUfawAtHQYXKvMMhVAYPKDUsaceR1PEjBUBzdAdZAONkCezuwt9d08zSiQYpSn4YyMNLIVf3oNkCQQD9OAlOhFI4xqJBa8zv0kiTtmqWQFUGBFlIsUyMjHsYLFXZdzV+diXI214aZ/dln5yqWCT2LvDVQ3IZoMAbMtCVAkAp4+XgojPL2BvUC9lZgjDugke4s8KNBO4QY/JAJmq2FJiG1v0jQKt+yDlCRsjd1SxPLdXXp/FW92oJkFQ7ktNxAkEA34iePp/07YX8KoB9k6AwzaUVBrqX1A32u4M4rkI9UCOjTaw8nvyxclSlB+6LqTxz0rSpPGJH3BwEF7eenuQG2QJBAJOQ1ujLMtsCM7cDGSl8D64BU7Krzw6BnUh2HDsdRxKprPo+B4hFBDnUrISXOuDPZmFyxGh6lusDE7drD8OlZbU="

var encrypt = new JSEncrypt();
encrypt.setPublicKey('-----BEGIN PUBLIC KEY-----' + PUBLIC_KEY + '-----END PUBLIC KEY-----')
var str = {"uid":"admin","pwd":"123456"}

var encrypted = encrypt.encrypt(JSON.stringify(str))
console.log('加密前数据:%o', str)
console.log('加密后数据:%o', encrypted)

//使⽤私钥解密
var decrypt = new JSEncrypt()
decrypt.setPublicKey('-----BEGIN RSA PRIVATE KEY-----' + PRIVATE_KEY + '-----END RSA PRIVATE KEY-----')
var uncrypted = decrypt.decrypt(encrypted)
console.log('解密后数据:%o', uncrypted)

在这里插入图片描述
出现ReferenceError: window is not defined 错误 解决⽅法在node_modules/jsencrypt/bin/jsencrypt.js 添加 window=global;即可
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1119674.html

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

相关文章

数据结构数组 Array 手写实现,扩容原理

数组数据结构 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型数据的集合。 数组的特点: 数组是相同数据类型的元素集合(int 不能存放 double)数组中各元素的存储是有先…

Xcode14创建github远程仓库Token

1.点击Create a Token on GitHub 2.在打开的网页中,登陆GitHub 3.点击生成Token 这是不能为空 4.Token创建成功如下: 5.复制Token到Xcode然后点击Sign In登陆 正在创建远程我仓库 正在将本地仓库代码推入远程仓库 创建成功

method.isAnnotationPresent(Xxx.class)一直为null

​​​​package com.dj.springtest.aspect;import com.dj.springtest.annotation.RequireRoles; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.s…

Linux中的shell编程

shell编程 重定向 cat >temp 输入内容到temp文件中,如果存在temp则覆盖,没有则新建 cat >>temp 追加内容 cat temp1>>temp2 将temp1中的内容追加到temp 命令执行控制符号 ; 一个命令行执行多条语句 命令替换符 1.双引号&#…

【软考】12.1 范围管理/进度管理

《范围管理》 项目需求的范围边界工作分解结构(WBS):自上而下的分解结构 产品范围和项目范围 产品范围: a. 产品或服务应包含的功能 ——> 产品要求的描述 b. 判断是否完成:是否满足产品描述 项目范围:…

Hadoop3教程(三十二):(生产调优篇)NameNode故障恢复与集群的安全模式

文章目录 (159)NameNode故障处理(160)集群安全模式&磁盘修复集群安全模式磁盘修复等待安全模式 参考文献 (159)NameNode故障处理 如果NameNode进程挂了并且存储的数据也丢失了,如何恢复Nam…

基于nodejs+vue 中小学课程辅导系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

浏览器的渲染机制

渲染机制 浏览器的渲染机制一般分为以下几个步骤 处理 HTML 并构建 DOM 树。处理 CSS 构建 CSSOM 树。将 DOM 与 CSSOM 合并成一个渲染树。根据渲染树来布局,计算每个节点的位置。调用 GPU 绘制,合成图层,显示在屏幕上。 在构建 CSSOM 树时…

【模型推理优化学习笔记】张量并行和流水线并行简介

张量并行 当每个张量被分成多个块时,就会发生张量并行性,并且张量的每个块都可以放置在单独的 GPU 上。在计算过程中,每个块在不同的 GPU 上单独并行处理,并且可以通过组合来自多个 GPU 的结果来计算结果(最终张量&am…

React环境初始化

环境初始化 学习目标: 能够独立使用React脚手架创建一个React项目 1.使用脚手架创建项目 官方文档:(https://create-react-app.bootcss.com/)    - 打开命令行窗口    - 执行命令      npx create-react-app projectName    说明&#xff1a…

Linux:权限是什么

本篇文章来简单介绍一下Linux操作系统中权限的基本概念和一些操作方法,对Linux权限有一个基本的了解,希望对大家学习Linux有所帮助。 目录 1.权限的概念 2.Linux权限管理 2.1 文件访问者的分类 2.2 文件类型与访问权限(事物属性&#xff…

(未完待续)【Netty专题】Netty实战与核心组件详解

目录 前言阅读对象阅读导航前置知识课程内容一、Netty简介1.1 Netty是什么1.2 Netty有什么优势 二、第一个Netty程序2.1 Netty简单使用示例2.2 代码解读2.3 Netty的特性2.3.1 Netty的事件 2.4 Netty线程模型 三、Netty核心组件详解(未完待续)3.1 EventLo…

learn C++ NO.11——string类模拟实现

前言 本篇文章主要是讲string类的模拟实现,模拟实现的是string类的常用接口以及成员函数。让读者对string类有更深的理解。适当的“造轮子”,有助于我们的语言学习。 简单描述string类 string类其实就是一个管理字符数组的线性表,我们可以…

常见面试题-Redis专栏(二)

theme: cyanosis typora-copy-images-to: imgsRedisson 分布式锁?在项目中哪里使用?多久会进行释放?如何加强一个分布式锁? 答: 首先入门级别的分布式锁是通过 setnx 进行实现,使用 setnx 实现有四个注意…

6.MySQL内置函数

个人主页:Lei宝啊 愿所有美好如期而遇 日期函数 current_date() 当前日期 select 可以做表达式和函数的计算。 current_time() 当前时间 current_timestamp() 当前日期加时间 注意:值得说明的是这三个函数底层调用的都是同一个函数,只不…

C语言关键字

关键字作用 关键字是 C 语言中预先保留的单词 C语言关键字 注意:在定义变量或者常量的时候,不要使用关键字

设计模式:组合模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

简介: 组合模式,它是一种用于处理树形结构、表示“部分-整体”层次结构的设计模式。它允许你将对象组合成树形结构,以表示部分和整体的关系。这种模式的主要目的是简化客户端代码,并使客户端以一致的方式处理单个对象和组合对象。…

数字图像处理实验记录五(图像的空间域增强-锐化处理)

前言: 文章目录 一、基础知识1,什么是锐化?2,为什么要锐化?3,怎么进行锐化? 二、实验要求任务1:任务2:任务3: 三、实验记录:任务1:任…

计算机网络第三章习题

1.假定1km长的CSMA/CD网络的数据率为1Gb/s。设信号在网络上的传播 速率为200000km/s。求能够使用此协议的最短帧长. 问题刨析: 逻辑链: 最短帧长数据传输率x争用期2τ(2倍端到端所需要的时间) 题目已经给出数据率为1Gb/s,所以我们要知道争用期2τ是多少. 端到端所需要的时间信…

订单 延后自动关闭,五种方案优雅搞定!

前 言 在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务 。那么这里就会产生一个问题,这个…