sha256 加密算法
sha256 加密算法
go 調(diào)用 sha256 加密
字符串哈希值
package mainimport("fmt""crypto/sha256""io""log""os" )func main() {// 第一種調(diào)用方法sum := sha256.Sum256([]byte("hello world\n"))fmt.Printf("%x\n", sum)// 第二種調(diào)用方法h := sha256.New()h.Write([]byte("hello world\n"))fmt.Printf("%x\n", h.Sum(nil)) }文件哈希值
// 對文件加密f, err := os.Open("test.txt")if err != nil {log.Fatal(err)}defer f.Close()h = sha256.New()if _, err := io.Copy(h, f); err != nil {log.Fatal(err)}fmt.Printf("%x\n", h.Sum(nil))源碼下載:https://github.com/didianV5/blockchain/tree/master/encryption/sha256
sha256 實(shí)現(xiàn)原理
SHA-256 算法輸入報(bào)文的最大長度不超過2^64 bit,輸入按512-bit 分組進(jìn)行處理,產(chǎn)生的輸出是一個(gè)256-bit 的報(bào)文摘要。
附加填充比特:對報(bào)文進(jìn)行填充使報(bào)文長度與448 模512 同余(長度=448 mod 512),填充的比特?cái)?shù)范圍是1 到512,填充比特串的最高位為1,其余位為0。就是先在報(bào)文后面加一個(gè) 1,再加很多個(gè)0,直到長度 滿足 mod 512=448.為什么是448,因?yàn)?48+64=512. 第二步會(huì)加上一個(gè) 64bit的 原始報(bào)文的 長度信息。
附加長度值 將用64-bit 表示的初始報(bào)文(填充前)的位長度附加在步驟1 的結(jié)果后(低位字節(jié)優(yōu)先)。
初始化緩存:使用一個(gè)256-bit 的緩存來存放該散列函數(shù)的中間及最終結(jié)果。 該緩存表示為
const (init0 = 0x6A09E667init1 = 0xBB67AE85init2 = 0x3C6EF372init3 = 0xA54FF53Ainit4 = 0x510E527Finit5 = 0x9B05688Cinit6 = 0x1F83D9ABinit7 = 0x5BE0CD19 )處理512-bit(16 個(gè)字)報(bào)文分組序列:該算法使用了六種基本邏輯函數(shù),由64步迭代運(yùn)算組成。每步都以256-bit 緩存值A(chǔ)BCDEFGH 為輸入,然后更新緩存內(nèi)容。 每步使用一個(gè)32-bit 常數(shù)值Kt 和一個(gè)32-bit Wt。
- 常數(shù)K為
- Wt 是 分組之后的報(bào)文
- 64步迭代運(yùn)算
生成256-bit的報(bào)文摘要 所有的512-bit分組處理完畢后,對于SHA-256算法最后一個(gè)分組產(chǎn)生的輸出便是256-bit的報(bào)文摘要。
dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4], dig.h[5], dig.h[6], dig.h[7] = h0, h1, h2, h3, h4, h5, h6, h7
源碼下載
源碼地址: https://github.com/didianV5/blockchain/tree/master/encryption/sha256/source
總結(jié)
以上是生活随笔為你收集整理的sha256 加密算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JESD204B IP核的配置与使用
- 下一篇: 企业上软件,选择ERP还是ERC