欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用js驗(yàn)證hash,content hash , chunk hash的區(qū)別解析

 更新時(shí)間:2024年12月07日 09:55:38   作者:silvia_frontend  
crypto-js是一個(gè)JavaScript加密算法庫,用于實(shí)現(xiàn)各種加密算法和哈希函數(shù),它提供了一種簡(jiǎn)單而強(qiáng)大的方式來執(zhí)行加密操作,包括對(duì)稱加密算法、非對(duì)稱加密算法和哈希函數(shù)等,本文給大家介紹使用js驗(yàn)證hash,content hash , chunk hash的區(qū)別解析,感興趣的朋友跟隨小編一起看看吧

一、使用js驗(yàn)證hash, content hash , chunk hash的區(qū)別

1、計(jì)算一般的 Hash(以簡(jiǎn)單字符串為例)

使用crypto-js庫來進(jìn)行哈希計(jì)算,需提前引入npm install crypto-js庫。

crypto-js: 是一個(gè)JavaScript加密算法庫,用于實(shí)現(xiàn)各種加密算法和哈希函數(shù),它提供了一種簡(jiǎn)單而強(qiáng)大的方式來執(zhí)行加密操作,包括對(duì)稱加密算法、非對(duì)稱加密算法和哈希函數(shù)等。

  • 實(shí)現(xiàn):這里以一個(gè)簡(jiǎn)單字符串來驗(yàn)證,使用CryptoJS.SHA256進(jìn)行加密, 字符串改變,生成的加密值肯定不同。
  • 應(yīng)用:一般開發(fā)登錄模塊的時(shí)候會(huì)用到,服務(wù)端存儲(chǔ)的是這個(gè)哈希值,當(dāng)再次登錄輸入密碼時(shí),會(huì)再次計(jì)算密碼的哈希值,并和存儲(chǔ)的哈希值做比較。
const CryptoJS = require("crypto-js");
// Hash
const password = "this is my passward 1234";
const hash = CryptoJS.SHA256(password).toString();
console.log("Hash:", hash);

2、計(jì)算 Content Hash(基于文本內(nèi)容整體的哈希)

首先準(zhǔn)備一個(gè)txt文件,然后通過fs讀取文件內(nèi)容。
text.txt:

這是一段測(cè)試的文本!?。?br />11111111111111111
222222222
3333333333
44444444

fs模塊: Node.js提供的對(duì)系統(tǒng)文件及目錄進(jìn)行讀寫操作的模塊。
fs.readFile(filename,[option],callback) 方法讀取文件。

  • 實(shí)現(xiàn):加密方法還是和上面的一樣,只不過是通過fs獲取的文件內(nèi)容??梢钥吹剑瑑?nèi)容哈希關(guān)注的是文件內(nèi)容本身的完整性。如果文件內(nèi)容發(fā)生變化,內(nèi)容哈希值也會(huì)隨之改變。
  • 場(chǎng)景:在內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)中判斷資源是否更新等場(chǎng)景,只要內(nèi)容沒變化,內(nèi)容哈希值就不會(huì)變。
const CryptoJS = require("crypto-js");
const fs = require("fs");
// Content Hash
fs.readFile("src/test.txt", "utf-8", (err, data) => {
    if (err) {
        console.error("Error reading file:", err);
        return;
    }
    const contentHash = CryptoJS.SHA256(data).toString();
    console.log("Content Hash: ", contentHash);
});

3、計(jì)算 Chunk Hash(將內(nèi)容分塊后計(jì)算哈希)

和上面內(nèi)容哈希的獲取方式一樣,只不過需要將獲取到的文件劃分成多個(gè)chunk,然后對(duì)每個(gè)chunk進(jìn)行加密。

