SHA256是安全散列算法SHA(Secure Hash Algorithm)系列算法之一,其摘要长度为256bits,即32个字节,故称SHA256。SHA系列算法是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。下面介绍该算法计算消息摘要的原理。

对于任意长度(按bit计算)的消息,SHA256都会产生一个32个字节长度数据,称作消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据是否发生改变,即验证其完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。
  SHA算法有如下特性:1.不可以从消息摘要中复原信息;2.两个不同的消息不会产生同样的消息摘要。
  一、术语和概念
  (一)位(Bit),字节(Byte)和字(Word)
  SHA始终把消息当成一个位(bit)字符串来处理。本文中,一个“字”(Word)是32位,而一个“字节”(Byte)是8位。比如,字符串“abc”可以被转换成一个位字符串:01100001 01100010 01100011。它也可以被表示成16进制字符串:0x616263.
   二、SHA256算法描述
  (一)补位
  信息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补位后的消息长度)Q2 = 448。即使长度已经满足对512取模后余数是448,补位也必须要进行。
  补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位。以信息“abc”为例显示补位的过程。
  原始信息:01100001 01100010 01100011
  补位第一步:0110000101100010 01100011 1
  首先补一个“1”
  补位第二步:0110000101100010 01100011 10…..0
  然后补423个“0”
  我们可以把最后补位完成后的数据用16进制写成下面的样子
  61626380 0000000000000000 00000000
  00000000 0000000000000000 00000000
  00000000 0000000000000000 00000000
  00000000 00000000
  现在,数据的长度是448了,我们可以进行下一步操作。
  (二)补长度
  所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常用一个64位的数据来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0。在进行了补长度的操作以后,整个消息就变成下面这样了(16进制格式)
  61626380 0000000000000000 00000000
  00000000 0000000000000000 00000000
  00000000 0000000000000000 00000000
  00000000 0000000000000000 00000018
  如果原始的消息长度超过了512,我们需要将它补成512的倍数。然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。
  (三)使用的常量
  在SHA256算法中,用到64个常量,这些常量是对自然数中前64个质数的立方根的小数部分取前32bit而来。这64个常量如下:
    428a2f98 71374491 b5c0fbcf e9b5dba5 
        3956c25b 59f111f1 923f82a4 ab1c5ed5 
        d807aa98 12835b01 243185be 550c7dc3 
        72be5d74 80deb1fe 9bdc06a7 c19bf174 
        e49b69c1 efbe4786 0fc19dc6 240ca1cc 
        2de92c6f 4a7484aa 5cb0a9dc 76f988da 
        983e5152 a831c66d b00327c8 bf597fc7 
        c6e00bf3 d5a79147 06ca6351 14292967 
        27b70a85 2e1b2138 4d2c6dfc 53380d13 
        650a7354 766a0abb 81c2c92e 92722c85 
        a2bfe8a1 a81a664b c24b8b70 c76c51a3 
        d192e819 d6990624 f40e3585 106aa070 
        19a4c116 1e376c08 2748774c 34b0bcb5  
        391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3 
        748f82ee 78a5636f 84c87814 8cc70208 
        90befffa a4506ceb bef9a3f7 c67178f2
 
  (四)需要使用的函数
   CH(x, y, z) = (x AND y) XOR ( (NOT x) AND z)  
        MAJ( x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)  
        BSIG0(x) = ROTR^2(x) XOR ROTR^13(x) XOR ROTR^22(x)  
        BSIG1(x) = ROTR^6(x) XOR ROTR^11(x) XOR ROTR^25(x)  
        SSIG0(x) = ROTR^7(x) XOR ROTR^18(x) XOR SHR^3(x)  
        SSIG1(x) = ROTR^17(x) XOR ROTR^19(x) XOR SHR^10(x) 
        其中x、y、z皆为32bit的字。
        ROTR^2(x)是对x进行循环右移2位。
 
  (五)计算消息摘要
        基本思想:就是将消息分成N个512bit的数据块,哈希初值H(0)经过第一个数据块得到H(1),H(1)经过第二个数据块得到H(2),......,依次处理,最后得到H(N),然后将H(N)的8个32bit连接成256bit消息摘要
        I、哈希初值H(0)
        SHA256算法中用到的哈希初值H(0)如下
        H(0)0 = 6a09e667 
        H(0)1 = bb67ae85  
        H(0)2 = 3c6ef372 
        H(0)3 = a54ff53a 
        H(0)4 = 510e527f 
        H(0)5 = 9b05688c 
        H(0)6 = 1f83d9ab 
        H(0)7 = 5be0cd19
