在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Hash算法簡介

lviY_AI_shequ ? 來源:未知 ? 作者:胡薇 ? 2018-06-08 14:01 ? 次閱讀

一、Hash算法的身影

可以看到,在生成比特幣地址(《精通比特幣》第4章提到),以及生成區塊唯一標識(《精通比特幣》第7章提到):區塊Hash值時(即挖礦的過程),都使用了Hash算法,特別是SHA256算法。比特幣系統本身也就是加密算法的衍生物。

二、SHA256算法過程

本文主要簡述一下SHA256算法的過程,下一篇會大概說一下它的理論基礎。

1. 輸入信息x

SHA256要求報文長度不超過2^64bit。

2. 補位

因為采用的是分組加密的方法,每組長度是512bit,而原始的信息x,不一定是512的倍數,也就是說不一定能剛好分成每組都是512bit的情況。這時候需要補位。

在x后面先補一個1,然后再補多個0,一直到總長度(x以及補的位數)模512是448

3. 補長度

為什么第二步不直接把總長度補到512的倍數呢,因為后面還要補64位,記錄原始信息x的位數。(64 + 448) % 512 = 0。可以看到,只有64位表示原始信息x的位數,所以x的最大長度是2^64。

4. 計算Hash值

前面已經將消息補成了512的倍數,總長度變為512 * N。計算hash值的基本思想是:先將處理完的消息分成N個512bit的數據塊:M[1],M[2],……,M[N],然后一塊一塊的處理:哈希初值H[0]經過第一個數據塊M[1]得到H[1],H[1]經過第二個數據塊M[2]得到H[2],……,依次處理,最后得到H[N]。每個哈希值,比如H[0],由8個32bit組成,32bit又稱為字,也就是說每個hash值都由8個字組成。最后將H[N]的8個字連接成256bit(8 * 32 bit)的最終值。至于為什么可以這么做,我們下一篇再介紹,先看流程。

1) 哈希初值H[0]

SHA256算法中用到的哈希初值H[0](共有8個32bit)為:

H[0][0] = 0x6A09E667

H[0][1] = 0xBB67AE85

H[0][2] = 0x3C6EF372

H[0][3] = 0xA54FF53A

H[0][4] = 0x510E527F

H[0][5] = 0x9B05688C

H[0][6] = 0x1F83D9AB

H[0][7] = 0x5BE0CD19

0x表示的是十六進制,十六進制中一位表示4bit。

注:這些初值是對自然數中前8個質數2、3、5、7、11等的平方根的小數部分取前32bit而來。

2) 循環計算

# M的下標從1開始,M即為M[1], ..., M[N]

for i in range(1, N + 1):

# 第一步,先根據16個32bit的原始消息,生成64個32bit

W = [0] * 64

for t in range(0, 64):

if t < 16:

W[t] = M[i][t]

else:

W[t] = SSIG1(W[t - 2]) + W[t-7] + SSIG0(W[t-15]) + W[t-16]

# 第二步,將上次的hash值,也就是8個32bit,賦值到8個臨時變量,用這8個臨時變量計算

# 原本的hash值在本輪結束的時候仍然需要使用

a = H[i - 1][0]

b = H[i - 1][1]

c = H[i - 1][2]

d = H[i - 1][3]

e = H[i - 1][4]

f = H[i - 1][5]

g = H[i - 1][6]

h = H[i - 1][7]

# 第三步,執行散列計算,內循環是64輪,使用了上面的64個W,以及提前定義好的64個K

for t in range(0, 64):

t1 = h + BSIG1(e) + CH(e, f, g) + K[t] + W[t]

t2 = BSIG0(a) + MAJ(a,b,c)

h = g

g = f

f = e

e = d + t1

d = c

c = b

b = a

a = t1 + t2

# 第四步,將本輪經過64個內循環新計算的臨時值和上次的hash值求和,作為本輪最終的hash值

H[i][0] = a + H[i - 1][0]

H[i][1] = b + H[i - 1][1]

H[i][2] = c + H[i - 1][2]

