91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

哈希算法到底是什么?它又是如何運(yùn)行的?

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:機(jī)器之心 ? 2020-06-28 11:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

哈希算法到底是什么?它又是如何運(yùn)行的?Greg Walker 用視頻給出了一個(gè)可視化的解答,并在 GitHub 上進(jìn)行了共享,詳細(xì)介紹了 SHA-256 函數(shù)的工作原理。

項(xiàng)目鏈接:https://github.com/in3rsha/sha256-animation Greg Walker 喜歡構(gòu)建一些教育性網(wǎng)站,簡單易懂地講解一些科普類算法。 他在這個(gè)解釋 SHA-256 的視頻中,不僅介紹了哈希計(jì)算,還涉及比特幣挖礦、基礎(chǔ)運(yùn)算、函數(shù)、常量等知識。 什么是哈希函數(shù)? 哈希就是將不同的輸入映射成獨(dú)一無二的、固定長度的值(又稱 "哈希值"),是最常見的軟件運(yùn)算之一。很多網(wǎng)絡(luò)服務(wù)會使用哈希函數(shù),產(chǎn)生一個(gè) token,標(biāo)識用戶的身份和權(quán)限。 那它是如何運(yùn)行的呢?哈希函數(shù)可以把給定的數(shù)據(jù)轉(zhuǎn)換成固定長度的無規(guī)律數(shù)值。此處為方便讀者理解,我們借用《我的第一本算法書》里的比喻:將哈希函數(shù)想象成攪拌機(jī)。

圖源:《我的第一本算法書》 將數(shù)據(jù) “abc” 放入攪拌機(jī)里,經(jīng)過哈希函數(shù)計(jì)算后,會輸出固定長度且無規(guī)律的數(shù)值,而這個(gè)無規(guī)律數(shù)值就是“哈希值”,絕大多數(shù)情況用十六進(jìn)制來表示。

哈希函數(shù)有一系列特征,如上圖所示,輸出的哈希值與輸入數(shù)據(jù)的大小、長度等沒有任何關(guān)系。

若輸入相同,輸出的哈希值也必定相同。

如輸入不同,輸出的哈希值也必然不同,哪怕是只有細(xì)微區(qū)別。

在輸入數(shù)據(jù)完全不同的情況下,輸出的哈希值有可能是相同的,這種少數(shù)特殊情況稱為“哈希沖突”。

同時(shí),哈希值是不可逆的,也就是說,通過哈希值不可能反向推算出原本的數(shù)據(jù)。 在本項(xiàng)目中,Greg Walker 也通過視頻介紹了以上幾大特征。

SHA-256 SHA 包括 SHA-0、SHA-1、SHA-2 和 SHA-3 系列,SHA-256 是 SHA-2 系列的函數(shù)之一。其摘要長度為 256 bits,即 32 個(gè)字節(jié),故稱 SHA-256。SHA-256 常出現(xiàn)于比特幣領(lǐng)域。 那么 SHA-256 到底是什么樣的呢?Greg Walker 提供了動畫展示。

動畫展示 SHA-256,你也能做到

只需對需要進(jìn)行 hash 處理的數(shù)據(jù)運(yùn)行 sha256.rb 腳本即可。

# simpleruby sha256.rb abc # hash binary or hex data by using `0b` or `0x` prefixesruby sha256.rb 0b01100001ruby sha256.rb 0xaabbccdd # speed up or step through the animation (optional)ruby sha256.rb abc normal # defaultruby sha256.rb abc fastruby sha256.rb abc enter 輸入二進(jìn)制字符串作為參數(shù),從而運(yùn)行 SHA-256 中的各個(gè)函數(shù):

ruby shr.rb 11111111111111110000000000000000 22ruby rotr.rb 11111111111111110000000000000000 22ruby sigma0.rb 11111111111111110000000000000000ruby sigma1.rb 11111111111111110000000000000000ruby usigma0.rb 11111111111111110000000000000000ruby usigma1.rb 11111111111111110000000000000000ruby ch.rb 11111111111111110000000000000000 11110000111100001111000011110000 00000000000000001111111111111111ruby maj.rb 11111111111111110000000000000000 11110000111100001111000011110000 00000000000000001111111111111111 你也可以使用 hash256.rb 來進(jìn)行 double-SHA256,該腳本默認(rèn)接受十六進(jìn)制數(shù)據(jù),如交易數(shù)據(jù)等。

