JavaScript学习 --消息摘要算法

news2024/9/25 5:22:36

消息摘要算法(也称哈希算法)是一种将任意大小的数据转换为一个固定大小的数据序列的算法。在JavaScript中,常见的消息摘要算法包括MD5、SHA-1、SHA-256等。它们适用于安全传输敏感数据、防篡改数据等场景。在本篇博客中,我们将介绍消息摘要算法的基本原理和相关技术,并提供一些实例来演示如何在JavaScript中使用消息摘要算法。

消息摘要算法基本原理

消息摘要算法是一种将任意大小的数据转换为固定大小的数据序列的算法。它可以将任意数据映射为一个数字签名或指纹,从而实现数据完整性验证和认证等功能。

在JavaScript中,常见的消息摘要算法包括MD5、SHA-1、SHA-256等。这些算法均具有“单向性”(即无法通过指纹计算逆向推导出原始数据)和“唯一性”(即对同一数据计算得出的指纹是唯一的)等特点。

以下是一个演示如何使用SHA-1消息摘要算法的示例:

import sha1 from 'crypto-js/sha1';

let data = 'Hello World!';

let hash = sha1(data).toString();

console.log(hash); // 输出 "2ef7bde608ce5404e97d5f042f95f89f1c232871"

图片

在这个示例中,我们使用了第三方库crypto-jssha1()方法来计算数据的SHA-1指纹。该方法接受一个用于计算指纹的数据,返回一个用于表示指纹结果的Base64编码字符串。

我们还可以使用其他消息摘要算法,例如MD5和SHA-256。以下是一个演示如何使用MD5算法的示例:

import md5 from 'crypto-js/md5';

let data = 'Hello World!';

let hash = md5(data).toString();

console.log(hash); // 输出 "ed076287532e86365e841e92bfc50d8c"

图片

在这个示例中,我们使用了第三方库crypto-jsmd5()方法来计算数据的MD5指纹。该方法接受一个用于计算指纹的数据,返回一个用于表示指纹结果的Base64编码字符串。

加盐哈希算法

为了加强消息摘要算法的安全性,常见的做法是使用加盐哈希算法。加盐哈希算法是一种在原始数据的基础上添加一个“盐值”,并使用哈希算法计算盐化后的值的算法,它可以在弱密码和彩虹表等攻击中提供额外的保护。

以下是一个演示如何使用加盐哈希算法的示例:

import sha256 from 'crypto-js/sha256';

let data = 'Hello World!';
let salt = 'wJ7J&%G^6Hg2';

let saltedData = salt + data;
let hash = sha256(saltedData).toString();

console.log(hash); // 输出 "edc6215ac24906e86ef5ee18e0751d85c44a2470b4f837f3f4b7da6c3c996e59"

在这个示例中,我们首先定义了一个“盐值”值,并将其添加到原始数据的前面。然后,我们使用SHA-256算法计算盐化后的值,并得到一个用于表示指纹结果的Base64编码字符串。

结论

消息摘要算法是一种将任意大小的数据转换为固定大小的数据序列的算法,用于保证数据的完整性和认证性。在JavaScript中,我们可以使用MD5、SHA-1、SHA-256等消息摘要算法来计算数据的指纹。为了提高安全性,也可以使用加盐哈希算法。使用第三方库可以方便快捷地使用消息摘要算法。

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

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

相关文章

slurm/sbatch/srun 多步骤串行运行多个依赖性任务

在slurm系统下,有时候需要按步骤运行A、B、C三个任务,但是直接写在脚本里会同时提交,所以需要建立依赖关系。 错误做法: 搜索网上做法及slurm串行教程,做法多为如下,使用bash或python来按顺序/循环内来串…

顺序表详解

💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大家三连关注,一起学习,一起进步&#…

NetApp FAS2750 和 FAS2820:适用于分布式企业和从远程到核心的 FAS

NetApp FAS2750 和 FAS2820:适用于分布式企业和从远程到核心的 FAS 拥有分布式企业和多个办公位置的客户希望使用这些系统进行虚拟化,以及为大型 FAS 和 AFF 系统提供简单且经济高效的备份和灾难恢复。 为什么要从 NetApp FAS 系列中选择一个型号&…

LLM / Python - json 使用详解

目录 一.引言 二.json 方法 1.json.dumps 2.json.dump 3.json.loads 4.json.load 三.json 参数 1.ensure_ascii 2.allow_nan 3.indent 4.sortKeys 5.Other 四.LLM 数据构建 1.json 数据构建 2.Train.py 五.总结 一.引言 上文中我们介绍了 LLama2-Chinese 的简…

ipad手写笔有必要买原装吗?质量好苹果平板平替笔推荐

因为iPad平板的强大,使得很多人群都用上了iPad,而且还在不断的普及。不管是用于绘画或者学习记笔记,都非常好用,但要是用来看电视剧玩游戏就没那么有价值了。如果你不打算购买昂贵的苹果电容笔,或者只是为了记录&#…