H[i][3] = d + H[i - 1][3]

H[i][4] = e + H[i - 1][4]

H[i][5] = f + H[i - 1][5]

H[i][6] = g + H[i - 1][6]

H[i][7] = h + H[i - 1][7]

# 最終H[N]的8個32bit返回,即為該消息的SHA256結果

3) 函數和常量說明

(1) 64個常量K為:

K = [

0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,

0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,

0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,

0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,

0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,

0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,

0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,

0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]

注:這些常數的取值是從自然數中前64個質數的立方根的小數部分取前32bit而來的。

(2) 利用到的函數為:

# 本段代碼沒有使用python語法

CH(x, y, z) = (x AND y) XOR ((NOT x) AND z)

MAJ(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)

BSIG0(x) = ROTR^2(x) XOR ROTR^13(x) XOR ROTR^22(x)

BSIG1(x) = ROTR^6(x) XOR ROTR^11(x) XOR ROTR^25(x)

SSIG0(x) = ROTR^7(x) XOR ROTR^18(x) XOR SHR^3(x)

SSIG1(x) = ROTR^17(x) XOR ROTR^19(x) XOR SHR^10(x)

其中,除了與或非外,XOR是異或, ROTR^n是循環右移n位,SHR^n是右移n位。

三、總結

上面就是SHA256的計算過程。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Hash算法
    +關注

    關注

    0

    文章

    43

    瀏覽量

    7398
  • 比特幣
    +關注

    關注

    57

    文章

    7005

    瀏覽量

    140735

