【Node.js】crypto 模块
crypto模块的目的是为了提供通用的加密和哈希算法。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。
Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。
只要密钥发生了变化,那么同样的输入数据也会得到不同的签名,因此,可以把Hmac理解为用随机数“增强”的哈希算法。
const crypto = require('crypto');// 创建哈希算法 md5, sha1等,以 md5 为例:
const hash = crypto.createHash('md5');
// Hmac 也是一种哈希算法,但它还需要一个密钥
const hmac = crypto.createHmac('sha256', 'secret-key');// update 方法将一段字符进行哈希转换,可任意多次调用update():
hash.update('Hello, world!');
hash.update('Hello, nodejs!');
hmac.update('Hello, nodejs!');// hex 以十六进制数据的形式进行展示,也可以使用 base64 格式进行展示
console.log(hash.digest('hex'));
console.log(hmac.digest('base64'));
update()方法默认字符串编码为UTF-8,也可以传入Buffer。
AES是一种常用的对称加密算法,加解密都用同一个密钥。crypto模块提供了AES支持,但是需要自己封装好函数。
const crypto = require("crypto");
// 加密
function encrypt(key, iv, data) {let decipher = crypto.createCipheriv('aes-128-cbc', key, iv);// decipher.setAutoPadding(true);return decipher.update(data, 'binary', 'hex') + decipher.final('hex');
}
// 解密
function decrypt(key, iv, crypted) {crypted = Buffer.from(crypted, 'hex').toString('binary');let decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);return decipher.update(crypted, 'binary', 'utf8') + decipher.final('utf8');
}
// key, iv必须是16个字节
let key = '1234567890123456';
let iv = '1234567890123456';
let data = 'hello world';
let crypted = encrypt(key, iv, data);
console.log("加密结果",crypted);
let decrypted = decrypt(key, iv, crypted);
console.log("解密结果",decrypted);
相关文章:
【Node.js】crypto 模块
crypto模块的目的是为了提供通用的加密和哈希算法。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。 Nodejs用C/C实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。 只要密钥发…...
vue父组件向子组件传值的方法
Vue父组件向子组件传值的方法有以下几种: Props(属性):在父组件中通过在子组件标签上绑定属性的方式传递数据。子组件可以通过props选项接收并使用这些属性。适用于父组件需要向子组件传递初始值的情况。 示例: <…...
MATLAB算法实战应用案例精讲-【优化算法】高尔夫优化算法(GOA)(附MATLAB代码实现)
前言 高尔夫优化算法(Golf Optimization Algorithm, GOA),用以解决现实世界中的复杂优化问题。该成果于2023年8月发表在SCI期刊Biomimetics 。高尔夫球是一项户外运动,在个人或团队的场地上展开,由专业球杆熟练操纵。这项运动的基本原则决定了它的本质——将球从起始点推向…...
数组的reduce和reduceRight方法
1.reduce方法可用接收两个参数: 第一个参数:为一个回调函数,此回调函数又可以有四个参数 第1个参数:为上一次回调函数return的结果,首次默认为第二个参数值,如果没有第二个参数值,则默认当前数…...
自动监控网站可用性并发送通知的 Bash 脚本
在现代的互联网世界中,网站的可用性对于业务的成功至关重要。如果您是一个网站管理员或负责监控网站运行状况的工程师,那么您知道及时发现并解决问题对于确保用户满意度至关重要。如何使用 Bash 脚本来监控多个网站的可用性,并在网站出现问题…...
go 项目打包部署到服务器
1、window打包到Linux 步骤1 依次执行一下命令,就会得到一个exe 文件 步骤2 把打包的文件,放到服务器上(可以使用FinalShell工具) chmod x main # 执行这个命令,给main 文件添加 执行权限,然后执行 ls &…...
整理mongodb文档:副本集成员可以为偶数
个人博客 整理mongodb文档:副本集成员可以为偶数 想了下,仲裁节点还是不想直接说太多,怕有的同学想太多,且本身副本集就偏向运维的,新手基本也没什么权限操作,就不多废话了。 文章概叙 文章从MongoDB是否可以用偶数…...
PHP - 遇到的Bug - 总结
BUG记录1 [问题] 除数为0,不符合规则 [问题描述] // 报错信息 DivisionByZeroError:is thrown when an attempt is made to divide a number by zero.// example public class Example {public static void Main(){int number1 3000;int number2 0;tr…...
统计子岛屿的数量
统计子岛屿 题目描述 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地)。一个 岛屿 是由 四个方向 (水平或者竖直)上相邻的 1 组成的区域。任何矩阵以外…...
IntelliJ IDEA Maven 项目的依赖分析
在一个 maven 的项目中,我们需要知道我们的项目中使用的包可能有哪些冲突。 这个在 IntelliJ IDEA 中提供了贴心的查看。 选择 Maven 项目中的分析依赖。 随后,IntelliJ IDEA 将会打开一个依赖分析的标签页。 在这个标签页中,我们可以看到…...
数学建模、统计建模、计量建模整体框架的理解以及建模的步骤
数学建模、统计建模、计量建模整体框架的理解以及建模的步骤 引言正文模型的设定模型的估计建模中可能遇到的四种数据类型 模型的检验模型的应用 最后 引言 这篇博客主要写给统计或者数学专业的小白,以供快速上手建模比赛;本人将在这里整合参加建模比赛…...
WaitGroup原理分析
背景 在实际业务开发中,我们会遇到以下场景:请求数据库,批量获取1000条数据记录后,处理数据 为了减少因一次批量获取的数据太多,导致的数据库延时增加,我们可以把一次请求拆分成多次请求,并发去…...
java直播源码:如何使用Java构建一个高效的直播系统
Java直播源码是一种用于实现实时视频流传输的技术,它可以将视频流从一个地方传送到另一个地方。它使用Java语言编写,可以支持多种视频格式,如MPEG、H.264等。 Java直播源码是一种用于实现实时视频流传输的技术,它可以将视频流从一…...
Websocket获取B站直播间弹幕教程——第二篇、解包/拆包
教程一、Websocket获取B站直播间弹幕教程 — 哔哩哔哩直播开放平台 1、封包 我们连接上B站Websocket成功后,要做两件事情: 第一、发送鉴权包。第二、发送心跳包,每30秒一次,维持websocket连接。 这两个包不是直接发送过去&…...
膝关节检测之1设计目标手势与物体交互的动画
原来只用unity自带的IK,发现背部不能动,且手和手指的移动和旋转试了好像没法通过animation实现(加入关键帧并修改最终状态的数值后播放没有变化,确定最终关键帧的数值已经改了的)。看资料,发现final IK&…...
canvas力导布局
老规矩,先上效果图 <html><head><style>* {margin: 0;padding: 0;}canvas {display: block;width: 100%;height: 100%;background: #000;}</style> </head><body><canvas id"network"></canvas> </…...
【网络安全】「漏洞原理」(二)SQL 注入漏洞之理论讲解
前言 严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。 【点击此处即可获…...
JavaScript中类的学习
一、JavaScript中的类 1.什么是类 类描述了一种代码的组织结构形式,不同的语言中对其实现形式各有差异。JavaScript中的类Class实际是一种描述对象之间引用关系的语法糖。 在Class语法糖出现之前,我们想重用一个功能模块,通常是用一个函数来…...
1600*A. Linova and Kingdom(DFS优先队列贪心)
Problem - 1336A - Codeforces Linova and Kingdom - 洛谷 解析: 开始认为分情况讨论 k 小于等于叶子结点和大于叶子结点的情况,然后选择深度最深的叶子结点和子孙数量最小的结点,但是发现如果把某一个非叶子结点选取,那么其子孙…...
gitlab git lfs的替代软件整理汇总及分析
文章目录 前言替代软件分析git-annexgit-fatgit-symgit-meida 总结 前言 git-lfs科普 Git LFS(Large File Storage)是一个Git扩展,用于管理大型文件。Git LFS通过将大型文件存储在Git仓库之外,从而加快了Git操作的速度。它使用指…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...
