如何使用JavaScript计算SHA-256 hash值详解
前言
SHA-256算法是一个广泛使用的散列函数,它产生256位的hash值。它用于许多安全应用程序和协议,包括 TLS 和 SSL、 SSH、 PGP 和比特币。
在 JavaScript 中计算 SHA-256 hash值使用原生 API 很容易,但是浏览器和 Node.js 之间有一些区别。由于浏览器实现是异步的,所以所提供的两个示例都使用异步promise返回。
浏览器实现
使用 Web Crypto API 中 SubtleCrypto 接口,SubtleCrypto.digest() 接口会返回给定数据的摘要,摘要以ArrayBuffer 的形式返回,需要将其转换为十六进制字符串。
const hashValue = val =>
crypto.subtle
.digest('SHA-256', new TextEncoder('utf-8').encode(val))
.then(h => {
let hexes = [],
view = new DataView(h);
for (let i = 0; i < view.byteLength; i += 4)
hexes.push(('00000000' + view.getUint32(i).toString(16)).slice(-8));
return hexes.join('');
});
hashValue(
JSON.stringify({ coder: "fe-garden", subject: 'sha-256', type: { module: "nodejs" } })
).then(console.log);
// '6c0225ba749b8701a5d051d02faafb1fdadc9457a2eaf81bf89e3353a6aaa4f1'
Nodejs实现
使用node 内置的加密库crypto实现。
import { createHash } from "crypto";
const hashValue = (val) =>
new Promise((resolve) => {
const hash = createHash("sha256").update(val).digest("hex");
resolve(hash);
});
hashValue(JSON.stringify({ coder: "fe-garden", subject: 'sha-256', type: { module: "nodejs" } })).then(
console.log
);
//6c0225ba749b8701a5d051d02faafb1fdadc9457a2eaf81bf89e3353a6aaa4f1
注意
上述两个实现互不兼容,不能在 Node.js 中使用浏览器实现,反之亦然;
两种实现应该为相同的输入产生相同的结果。
总结
以上就是利用js 实现sha256方法,包括浏览器版本的javascript 使用sha256算法,和Nodejs 中js计算sha256Hex 方法,希望对你有所帮助。
参考资料
到此这篇关于如何使用JavaScript计算SHA-256 hash值的文章就介绍到这了,更多相关JS计算SHA-256 hash值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
实例分析JS中的相等性判断===、 ==和Object.is()
这篇文章主要给大家介绍了关于JS中相等性判断===、 ==和Object.is()的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JS具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2019-11-11
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
本文要介绍的是网页中常见的图片上传后直接在页面生成小图预览的实现思路,考虑到该功能有一定的适用性,于是把相关的逻辑封装成了一个ImageUploadView组件,实际使用效果可查看下一段的git效果图2016-04-04
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
获取页面中元素到文档区域document的横向、纵向坐标,在js控制元素运动的过程中,对于页面元素坐标位置的获取是经常用到的,这里主要总结下两种方法2013-05-05
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单),需要的朋友可以参考一下2013-06-06
JS组件系列之Bootstrap table表格组件神器【终结篇】
Bootstrap Table是轻量级的和功能丰富的以表格的形式显示的数据,支持单选,复选框,排序,分页,显示/隐藏列,固定标题滚动表,响应式设计,Ajax加载JSON数据,点击排序的列,卡片视图等。本文给大家介绍JS组件系列之Bootstrap table表格组件神器【终结篇】,一起学习吧2016-05-05


最新评论