原文標題:區塊鏈系列--比特幣 (3):區塊鏈中的Hash算法

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于Rust語言Hash特征的基礎用法和進階用法

    是一種通用的哈希算法,用于將任意類型的數據轉換為固定長度的哈希值。下面是一個簡單的示例,演示如何使用Hash trait計
    的頭像 發表于 09-19 16:02 ?1490次閱讀

    1HASH函數在軟件自保護中的應用

    本文介紹了HASH 函數的原理,并重點討論了其中的SHA-1 算法及其在軟件自保護中的應用和實現技術。關鍵詞:HASH 函數軟件保護 信息安全Abstract: This paper introduces the basic t
    發表于 08-07 09:28 ?17次下載

    基于Hash和二叉樹的路由表查找算法

    基于Hash和二叉樹的路由表查找算法 :提出了一種基于Hash和二又樹的路由表查找算法,這一算法可以滿足()C-768的轉發要求,支持超過
    發表于 02-22 17:06 ?35次下載

    Hash校驗工具

    hash
    發表于 03-22 17:14 ?1次下載

    常見的hash算法有哪些及其原理是什么

    Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間
    發表于 12-09 10:25 ?2.6w次閱讀
    常見的<b class='flag-5'>hash</b><b class='flag-5'>算法</b>有哪些及其原理是什么

    基于跳躍hash的對象分布算法

    算法簡潔、高效,支持權值和數據冗余機制.該算法創造性地將節點映射到二維矩陣,對象的分布、定位只需從矩陣的行內、行間計算目標節點的行號和列號即可.理論研究表明,該算法滿足公平性、自適應性、緊湊性、節點變化對象遷移量較小的特點.實驗
    發表于 12-26 10:43 ?0次下載

    什么是hash值與比特幣之間又有什么關系

    hash是什么,有點類似「洗牌」把牌洗亂的概念,只是洗的不是牌,而是一筆數據,這個「洗」的過程是經過嚴謹定義的,且產生的結果會是固定長度的。常見的hash算法有MD5、RIPEMD-160、SHA1
    發表于 01-03 14:15 ?1.2w次閱讀

    基于區塊鏈中的HASH算法解析

    hash算法之前先明確一個基礎的計算機知識,計算機在底層機器碼是采用二進制的模式,所謂二進制簡單來說就是底層以0/1來標識,所有數據傳輸記錄都以010101的模式來存儲記錄,兩種狀態也可認為就是一
    發表于 06-13 11:42 ?1268次閱讀
    基于區塊鏈中的<b class='flag-5'>HASH</b><b class='flag-5'>算法</b>解析

    hash算法的原理和實際應用等幾個角度,對hash算法進行一個講解

    由于hash的原理是將輸入空間的值映射成hash空間內,而hash值的空間遠小于輸入的空間。根據抽屜原理,一定會存在不同的輸入被映射成相同輸出的情況。那么作為一個好的hash
    的頭像 發表于 06-03 17:34 ?3283次閱讀
    從<b class='flag-5'>hash</b><b class='flag-5'>算法</b>的原理和實際應用等幾個角度,對<b class='flag-5'>hash</b><b class='flag-5'>算法</b>進行一個講解

    Hash哈希競猜游戲開發方案(技術詳情)簡介

    Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,哈l8l希2809系2756統競猜模式就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法
    發表于 06-24 10:08 ?517次閱讀

    關于比特幣WK與HASH

    WK實際上就是通過一系列算法,計算出符合要求的哈希值(HASH),從而爭取到記賬權。這個過程實際上就是試錯的過程,一臺計算機每秒產生的隨機HASH碰撞次數越多,先計算出正確HASH的概
    的頭像 發表于 06-29 09:33 ?2018次閱讀

    hash算法在FPGA中的實現(1)

    在FPGA的設計中,尤其是在通信領域,經常會遇到hash算法的實現。hash算法在FPGA的設計中,它主要包括2個部分,第一個就是如何選擇一個好的h
    的頭像 發表于 09-07 17:01 ?1243次閱讀
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b>在FPGA中的實現(1)

    hash算法在FPGA中的實現(2)

    在前面的文章中:hash算法在FPGA中的實現(一)——hash表的組建,記錄了關于hash表的構建,這里記錄另外一個話題,就是hash鏈表
    的頭像 發表于 09-07 17:02 ?840次閱讀
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b>在FPGA中的實現(2)

    hash算法在FPGA中的實現(3)

    在前面的文章中主要介紹了hash表及其鏈表的結構,同時說明了如何讀取表項。那表項是如何寫入的了?前期的文章中有少量的提及,這里單獨寫一篇,介紹兩種常見的方案。
    的頭像 發表于 09-07 17:02 ?794次閱讀
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b>在FPGA中的實現(3)

    HASH算法加密芯片的工作原理及其在STM32 MCU上的應用

    本文主要研究了HASH算法加密芯片的工作原理及其在STM32 MCU上的應用,實現了外部加密芯片對STM32 MCU的程序保護,目前的技術手段無法對其進行破解,其安全性優于其它加密方式。
    的頭像 發表于 10-24 15:01 ?3953次閱讀
    <b class='flag-5'>HASH</b><b class='flag-5'>算法</b>加密芯片的工作原理及其在STM32 MCU上的應用
    主站蜘蛛池模板: 天堂中文资源网| 亚洲另类激情综合偷自拍| bt天堂在线www种子搜索| 国内精品久久久久影| 免费一级毛片女人图片| 美女网色站| 国产亚洲高清在线精品不卡| free性欧美高清另类| 天天干夜夜艹| 国产三级视频| 国产精品久久久久久久久| 69色综合| 俺去啦最新网址| 韩国三级在线不卡播放| 成人在线天堂| 天天爱天天插| 久久久久亚洲香蕉网| bt天堂在线最新版在线| 亚洲一区二区视频| 欧美同性精品xxxx| 亚洲欧美视频在线观看| 一级aaaaaa片毛片在线播放| 色男人的天堂| 黄页网站在线播放| 夜夜福利| 黄色avav| 日本不卡视频在线视频观看| h视频免费在线| 在线 色| 男女午夜剧场| 亚洲一区二区三区在线播放 | 久久久噜久噜久久gif动图| 国产gaysexchina男同men1068| 天天爽夜夜爽人人爽曰喷水| 午夜精品视频在线| 久久久久88色偷偷免费| 久久影视一区| 亚洲系列中文字幕一区二区| 婷婷综合七月激情啪啪| 男女免费在线视频| 天天摸天天操天天干|