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