注:这些初值是对自然数中前8个质数3、5、7、11等的平方根的小数部分取前32bit而来。
       
        II、 计算过程中用到的三种中间值
        1、64个32bit字的message schedule标记为w0、w1、…、w63。
        2、8个32bit字的工作变量标记为a、b、c、d、e、f、g。
        3、包括8个32bit字的哈希值标记为H(i)0、…、H(i)7。
       
        III、 工作流程
        原始消息分为N个512bit的消息块。每个消息块分成16个32bit的字标记为M(i)0、M(i)1、M(i)2、…、M(i)15然后对这N个消息块依次进行如下处理
        For i=1 to N
     1)   For t = 0 to 15 
                     Wt = M(i)t 
                 For t = 16 to 63 
                     Wt = SSIG1(W(t-2)) + W(t-7) + SSIG0(t-15) + W(t-16) 
         2)  a = H(i-1)0 
                b = H(i-1)1 
                c = H(i-1)2 
                d = H(i-1)3 
                e = H(i-1)4 
                f = H(i-1)5 
                g = H(i-1)6 
                h = H(i-1)7
         3)For t = 0 to 63 
                    T1 = h + BSIG1(e) + CH(e,f,g) + Kt + Wt 
                    T2 = BSIG0(a) + MAJ(a,b,c) 
                    h = g
                    g = f 
                    f = e 
                    e = d + T1 
                    d = c 
                    c = b 
                    b = a 
                    a = T1 + T2
 
           4)H(i)0 = a + H(i-1)0 
                 H(i)1 = b + H(i-1)1 
                 H(i)2 = c + H(i-1)2 
                 H(i)3 = d + H(i-1)3 
                 H(i)4 = e + H(i-1)4 
                 H(i)5 = f + H(i-1)5  
                 H(i)6 = g + H(i-1)6 
                 H(i)7 = h + H(i-1)7
对N个消息块依次进行以上四步操作后将最后得到的H(N)0、H(N)1、H(N)2、…、H(N)7串联起来即可得到最后的256bit消息摘要。
 
    三、SHA算法安全吗?
        2013年9月10日美国约翰霍普金斯大学的计算机科学教授,知名的加密算法专家,Matthew Green被NSA要求删除他的一份关于破解加密算法的与NSA有关的博客。 同时约翰霍普金斯大学服务器上的该博客镜像也被要求删除。但当记者向该大学求证时,该校称从未收到来自NSA的要求要删除博客或镜像的资料,但记者却无法在原网址再找到该博客。幸运的是,从谷歌的缓存可以找到该博客。该博客提到NSA每年花费2.5亿美元来为自己在解密信息方面获取优势,并列举了NSA的一系列见不得人的做法。在BitcoinTalk上,已经掀起了一轮争论:到底SHA256是否安全?
         部分认为不安全的观点包括:
NSA制造了sha256, 我们不相信NSA,他们不可能不留后门。
棱镜事件已经明白的告诉我们,政府会用一切可能的手段来监视与解密。
虽然有很多人会研究SHA-2,且目前没有公开的证据表明有漏洞。但没有公开这并不能代表就没有,因为发现漏洞的人一定更倾向于保留这个秘密来自己利用,而不是公布。
部分认为安全的观点包括:
SHA-2是应用广泛的算法,应该已经经历了实践的检验。
美国的对头中国和俄国都有很多杰出的数学家,如果有问题的话,他们肯定已经发现了。

如果真的不安全,世界上安全的东西就太少了,我不能生活在提心吊胆里,所以我选择相信安全。

http://blog.sina.com.cn/s/blog_d66494300102wz0z.html