ruby hash256.rb 0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c # genesis block headerSHA-256 的工作原理基礎(chǔ)運(yùn)算 這里只對 SHA-256 的基礎(chǔ)運(yùn)算進(jìn)行簡單介紹。 SHA-256 uses four basic bitwise operations on words. SHA-256 對 words 使用 4 種 bitwise 基礎(chǔ)運(yùn)算。 右移 (shr.rb)

SHRn(x) = x >> n 將 bits 向右移動多個(gè)位置,同時(shí)從右側(cè)移出的 bits 丟失。 向右旋轉(zhuǎn) (rotr.rb)

將 bits 向右移動多個(gè)位置,然后將移動后的 bits 放在左側(cè),也稱為「循環(huán)右移」。 Exclusive Or (xor.rb)

x ^ y ^ z XOR 的輸入為兩個(gè) bit,如果其中只有一個(gè)為 1,則輸出 1。在合并多個(gè) bit 時(shí)通過多次 XOR 運(yùn)算進(jìn)行,同時(shí)獲得多個(gè) bit 的“平衡表示”(balanced representation)。 加法 (add.rb)

(v + w + x + y + z) % 232 這是非常標(biāo)準(zhǔn)的整數(shù)加法運(yùn)算,唯一的不同是,此處采用結(jié)果模數(shù)為 2^32,從而將結(jié)果限制為 32 位數(shù)字。 函數(shù) 將上述運(yùn)算組合起來,就可以創(chuàng)建函數(shù)。 前四個(gè)函數(shù)使用希臘符號 Sigma 命名(小寫σ和大寫Σ)。 σ0 (sigma0.rb)

σ0(x) = ROTR7(x) ^ ROTR18(x) ^ SHR3(x) σ1 (sigma1.rb)

σ1(x) = ROTR17(x) ^ ROTR19(x) ^ SHR10(x) Σ0 (usigma0.rb)

Σ0(x) = ROTR2(x) ^ ROTR13(x) ^ ROTR22(x) Σ1 (usigma1.rb)

Σ1(x)=ROTR6(x)^ROTR11(x)^ROTR25(x) 最后兩個(gè)函數(shù) “Choice” 和“Majority”可接受三個(gè)不同的輸入,如下所示: Choice (ch.rb)

該函數(shù)基于 x 位在 y 位和 z 位之間做出選擇。如果 x = 1,則選擇 y 位;如果 x = 0,則選擇 z 位。

Ch(x, y, z) = (x & y) ^ (~x & z) Majority (maj.rb)

該函數(shù)返回的是三個(gè) bits 中的多數(shù)。

Maj(x, y, z) = (x & y) ^ (x & z) ^ (y & z)壓縮 該教程中還介紹了很多有趣的基礎(chǔ)知識,這里不再贅述。我們重點(diǎn)來看哈希函數(shù)的壓縮函數(shù),這也是其核心功能。 對于消息調(diào)度中的每個(gè)詞,我們都使用 “狀態(tài)寄存器” 中的當(dāng)前值來計(jì)算兩個(gè)新的臨時(shí)詞(設(shè)為 T_1 和 T_2)。

Temporary Word 1 (t1.rb)

T1 = Σ1(e) + Ch(e, f, g) + h + Kt + Wt 此臨時(shí)詞將消息調(diào)度中的下一個(gè)單詞與列表中的下一個(gè)常量并在一起運(yùn)行。 Temporary Word 2 (t2.rb)

T2 = Σ0(a) + Maj(a, b, c) 通過將狀態(tài)寄存器中第一個(gè)值Σ_0 進(jìn)行旋轉(zhuǎn),與前三個(gè)寄存器中的 Majority 的值相加來計(jì)算這個(gè)臨時(shí)詞。 壓縮 (compression.rb)

