在位元幣中錢包位址的產生過程中用到了一種叫做sha256的雜湊演算法,sha-256是sha-1演算法的改進版本,前不久,google安全部落格上發不了世界上第一例公開的sha-1雜湊碰撞例項,證明sha-1已經不安全了,而作為sha-1改進版本的sha-256演算法暫時還是安全的。不得不佩服中本聰在最初設計位元幣時選擇了更加安全的sha-256演算法。
sha-256演算法的實現過程如下所示:
對任何長度的報文(就是你要加密的資訊),計算出來都是乙個32 byte的結果,稱之為摘要。等你拿到報文和摘要之後,對報文進行sha-256演算法,把計算出的結果和收到的摘要比對,如果一樣,就說明報文在傳輸過程中沒有被改。
sha-256演算法輸入報文的最大長度不超過2^64 bit,輸入按512-bit分組進行處理,產生
的輸出是乙個256-bit的報文摘要。該演算法處理包括以下幾步:
step1:
附加填充位元。
對報文進行填充使報文長度與448 模512 同餘(長度=448 mod 512),
填充的位元數範圍是1 到512,填充位元串的最高位為1,其餘位為0。
就是先在報文後面加乙個 1,再加很多個0,直到長度滿足mod 512=448.
為什麼是448,因為448+64=512. 第二步會加上乙個 64bit的原始報文的 長度資訊。
step2:附加長度值。
將用64-bit 表示的初始報文(填充前)的位長度附加在步驟1的結果
後(低位位元組優先)。
step3:初始化快取。
使用乙個256-bit 的快取來存放該雜湊函式的中間及最終結果。
該快取表示為a=0x6a09e667 , b=0xbb67ae85 , c=0x3c6ef372 , d=0xa54ff53a,
e=0x510e527f , f=0x9b05688c , g=0x1f83d9ab , h=0x5be0cd19 。
step4:處理512-bit(16 個字)報文分組序列。
該演算法使用了六種基本邏輯函式,由64
步迭代運算組成。每步都以256-bit 快取值abcdefgh 為輸入,然後更新快取內容。
每步使用乙個32-bit 常數值kt 和乙個32-bit wt。
就像上圖一樣,參與運算的都是 32bit的數,wt是分組之後的報文,512 bit=32bit*16. 也就是 wt t=1,2..16 由該組報文產生。wt t=17,18,..,64 由前面的wt按遞推公式計算出來。
kt t=1,2..64 是已知的常數。
上面的計算就是不斷更新 a,b,c…h這 32bit*8 。在每個512bit的分組裡面迭代計算64次。
Openssl中的sha1和sha256教程
sha1庫是一種雜湊演算法,用以生成結果為160bit的資料摘要,即20個位元組。sha256結果為256bit,即32個位元組。摘要的意思是,抽象為任意大小的資料為固定長度資料,結果是由於全部原始資料經過計算得出,逆推則無法計算除準確結果。摘要的特性 由於以上特性,sha雜湊被廣泛用於軟體工程中。...
crypto js計算檔案的sha256值
1.要在瀏覽器中計算出檔案的sha256或md5值,基本思路就是使用html5的filereader介面把檔案讀取到記憶體 readasarraybuffer 然後獲取檔案的二進位制內容,然後獲取檔案的shaa256或md5值。2.arraybuffer是一塊記憶體,arraybuffer物件被用來...
OpenSSL生成自簽名的sha256泛網域名稱證書
環境 centos 6.8 x86 64 安裝openssl openssl devel cp etc pki tls openssl.cnf openssl.cnf 修改openssl.cnf req distinguished name req distinguished name defaul...