SHA256安全散列算法相关推荐

  1. SHA256安全散列算法的Javascript实现

    SHA256算法原理详解: https://blog.csdn.net/u011583927/article/details/80905740 在网上找的javascript实现,代码作者信息: ht ...

  2. 散列算法 SHA-1,SHA-2和SHA-256之间的区别

    随着SSL证书的普及,以"SHA"开头的算法的知名度也越多越高,但并不是很多人能够完全能分清"SHA"所有的算法,本文将会围绕"SHA"展开 ...

  3. 散列算法比较:MD5、SHA1、SHA256有哪些区别

    在信息安全领域,经常会用到MD5.SHA1.SHA256算法.这三种算法都属于散列算法,或者叫作哈希算法.它们具有输入任意长度,输出长度固定,以及单向性(无法根据散列值还原出消息)的特点.那么,MD5 ...

  4. 消息认证之SHA散列算法族

    消息认证--安全散列算法SHA(Secure Hash Algorithm) 一. 消息认证 对要传递的消息进行加密有两个目的,其一是防止消息被消息发送者和消息接收者之外的第三者窃听(被动攻击),在之 ...

  5. 散列算法和数字签名笔记

    散列算法与数字签名 在RSA加密中,如果A是发送方,B是接受方,则A用B的公钥加密信息,而B可以用自己的私钥解密信息,从而达到保密传输的作用. 但是在数字签名技术中,这个过程恰好是反过来的,即:A是发 ...

  6. 安全散列算法(SHA、SHA1)简述

    参考: http://zh.wikipedia.org/zh-cn/SHA1 http://msdn.itellyou.cn/help.htm 安全散列算法(Secure Hash Algorithm ...

  7. 散列算法进行数据验证与加密

    散列算法进行数据验证与加密 散列算法 散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度.加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息.任何输入信息的变化 ...

  8. 对称密码、非对称密码、散列算法与PKI

    对称密码.非对称密码.散列算法与PKI 密码学要解决的问题:机密性.完整性.身份验证(抗抵赖性): 一.对称密码: 对称密码技术:发件人和收件人使用其共同拥有的单个密钥 ,这种密钥既用于加密,也用于解 ...

  9. 通俗解释对称加密、非对称加密、散列算法与PKI

    这是我前些年写在51的,现在转过来,其实是CISSP的学习笔记,用自己的语言组织起来的,用通俗的话说明对称加密.非对称加密.散列算法.PKI(CA)到底都是干啥的.OK,进入主题: 密码学要解决的问题 ...

最新文章

  1. Lambda的Lambda(如果可选)
  2. python使用selenium_如何在python中使用selenium的示例
  3. php mysql 排序规则_php 数组排序以及按照某个字段排序
  4. AJAX(XMLHttpRequest)进行跨域请求方法详解(三)
  5. Android View体系‘铁三角‘
  6. VMware Workstation 启动报错
  7. AT89S52单片机之定时器/计数器
  8. 手提电脑无法管理计算机,细说笔记本键盘无法输入怎么办
  9. 计算机视觉论文-2021-06-08
  10. 反相放大电路反馈电阻上并联电容的作用 [转载]
  11. 倒计时软件app排行榜前十名中敬业签超好用
  12. Matlab图片预处理——截取图片中有效部分保存在其余文件夹下
  13. C语言数字图像处理进阶---9 马赛克滤镜
  14. 博士申请 | 杜克大学徐攀老师招收机器学习/人工智能方向全奖博士生
  15. 稻盛和夫:只有极度认真工作,才能扭转人生!
  16. ApacheCN《Sklearn 与 TensorFlow 机器学习实用指南》 第11章 项目训练深层神经网络(梯度消失与梯度爆炸,选择初始化,选择激活函数)
  17. 基于OHCI的USB主机——UFI读容量命令(ReadCapacity)
  18. Java 基础夯实2:全面了解异常
  19. 为什么c语言会入门到入土,大整数从入门到入土
  20. 《Adobe Illustrator CS4中文版经典教程》—第0课0.15节创建剪切蒙版

热门文章

  1. 腾讯云上午突发故障 称运营商光缆中断所致
  2. android的文件操作,Android文件操作概要1.ppt
  3. 成功解决KeyError: “Passing list-likes to .loc or [] with any missing labels is no longer supported. The
  4. Interview:算法岗位面试—10.15上午—上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴
  5. TF之TFSlim:利用经典VGG16模型(InceptionV3)在ImageNet数据集基础上训练自己的五个图像类别数据集的训练过程记录
  6. CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下
  7. OS_CORE.C(2)
  8. 1.8 ionic3入门——测滑菜单(side menu)中的界面跳转
  9. Delphi设置表格样式
  10. C++ 使用消息派遣类解决处理消息判断