const CryptoJS = require("crypto-js");
const fs = require("fs");
// Chunk Hash
const CHUNK_SIZE = 10; // 每個(gè)塊的大?。ㄗ止?jié))
fs.readFile("src/test.txt", "utf-8", (err, data) => {
    if (err) {
        console.log("err", err);
        return;
    }
    const chunkHashes = []; // 塊hash值數(shù)組
    for (let i = 0; i < data.length; i += CHUNK_SIZE) {
        const chunkContent = data.slice(i, i + CHUNK_SIZE);
        const chunkHash = CryptoJS.SHA256(chunkContent).toString();
        chunkHashes.push(chunkHash);
    }
    console.log("Chunk Hashes", chunkHashes);
});

slice()方法:是 JavaScript 中用于提取字符串或數(shù)組部分內(nèi)容的方法。它返回一個(gè)新的字符串或數(shù)組,包含從原字符串或數(shù)組中提取的部分元素,原字符串或數(shù)組本身不會(huì)被修改。

語法string.slice(startIndex[, endIndex])。其中startIndex是提取的起始位置(索引從 0 開始),endIndex是提取的結(jié)束位置(不包括該位置的字符)。如果省略endIndex,則提取從startIndex到字符串末尾的部分。

改變txt文件中的后面一點(diǎn)內(nèi)容,然后觀察到前面的chunk的hash都沒變,只有后面的兩個(gè)hash改變了。

場(chǎng)景:這種塊哈希的計(jì)算方式常用于大型文件傳輸?shù)葓?chǎng)景,在傳輸或存儲(chǔ)過程中可以分別驗(yàn)證每個(gè)塊的完整性,通過對(duì)比每個(gè)塊的哈希值與原始的塊哈希是否一致來判斷塊數(shù)據(jù)是否準(zhǔn)確。

二、webpack配置中這三種hash的作用分析

1、Hash(模塊標(biāo)識(shí)符哈希)

在webpack中,hash是基于整個(gè)構(gòu)建內(nèi)容(包括所有模塊、資源等)生成的一個(gè)哈希值,每次構(gòu)建時(shí),只要一個(gè)文件改變,這個(gè)哈希值就會(huì)改變。

module.exports = { 
    //...其他配置 
    output: { filename: '[name].[hash:8].js' }  //:8就是指定生成的hash值是8位的
};
  • 優(yōu)點(diǎn): 簡(jiǎn)單直接,可以用于版本控制和緩存清除。當(dāng)新的構(gòu)建發(fā)生時(shí),由于hash值改變,瀏覽器會(huì)重新下載新的資源文件,保證用戶獲取到最新的內(nèi)容。
  • 缺點(diǎn): 比如即使一個(gè)css文件一個(gè)小改動(dòng),重新構(gòu)建時(shí)哈希值都會(huì)改變,可能導(dǎo)致不必要的緩存失效,影響性能。

2、Content Hash(內(nèi)容哈希)

在webpack中,content-hash是根據(jù)文件內(nèi)容(具體模塊或資源的內(nèi)容)生成的哈希值。它只和文件自身的內(nèi)容有關(guān),與其他文件或構(gòu)建過程中的其他因素?zé)o關(guān)。

module.exports = { 
    //...其他配置 
    output: { filename: '[name].[contenthash].js' } 
};

優(yōu)點(diǎn): 精確地基于內(nèi)容進(jìn)行哈希計(jì)算,使得只有內(nèi)容發(fā)生變化的文件,其文件名才會(huì)改變。這對(duì)于緩存管理非常有利。缺點(diǎn): 計(jì)算成本相對(duì)較高,因?yàn)樾枰獙?duì)每個(gè)文件內(nèi)容進(jìn)行單獨(dú)的哈希計(jì)算。不過,在現(xiàn)代構(gòu)建工具和硬件條件下,這個(gè)缺點(diǎn)通??梢越邮?。

3、Chunk Hash(塊哈希)

在webpack中,chunk-hash是基于 Webpack 打包后的代碼塊(chunk)生成的哈希值。Webpack 在打包過程中會(huì)將相關(guān)的模塊組合成代碼塊,chunk-hash就是針對(duì)這些代碼塊進(jìn)行計(jì)算的。