“数字中华 点亮未来”中华线上客户节 盛大开幕

2023年是中华保险数字化转型落地之年,峥嵘37载,中华保险在数字化转型上已经涌现了一批彰显辨识度、具有影响力的应用成果。7月15日,中华保险围绕数字化转型之路开展以“数字中华 点亮未来”为主题的37周年线上客户节活动,倾力打造…

直播平台源码开发提高直播质量的关键:视频编码和解码技术

在互联网日益发展的今天,直播平台成为人们互联网生活的主力军,直播平台功能的多样化与智能化使我们的生活有了极大地改变,比如短视频功能,它让我们既可以随时随地去发布自己所拍摄到的东西让世界各地的用户看到,也能让…

融合正余弦和折射反向学习的北方苍鹰优化算法,与金鹰/蜣螂/白鲸/霜冰算法对比...

今天的主角是:融合正余弦和折射反向学习的北方苍鹰优化算法(SCNGO),算法由作者自行改进,目前应该没有文献这样做。 改进策略参照的上一期改进的麻雀优化算法,改进点如下: ①采用折射反向学习策略初始化北方苍鹰算法个体…

【字节跳动青训营】后端笔记整理-3 | Go语言工程实践之测试

**本文由博主本人整理自第六届字节跳动青训营(后端组),首发于稀土掘金:🔗Go语言工程实践之测试 | 青训营 目录 一、概述 1、回归测试 2、集成测试 3、单元测试 二、单元测试 1、流程 2、规则 3、单元测试的例…

AQS抽象同步队列核心原理

CLH自旋锁 JUC中显式锁基于AQS抽象队列同步器,而AQS是CLH锁的一个变种。队列头结点可以获得锁,其他节点排队等候。 在争夺锁激烈的情况下,为了减少CAS空自旋(CAS需要CPU进行内部通信保证缓存一致性造成流量过大引起总线风暴&…

【代码随想录day21】二叉搜索树中的众数

题目 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满足如下定义&am…

Git移除commit过的大文件

前言:在提交推送本地更改至仓库时,误将大文件给提交了,导致push时报错文件过大,因此需要将已经commit的大文件移除后再push 若已知要删除的文件或文件夹路径,则可以从第4步开始 1.对仓库进行gc操作 $ git gc 2.查询…

ThinkPHP 一对多关联

用一对多关联的前提 多的一方的数据库表有一的一方数据库表的外键。 举例,用户获取自己的所有文章 数据表结构如下 // 用户表 useruser_id - integer // 用户主键name - varchar // 用户名称// 文章表 articlearticle_id - integer // 文章主键title - varchar …

WSL2安装google chrome浏览器

一. 环境: Windows 11 Ubuntu-22.04 二. 安装google-chrome步骤(官方文档): 1. 创建文件夹:mkdir chrome 2. 进入目录:cd chrome/ 3. 下载chrome压缩包:sudo wget https://dl.google.com/linux/direct/go…

学习 NestJs 的第一步

安装 NestJS 的先决条件和安装 NestJS NodeJS 的版本需要大于等于 16。 安装 NestJS 的命令是&#xff1a;npm i -g nestjs/cli。 使用命令创建项目 使用 nest new <项目名称> 来创建项目&#xff0c;假如要开启 TS 的严格语法功能的话&#xff0c;可以把--strict 标…

【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块15

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

OSPF的拓展配置

OSPF的拓展配置 1.手工认证 --- 在OSPF数据包交互中&#xff0c;邻居之间的数据报中将携带认证口令&#xff0c;两边认证口令相同&#xff0c;则意味着身份合法 OSPF的手工认证总共分为三种&#xff1a; 1.接口认证 [r5-GigabitEthernet0/0/0]ospf authenticati…

GB/T 25000.51解读——软件产品的性能效率怎么测?

GB/T 25000.51-2016《软件产品质量要求和测试细则》是申请软件检测CNAS认可一定会用到的一部国家标准。在前面的文章中&#xff0c;我们为大家整体介绍了GB/T 25000.51-2016《软件产品质量要求和测试细则》国家标准的结构和所涵盖的内容以及对软件产品的八大质量特性中的功能性…

fastposter v2.16.0 让海报开发更简单

fastposter v2.16.0 让海报开发更简单 &#x1f525;&#x1f525;&#x1f525; fastposter海报生成器是一款快速开发海报的工具。只需上传一张背景图&#xff0c;在对应的位置放上组件&#xff08;文字、图片、二维&#x1f434;、头像&#xff09; 点击代码直接生成各种语言…

个人信息的编写以及头像的联动

下面这个是导航栏通过on触发的事件 与图片联动 <template><div><ul><li>{{obj.account}}</li><li>{{obj.ctime|dataFormat}}</li><li>{{obj.id}}</li><li>{{obj.userGroup}}</li><div><!-- acti…