sha256 加密算法
sha256 加密算法
go 調用 sha256 加密
字符串哈希值
package mainimport("fmt""crypto/sha256""io""log""os" )func main() {// 第一種調用方法sum := sha256.Sum256([]byte("hello world\n"))fmt.Printf("%x\n", sum)// 第二種調用方法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 實現原理
SHA-256 算法輸入報文的最大長度不超過2^64 bit,輸入按512-bit 分組進行處理,產生的輸出是一個256-bit 的報文摘要。
附加填充比特:對報文進行填充使報文長度與448 模512 同余(長度=448 mod 512),填充的比特數范圍是1 到512,填充比特串的最高位為1,其余位為0。就是先在報文后面加一個 1,再加很多個0,直到長度 滿足 mod 512=448.為什么是448,因為448+64=512. 第二步會加上一個 64bit的 原始報文的 長度信息。
附加長度值 將用64-bit 表示的初始報文(填充前)的位長度附加在步驟1 的結果后(低位字節優先)。
初始化緩存:使用一個256-bit 的緩存來存放該散列函數的中間及最終結果。 該緩存表示為
const (init0 = 0x6A09E667init1 = 0xBB67AE85init2 = 0x3C6EF372init3 = 0xA54FF53Ainit4 = 0x510E527Finit5 = 0x9B05688Cinit6 = 0x1F83D9ABinit7 = 0x5BE0CD19 )處理512-bit(16 個字)報文分組序列:該算法使用了六種基本邏輯函數,由64步迭代運算組成。每步都以256-bit 緩存值ABCDEFGH 為輸入,然后更新緩存內容。 每步使用一個32-bit 常數值Kt 和一個32-bit Wt。
- 常數K為
- Wt 是 分組之后的報文
- 64步迭代運算
生成256-bit的報文摘要 所有的512-bit分組處理完畢后,對于SHA-256算法最后一個分組產生的輸出便是256-bit的報文摘要。
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
總結
以上是生活随笔為你收集整理的sha256 加密算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JESD204B IP核的配置与使用
- 下一篇: 企业上软件,选择ERP还是ERC