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为
    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,
    }
    • Wt 是 分组之后的报文
    for i := 0; i < 16; i++ {j := i * 4w[i] = uint32(p[j])<<24 | uint32(p[j+1])<<16 | uint32(p[j+2])<<8 | uint32(p[j+3])}for i := 16; i < 64; i++ {v1 := w[i-2]t1 := (v1>>17 | v1<<(32-17)) ^ (v1>>19 | v1<<(32-19)) ^ (v1 >> 10)v2 := w[i-15]t2 := (v2>>7 | v2<<(32-7)) ^ (v2>>18 | v2<<(32-18)) ^ (v2 >> 3)w[i] = t1 + w[i-7] + t2 + w[i-16]}
    
    • 64步迭代运算
    for i := 0; i < 64; i++ {t1 := h + ((e>>6 | e<<(32-6)) ^ (e>>11 | e<<(32-11)) ^ (e>>25 | e<<(32-25))) + ((e & f) ^ (^e & g)) + _K[i] + w[i]t2 := ((a>>2 | a<<(32-2)) ^ (a>>13 | a<<(32-13)) ^ (a>>22 | a<<(32-22))) + ((a & b) ^ (a & c) ^ (b & c))h = gg = ff = ee = d + t1d = cc = bb = aa = t1 + t2}h0 += ah1 += bh2 += ch3 += dh4 += eh5 += fh6 += gh7 += h
  • 生成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 加密算法相关推荐

  1. mds算法python函数_分享python mds,sha256加密算法,c#对应sha256加密算法

    ''' 引入hmac,hashlib加密模块 ''' import hmac import hashlib def jm_sha256(key, value): ''' sha256加密 return ...

  2. html5 sha1,JavaScript SHA-256加密算法详细代码

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. /* * A JavaScript implementation of the Secur ...

  3. linux使用sha256加密算法,我可以使用Crypto++来解密aes-cbc-essiv:sha256(该文件由linux dm-crypt加密)...

    有没有人不得不使用Crypto ++解密文件,使用aes-cbc-essiv:sha256加密linux dm-crypt? 我试图用下面的代码来解密文件. 但这是不正确的. 有没有人有过之前的经验? ...

  4. SHA256加密算法

    概述 对于任意长度的消息,SHA256都会产生一个256位的哈希值,称作消息摘要.这个摘要相当于四个长度为32个字节的数组,通常有一个长度为64的十六进制字符串来表示,其中1个字节=8位,一个十六进制 ...

  5. SHA-256、HMAC-SHA256加密算法工具类

    public class CryptoUtils {private static final String SHA_256 = "SHA-256";private static f ...

  6. 如何应对SHA-1加密算法升级为SHA-256

    经过权威机构证实,sha1加密算法的不安全性越来越高,sha指纹造假成本越来越低,随即微软.谷歌等IT巨头相继发布弃用sha1加密算法声明,第三方认证机构自2016年1月1日起,将全面停止签发SHA1 ...

  7. DotNet中几种常用的加密算法

    在.NET项目中,我们较多的使用到加密这个操作.因为在现代的项目中,对信息安全的要求越来越高,那么多信息的加密就变得至关重要.现在提供几种常用的加密/解密算法. 1.用于文本和Base64编码文本的互 ...

  8. 使用 JavaScript 实现 SHA256 以及 HMAC-SHA256

    文章目录 背景 HMAC-SHA256 SHA256 背景 最近在一些前端低代码平台开发过程中,需要用到 sha256 加密算法,但是不会用低代码平台的导库,特意从网上找一些纯 js 实现的算法备用. ...

  9. 常见的加密算法及详解都在这里!

    加密算法,是现在每个软件项目里必须用到的内容.广泛应用在包括了用户登入.数字签名.数据传输等多个场合.那大家都知道那些呢?今天我把常见的加密算法全部整理在这里,供大家学习参考. 首先,大家要知道加密算 ...

最新文章

  1. 记一次网络问题的排查
  2. 服务器无法通过系统非页面共享区来进行分配,因为共享区当前是空的解决办法.供参考....
  3. 关于小程序取data- 的值的问题
  4. 百万奖金!交通事件、医学病理、广告检测,江苏大数据开发与应用大赛报名...
  5. 解题报告 Valentine‘s seat
  6. neu坐标系和xyz坐标系转换_ArcGIS投影坐标系下坐标转换成地理坐标系经纬度
  7. mysqld_multi单机启动多个mysql
  8. 在搭载苹果M芯片的 Mac 上重新安装 macOS 时收到个性化错误怎么办?
  9. Linux终端、控制台复制粘贴
  10. 掘金mysql_MySQL学习笔记(转自掘金小册 MySQL是怎样运行的,版权归作者所有!)
  11. 联想Y7000装双系统win10+Ubuntu16.04后在Ubuntu上Wifi被禁用的解决办法
  12. h5制作导出html,H5制作工具Hype的导出功能详解
  13. curl的HTTP参数速查表
  14. JS 缓存: Service Worker 实现离线应用
  15. AM335x硬件开发使用指南(一)
  16. markdown编辑器。
  17. CMW500 Bluetooth信令测试
  18. Android签名打包报错:Conversion to Dalvik fromat failed with error 1
  19. 和我一起学Python,一起采集妹子图
  20. java pdf 报表_关于Java向PDF模板写入数据,以及java制作pdf报表的问题

热门文章

  1. php浮点数取小数点两位小数,用小数点后两位数字打印PHP浮点数? - php
  2. 机器人运动估计——IMU运动方程与ESKF原理介绍(下)
  3. 我是佛前的一粒佛珠(请听配乐)
  4. 服务器部署邮件功能_真正连续部署的功能标志
  5. idea跑android项目报A problem occurred configuring project ‘:app‘
  6. java.sql.SQLException: Access denied for user ‘xxx‘@‘localhost‘ (using password: YES)
  7. Python与单片机通信——serial库
  8. layui-vertify不生效
  9. 【图像加密】基于matlab GUI正交拉丁方置乱+混沌图像加密解密【含Matlab源码 636期】
  10. 教你怎么学习Java