module.exports = { 
    //...其他配置 
    output: { filename: '[name].[chunkhash].js' } 
};
  • 優(yōu)點(diǎn): 可用于代碼分割(code-splitting)場(chǎng)景。如:一個(gè) Web 應(yīng)用有多個(gè)入口點(diǎn)(如main.jsvendor.js),通過chunk-hash可以為每個(gè)入口點(diǎn)對(duì)應(yīng)的代碼塊生成獨(dú)立的哈希值。這樣,當(dāng)一個(gè)代碼塊(如vendor.js包含第三方庫)的內(nèi)容沒有變化時(shí),其對(duì)應(yīng)的文件名不會(huì)因?yàn)槠渌a塊(如main.js)的變化而改變,有利于瀏覽器緩存的有效利用。
  • 缺點(diǎn): 如果代碼塊的劃分發(fā)生變化(例如,調(diào)整了 Webpack 的代碼分割策略),即使模塊內(nèi)容沒有改變,chunk-hash值也可能會(huì)改變,從而影響緩存。

這篇文章我們通過js驗(yàn)證了一下hash, content hash , chunk hash的區(qū)別,并對(duì)比了一下webpack中的使用場(chǎng)景,希望對(duì)對(duì)webpack這里配置有疑惑的伙伴有幫助。

到此這篇關(guān)于使用js驗(yàn)證hash, content hash , chunk hash的區(qū)別的文章就介紹到這了,更多相關(guān)js驗(yàn)證hash, content hash , chunk hash內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript 下載svg圖片為png格式

    JavaScript 下載svg圖片為png格式

    這篇文章主要介紹了JavaScript 下載svg圖片為png格式,本文通過代碼給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • JavaScript獲取GridView選擇的行內(nèi)容

    JavaScript獲取GridView選擇的行內(nèi)容

    一般GridView第一列是多選框CheckBox,負(fù)責(zé)標(biāo)記當(dāng)前行是否被選中,后面可以有文本框TextBox,下拉框DropDownList,標(biāo)簽Lable
    2009-04-04
  • js 為label標(biāo)簽和div標(biāo)簽賦值的方法

    js 為label標(biāo)簽和div標(biāo)簽賦值的方法

    這篇文章介紹了js 為label標(biāo)簽和div標(biāo)簽賦值的方法,有需要的朋友可以參考一下
    2013-08-08
  • javascript和jquery分別實(shí)現(xiàn)的九九乘法表代碼

    javascript和jquery分別實(shí)現(xiàn)的九九乘法表代碼

    javascript 九九乘法表 附j(luò)query 實(shí)現(xiàn)的九九乘法表代碼
    2010-03-03
  • 詳解小程序之簡(jiǎn)單登錄注冊(cè)表單驗(yàn)證

    詳解小程序之簡(jiǎn)單登錄注冊(cè)表單驗(yàn)證

    這篇文章主要介紹了小程序之簡(jiǎn)單登錄注冊(cè)表單驗(yàn)證,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • js鼠標(biāo)移動(dòng)時(shí)禁止選中文字

    js鼠標(biāo)移動(dòng)時(shí)禁止選中文字

    本文主要介紹了js鼠標(biāo)移動(dòng)時(shí)禁止選中文字的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • Bootstrap?table列上下移動(dòng)效果

    Bootstrap?table列上下移動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Bootstrap?table列上下移動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Javascript數(shù)組與字典用法分析

    Javascript數(shù)組與字典用法分析

    這篇文章主要介紹了Javascript數(shù)組與字典用法,以實(shí)例形式較為詳細(xì)的分析了Array作為數(shù)組與字典的不同用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • laydate時(shí)間日歷插件使用方法詳解

    laydate時(shí)間日歷插件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了laydate時(shí)間日歷插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • TypeScript中Enum類型的具體使用

    TypeScript中Enum類型的具體使用

    在TypeScript 中,枚舉或枚舉類型是具有一組常量值的常量長度的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了TypeScript中Enum類型的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10

最新評(píng)論