在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
SHA256在线验证链接:SHA256 online hash function My Golang github源码 :https://github.com/kumataahh/Golang-toolbox/blob/master/crypto/sha256_source.go SHA256的加密过程归为四个点
初始化常量用作后面对需要加密的信息的处理。 8个哈希初值:自然数中前8个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前32bit而来 64个哈希常量:对自然数中前64个质数(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97…)的立方根的小数部分取前32bit而来。 // golang // 8个哈希初值和64个哈希常量 const ( chunk = 64 init0 = 0x6A09E667 init1 = 0xBB67AE85 init2 = 0x3C6EF372 init3 = 0xA54FF53A init4 = 0x510E527F init5 = 0x9B05688C init6 = 0x1F83D9AB init7 = 0x5BE0CD19 ) var _K = []uint32{ 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, } 信息预处理在想要Hash的消息后面补充需要的信息,使整个消息满足指定的结构。 两个步骤: // step 1 附加填充bit // simple need hash data : "abc" // a,b,c对应的ASCII码分别是97,98,99 // ascii code :01100001 01100010 01100011 // 一串补位操作后,数据为(hex)长度为448 61626380 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 // step 2 附加长度值,用一个64bit数据表示消息长度 // 补长后 61626380 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000018 逻辑运算SHA256散列函数中涉及的操作全部是逻辑的位运算,一系列位运算,包含如下函数:
计算信息摘要step1:消息分解成512-bit大小的块 能分n快就完成n次迭代,n次迭代的结果就是最终的哈希值,即256bit的数字摘要。 step2:8个哈希初值的迭代运算 step3:构造64个字(word) 对于每一块,将块分解为16个32-bit的big-endian的字,记为w[0], …, w[15] 前16个字直接由消息的第i个块分解得到 其余的字由如下迭代公式得到: step4:64次加密循环 ABCDEFGH这8个字(word)在按照一定的规则进行更新
笔记参考:SHA256算法原理详解
|
请发表评论