在計(jì)算了兩個(gè)臨時(shí)詞之后,將狀態(tài)寄存器中的值移至下一個(gè)位置,并更新寄存器: 狀態(tài)寄存器中的第一個(gè)值變?yōu)?T_1 + T_2,同時(shí)狀態(tài)寄存器中的第五個(gè)值已添加了 T_1。 這即是一輪壓縮,對于信息調(diào)度中的每個(gè)詞該過程都會重復(fù)一次。 在壓縮了整個(gè)消息調(diào)度之后,我們將得到的哈希值添加到初始哈希值中,由此得出消息塊的最終哈希值。 但如果還有其他消息塊要處理,則將當(dāng)前哈希值在下一次壓縮中用作初始哈希值。如下圖所示:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98044
  • 哈希函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    9747

原文標(biāo)題:對SHA-256感到好奇?這個(gè)項(xiàng)目教你如何可視化哈希函數(shù)的工作原理

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    OPC UA 服務(wù)端用戶認(rèn)證的底層邏輯:哈希與加鹽應(yīng)用詳解

    用戶信息至關(guān)重要。本文不涉及復(fù)雜的代碼實(shí)現(xiàn),而是通過分析典型服務(wù)端配置文件中的相關(guān)機(jī)制,闡述哈希算法(SHA-256)與加鹽(Salt)機(jī)制在OPCUA登錄環(huán)節(jié)的具
    的頭像 發(fā)表于 01-15 17:29 ?144次閱讀
    OPC UA 服務(wù)端用戶認(rèn)證的底層邏輯:<b class='flag-5'>哈希</b>與加鹽應(yīng)用詳解

    MOS管到底是什么?和三極管、繼電器有什么本質(zhì)區(qū)別?

    MOS管到底是什么?和三極管、繼電器有什么本質(zhì)區(qū)別?在電子設(shè)備的“心臟”部位,藏著許多默默工作的“開關(guān)選手”。它們操控著電流的通斷,決定著設(shè)備的效率與穩(wěn)定性。其中,MOS管作為近年來高頻
    的頭像 發(fā)表于 01-07 13:46 ?530次閱讀
    MOS管<b class='flag-5'>到底是</b>什么?和三極管、繼電器有什么本質(zhì)區(qū)別?

    IGBT到底是什么?-從名稱入手來帶您了解

    對于工作需要用到IGBT、但從未專業(yè)學(xué)習(xí)過IGBT的人來說, IGBT到底是什么、它為什么叫IGBT、它的核心關(guān)鍵詞是什么、要怎么理解它 等一系列問題并無法一次性在某個(gè)地方獲取到,都需要查閱大量的資料,學(xué)習(xí)大量的基礎(chǔ)才能有個(gè)初步的了解。 為了讓更多的人在更少的時(shí)間內(nèi)掌握IGBT,我將在
    的頭像 發(fā)表于 11-25 17:38 ?1518次閱讀
    IGBT<b class='flag-5'>到底是</b>什么?-從名稱入手來帶您了解

    請問Keil中的map文件到底是什么意思?

    Keil中的map文件到底是什么意思?里面是如何進(jìn)行相關(guān)執(zhí)行操作的
    發(fā)表于 11-25 06:59

    Molex OTS零哈希電纜組件技術(shù)解析與應(yīng)用指南

    Molex現(xiàn)成(OTS)零哈希電纜組件是標(biāo)準(zhǔn)分立式電線電纜組件,設(shè)計(jì)用于應(yīng)對電子設(shè)備日益縮小的挑戰(zhàn)。這些電纜組件提供節(jié)省空間的薄型解決方案,具有創(chuàng)新的雙點(diǎn)接觸特性,有2、4、6和8電路尺寸可供選擇
    的頭像 發(fā)表于 11-17 16:44 ?730次閱讀

    單片機(jī)和嵌入式,到底是什么關(guān)系?

    的關(guān)系:什么是單片機(jī)?什么是嵌入式?它們到底是不是一回事?先說說大家最先聽說的那個(gè)詞——單片機(jī)(MCU)。單片機(jī),全稱是MicrocontrollerUnit,顧名思
    的頭像 發(fā)表于 11-14 10:28 ?1502次閱讀
    單片機(jī)和嵌入式,<b class='flag-5'>到底是</b>什么關(guān)系?

    單片機(jī)的差分信號到底是什么?

    差分信號到底是什么?通俗來講,就是驅(qū)動端發(fā)送兩個(gè)等值、反相的信號,接收端通過比較這兩個(gè)電壓的差值來判斷邏輯狀態(tài)“0”還是“1”。 差分信號的產(chǎn)生是由輸入源發(fā)出信號后經(jīng)過緩沖器和倒相器后,所產(chǎn)生
    發(fā)表于 11-12 06:44

    MD5信息摘要算法實(shí)現(xiàn)一(基于蜂鳥E203協(xié)處理器)

    命名為“Q”,則message_var=Q[(32*i):(32*i+31)]。 4、哈希運(yùn)算(Hash Operation) 此部分為MD5算法的核心。MD5有4組主循環(huán),每組的主循環(huán)需要進(jìn)行16輪
    發(fā)表于 10-30 07:18

    IEC 到底是什么?為什么它能影響全球?

    IEC 到底是什么?為什么它能影響全球?
    的頭像 發(fā)表于 09-04 17:07 ?3557次閱讀

    晶振的 “負(fù)載電容” 到底是什么

    負(fù)載電容,到底是什么? 負(fù)載電容,簡單來說,是指晶振的兩條引線連接IC塊內(nèi)部及外部所有有效電容之和,我們可以將其看作晶振片在電路中串接的電容。從更專業(yè)的角度講,它是為了使晶振能夠在其標(biāo)稱頻率下穩(wěn)定
    的頭像 發(fā)表于 07-25 16:26 ?1065次閱讀

    高光譜相機(jī)是如何在生產(chǎn)線上發(fā)現(xiàn)“肉眼看不見”的問題?

    光譜相機(jī)到底是怎么看見“看不見”的?它又是如何在生產(chǎn)線上派上用場的?這篇文章我們就來聊聊這個(gè)話題。 一、什么是高光譜相機(jī)? 我們先簡單理解一下高光譜相機(jī)和普通相機(jī)的區(qū)別。 普通相機(jī)捕捉的是紅、綠、藍(lán)三種顏色的組合
    的頭像 發(fā)表于 07-23 14:26 ?505次閱讀

    請問編譯純r(jià)tos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?

    編譯純r(jià)tos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?
    發(fā)表于 07-11 07:22

    智能盒子到底是什么東西?昇騰310深度測評:為何能成為行業(yè)新寵?

    讓人摸不著頭腦的“智能盒子”。各位搞技術(shù)、搞工程的朋友,咱們在工作中是不是經(jīng)常聽到“智能盒子”這個(gè)說法?每次聽到這個(gè)詞,我猜很多人心里都在犯嘀咕:這東西到底是個(gè)啥玩意兒?難道就是個(gè)裝了點(diǎn)智能軟件的普通盒子?它到底有啥用?能給咱們的工作帶來啥方便?
    的頭像 發(fā)表于 04-27 10:46 ?1884次閱讀
    智能盒子<b class='flag-5'>到底是</b>什么東西?昇騰310深度測評:為何能成為行業(yè)新寵?

    一文給你講透!DA板卡到底是什么?它和主板又有哪些不同?

    大家好,我是老王,在電子行業(yè)干了十幾年,今天我就用“大白話”給大家講講DA板卡到底是啥,它和咱們常說的“主板”有啥區(qū)別。文章里會穿插一些表格和實(shí)際案例,保證你讀完不僅能懂,還能跟朋友吹牛!
    的頭像 發(fā)表于 04-24 16:48 ?2371次閱讀
    一文給你講透!DA板卡<b class='flag-5'>到底是</b>什么?它和主板又有哪些不同?

    使用燒錄器STLINK V3 mini的時(shí)候,發(fā)現(xiàn)14PIN的接口上面有一個(gè)GNDDETECT PIN,Type是輸出結(jié)構(gòu),這個(gè)PIN到底是干啥用的?

    我在使用燒錄器STLINK V3 mini的時(shí)候,發(fā)現(xiàn)14PIN的接口上面有一個(gè)GNDDETECT PIN,Type 是輸出結(jié)構(gòu),我想知道這個(gè)PIN到底是干啥用的?要怎么接才合理?
    發(fā)表于 03-14 09:39