如何使用JavaScript計(jì)算SHA-256?hash值詳解
前言
SHA-256算法是一個(gè)廣泛使用的散列函數(shù),它產(chǎn)生256位的hash值。它用于許多安全應(yīng)用程序和協(xié)議,包括 TLS 和 SSL、 SSH、 PGP 和比特幣。
在 JavaScript 中計(jì)算 SHA-256 hash值使用原生 API 很容易,但是瀏覽器和 Node.js 之間有一些區(qū)別。由于瀏覽器實(shí)現(xiàn)是異步的,所以所提供的兩個(gè)示例都使用異步promise返回。
瀏覽器實(shí)現(xiàn)
使用 Web Crypto API 中 SubtleCrypto 接口,SubtleCrypto.digest() 接口會(huì)返回給定數(shù)據(jù)的摘要,摘要以ArrayBuffer
的形式返回,需要將其轉(zhuǎn)換為十六進(jìn)制字符串。
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實(shí)現(xiàn)
使用node 內(nèi)置的加密庫(kù)crypto
實(shí)現(xiàn)。
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
注意
上述兩個(gè)實(shí)現(xiàn)互不兼容,不能在 Node.js 中使用瀏覽器實(shí)現(xiàn),反之亦然;
兩種實(shí)現(xiàn)應(yīng)該為相同的輸入產(chǎn)生相同的結(jié)果。
總結(jié)
以上就是利用js 實(shí)現(xiàn)sha256方法,包括瀏覽器版本的javascript 使用sha256算法,和Nodejs 中js計(jì)算sha256Hex 方法,希望對(duì)你有所幫助。
參考資料
到此這篇關(guān)于如何使用JavaScript計(jì)算SHA-256 hash值的文章就介紹到這了,更多相關(guān)JS計(jì)算SHA-256 hash值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實(shí)例分析JS中的相等性判斷===、 ==和Object.is()
這篇文章主要給大家介紹了關(guān)于JS中相等性判斷===、 ==和Object.is()的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JS具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11分離與繼承的思想實(shí)現(xiàn)圖片上傳后的預(yù)覽功能:ImageUploadView
本文要介紹的是網(wǎng)頁(yè)中常見(jiàn)的圖片上傳后直接在頁(yè)面生成小圖預(yù)覽的實(shí)現(xiàn)思路,考慮到該功能有一定的適用性,于是把相關(guān)的邏輯封裝成了一個(gè)ImageUploadView組件,實(shí)際使用效果可查看下一段的git效果圖2016-04-04js獲取元素到文檔區(qū)域document的(橫向、縱向)坐標(biāo)的兩種方法
獲取頁(yè)面中元素到文檔區(qū)域document的橫向、縱向坐標(biāo),在js控制元素運(yùn)動(dòng)的過(guò)程中,對(duì)于頁(yè)面元素坐標(biāo)位置的獲取是經(jīng)常用到的,這里主要總結(jié)下兩種方法2013-05-05javascript 傳統(tǒng)事件模型構(gòu)造的事件監(jiān)聽(tīng)器實(shí)現(xiàn)代碼
最近做東西需要添加大量的事件,而且要對(duì)所有事件進(jìn)行比較細(xì)致的控制,于是便試著寫了個(gè)事件監(jiān)聽(tīng)器。2010-05-05Jquery和JS用外部變量獲取Ajax返回的參數(shù)值的方法實(shí)例(超簡(jiǎn)單)
Jquery和JS用外部變量獲取Ajax返回的參數(shù)值的方法實(shí)例(超簡(jiǎn)單),需要的朋友可以參考一下2013-06-06JS組件系列之Bootstrap table表格組件神器【終結(jié)篇】
Bootstrap Table是輕量級(jí)的和功能豐富的以表格的形式顯示的數(shù)據(jù),支持單選,復(fù)選框,排序,分頁(yè),顯示/隱藏列,固定標(biāo)題滾動(dòng)表,響應(yīng)式設(shè)計(jì),Ajax加載JSON數(shù)據(jù),點(diǎn)擊排序的列,卡片視圖等。本文給大家介紹JS組件系列之Bootstrap table表格組件神器【終結(jié)篇】,一起學(xué)習(xí)吧2016-05-05JavaScript語(yǔ)法約定和程序調(diào)試原理解析
這篇文章主要介紹了JavaScript語(yǔ)法約定和程序調(diào)試原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11