SHA-256算法实现过程

2023-11-17

整理一下SHA-256的实现步骤:

1.定义8个32位常量

 

h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

 

2.再定义一个k的32位整形数组,数组大小为64    

 

k[0..63] :=
   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

3.将需要编码的文件或字符(代表所有的二进制格式)折分为N个512bit大小的块,

4.补齐上述二进制文件,比如原文件可能是512bit的整数倍,也可能不是512格式的整数倍

    补齐的二进制填充值为:

        a.第一个bit为1

        b.然后加入k个0,k的值取决于最后一个块的大小,k>=0,且使得填入k个0之后,最后一个块达到448bit

        c.加入原始块的长度,用64位big-endian表示

    加入填充值后,二进制文件为512bit的整数倍

    注意,如果原文件最后一个块大于512-1-64位,则多填入0,使用总块数+1,填充的1位于倒数第二个块内,填充的0位于最后两个块内,原始长度位于最后一个块内

5.对每一个块(512bit)进行如下运算:

    注意:以下的运算特指单个块(512位),以第一个块为例

    定义一个w数组,大小为64个元素,每个元素为32bit,w[0..63]

    w[0..15]为该块的原始数据,即将原块折分为16*32的16个32位小块,存放入w[0..15]中

    w[16..64]的运算方式为:

 

    for i from 16 to 63
        s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor(w[i-15] rightshift 3)
        s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor(w[i-2] rightshift 10)
        w[i] := w[i-16] + s0 + w[i-7] + s1

    定义8个32位值a-h

 

    a := h0
    b := h1
    c := h2
    d := h3
    e := h4
    f := h5
    g := h6
    h := h7
    for i from 0 to 63
        s0 := (a rightrotate 2) xor (a rightrotate 13) xor(a rightrotate 22)
        maj := (a and b) xor (a and c) xor(b and c)
        t2 := s0 + maj
        s1 := (e rightrotate 6) xor (e rightrotate 11) xor(e rightrotate 25)
        ch := (e and f) xor ((not e) and g)
        t1 := h + s1 + ch + k[i] + w[i]
        h := g
        g := f
        f := e
        e := d + t1
        d := c
        c := b
        b := a
        a := t1 + t2
    h0 := h0 + a
    h1 := h1 + b
    h2 := h2 + c
    h3 := h3 + d
    h4 := h4 + e
    h5 := h5 + f
    h6 := h6 + g
    h7 := h7 + h

    这样第一个块的h0-h7即运算完毕,然后使用这些值参与第二个块的运算,由此可以看出,后一个块的值要依赖于前一个块的运算结果,补位的串和长度串只参与最后一次块运算

    在运算完毕所有块之后:

 

digest = hash = h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7

    将h0-h7连起来,即为8*32=256位的二进制码,即为最终结果

    在我们的项目中,使用到了一种SHA-256的改进算法,详见:SHA-256算法改进策略 

    https://blog.csdn.net/kcstrong/article/details/81010691

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SHA-256算法实现过程 的相关文章

  • c++项目实战---->QT文件日志输出

    QT说明文档 xff08 输出详细日志 xff09 span class token macro property span class token directive keyword include span span class tok
  • ASR项目实战-数据

    使用机器学习方法来训练模型 xff0c 使用训练得到的模型来预测语音数据 xff0c 进而得到识别的结果文本 xff0c 这是实现语音识别产品的一般思路 本文着重介绍通用语音识别产品对于数据的诉求 对数据的要求 训练集 相关要求 xff0c
  • C#项目实战——Windows计算器的制作【实例】

    参考 C 从入门到项目实践 边学习 边练习实现 Windows计算器的制作 此次练习的计算器应用软件在Visual Studio 2019编程环境中开发 是一个简单的窗体应用程序 实现简单的计算器功能 1 系统功能描述 Windows计算器
  • Awt+Swing+Mysql实现超市商品交易管理系统(含全部代码)

    目录 成果展示 数据库表格准备 绘制窗体以及组件 主窗体 登录面板 上架商品面板 下架商品面板 操作商品面板 数据面板 展示表格 关键技术与思路 与数据库建立连接 对数据库数据进行增删改 查询数据 验证状态 切换面板与点击触发事件 全部代码
  • 十个C语言项目,从小白到月入10K

    每年的就业季都有很多同学惆怅 在校期间没有项目经历 简历一片空白 不知道该怎么写 所以今天为大家盘点了十个C C 项目 由浅入深 可以作为就业或者考研复试的在校项目经历 也可以用作毕业设计 直奔主题 一 通讯管理系统 难度系数 代码量 40
  • 基于MYSQL的互联网药品交易系统数据库设计项目实战

    说明 这是一个数据库课程设计实战项目 附带代码 文档 视频讲解 如需代码 文档 视频讲解可以直接到文章最后获取 项目背景 疫情期间实体经济收到打击 实体药店经营困难 医院也面临着疫情患者的压力运转着 这种情况下更需要网上药店的存在 居民可以
  • 主流安卓APP都中招了!“应用克隆漏洞”的快速检测修复方案

    2018年1月9日 国家信息安全漏洞共享平台发布了关于Android平台WebView控件存在跨域访问高危漏洞的安全公告 漏洞描述 攻击者利用该漏洞 可远程获取用户隐私数据 包括手机应用数据 照片 文档等敏感信息 还可窃取用户登录凭证 在受
  • Python项目实战 —— 05. 小红书达人大盘分析

    Python项目实战 Python项目实战 目录 Python项目实战 05 小红书达人大盘分析 一 背景 二 可视化 三 代码 Python项目实战 目录 Python项目实战 05 小红书达人大盘分析 大家可以关注知乎或微信公众号的sh
  • Linux(CentOS)安装Zookeeper

    前置环境是装好Java环境 然后去zookeeper官网下载 http mirror bit edu cn apache zookeeper 下载好后把压缩包上传到服务器 去到服务器地下解压 tar zxvf apache zookeepe
  • 什么是XSS(跨站)攻击

    XSS 跨站 攻击的概念 XSS又叫CSS Cross Site Script 跨站脚本攻击 它指的是恶意攻击者往Web页面里插入恶意html代码 当用户浏览该页之时 嵌入其中Web里面的html代码会被执行 从而达到恶意用户的特殊目的 X
  • ViewPager两种方式实现无限轮播

    给自己的忠告 虽然轮子很好用 但是使用轮子的前提是 如果不去封装一些复杂的功能 自己会用最基本的方法写一个 不然再好的轮子那也是别人的 当自己项目遇到和轮子不一样的地方 那就只能束手无策或者改人家的源码 当然能看懂轮子的封装思想自己学以致用
  • 如何移植和使用QJson?

    一 QJson库的下载 下载链接 http qjson sourceforge net build 二 使用Qt4 8 Mingw编译QJson 1 解压QJson master压缩包 新建一个QJson目录 将QJson master中的
  • 【项目实战】---需求分析+表关系分析

    SSH 小编初次接触的时候傻傻的以为这个跟SHE有什么关系呢 又是哪路明星歌手 后来才知道小编又土鳖了 原来SSH是这个样子滴 百度百科对她这样阐述 SSH即 Spring Struts Hibernate Struts对Model Vie
  • [华为云云服务器评测] 华为云耀云服务器 Java、node环境配置

    系列文章目录 第一章 linux实战 华为云耀云服务器L实例 Java node环境配置 文章目录 系列文章目录 前言 一 任务拆解 二 修改密码 三 配置安全规则 四 远程登录并更新apt 五 安装 配置JDK环境 5 1 安装openj
  • 基于vspd DLL二次开发的虚拟串口工具

    最近项目需要 早期使用com0com做虚拟串口工具的二次开发 但是发现在系统兼容性上存在很多的问题 后来改用vspd 的免费dll做开发 在稳定性和兼容性上确实提升了很多 功能调用非常简单 可以参照如下的demo 库文件的话自行下载和链接
  • synchronized 与 Lock 的异同

    最近在做一个监控系统 该系统主要包括对数据实时分析和存储两个部分 由于并发量比较高 所以不可避免的使用到了一些并发的知识 为了实现这些要求 后台使用一个队列作为缓存 对于请求只管往缓存里写数据 同时启动一个线程监听该队列 检测到数据 立即请
  • Express初学之入门

    1 Express简介 基于Node的极简MVC框架 提供灵活的路由功能 提供强大的中间件机制 内核极小 扩展性很好 使用广泛 2 路由机制 Express概念 定义了Api的地址 请求 响应方式 方法 天然支持HTTP Method 中的
  • node封装传formdata数据的接口(多文件上传)

    前文 这个星期的主要完成的东西我想就是多文件上传了 这也是我第一次封装传formdata数据类型的数据 因为也是刚学不久node 很多东西都是要自己摸索的 关于这个多文件上传我也是查阅了不少的博客 也是问了学长 最后问题才得以解决 关于接口
  • 数据库CPU满载如何处理

    当数据库CPU满载时 我们首先要做的是让CPU降下来 优先保证系统的可用性 什么情况会导致数据库CPU飙升呢 QPS过高 高并发 也就是数据库承载的流量过大 慢SQL 少量或大量慢SQL占用CPU资源 拖垮了数据库 这类慢sql通常表现为
  • Vue项目的部署(服务器)

    Vue项目的部署 服务器 前几天帮朋友写了一个可以动态查看地点温度的前端项目 目前已经部署上线了 访问链接点这里 服务器是朋友的 倒时候打不开会很正常 说不定又使用服务器玩大数据项目去了 效果图 图一 图二 当然 温度也都是实时跟新的 而且

随机推荐

  • 30个iPhone和iPad应用程序界面设计实例

    6月 5 日消息 据国外媒体报道 在今天的现代技术驱动下 手机行业更多的是迎接着 iPhone 和 iPad 的到来 iPhone 平台是在互联网用户中相当流行 因为它允许他们开发 甚至用很少的编程知识的应用程序设计 苹果提供的应用程序界面
  • windows11如何安装docker desktop

    我们知道docker的安装一般我们是安装在linux系统上的 但是如果你的宿主机是windows 那么你还想装docker 那么就需要现在你的windows上装上虚拟机 虚拟机上装linux操作系统 然后在Linux操作系统上再去安装doc
  • BizTalk2010简介

    绝大多数现代业务流程都或多或少地依赖于其它软件 尽管其中部分流程仅由单个应用程序支持 但其他许多业务流程都依赖于不同的软件系统 在许多情况下 已使用不同的技术在不同时间 不同平台上创建了此软件 若要使这些业务程序实现自动化 则需要连接不同系
  • 大屏可视化关键技术

    大屏可视化的技术中涉及的范围会比较广 拆开来说诸如各种LED视频技术 互联网技术 智能技术 视觉设计技术等等这些技术 都是跟大屏可视化有着千丝万缕断不开的关系 但真正影响到大屏可视化关键技术却在于下面的3点上 大屏可视化关键技术 第1是大数
  • 系统及服务器巡检流程图,业务巡检系统的整体设计和数据流程

    这是学习笔记的第1789篇文章 近期也总结了几篇关于巡检的内容 很多同学也很期待 说业务巡检是一个新概念 想做成什么样子 或者说怎么样做起来更好一些 最近的几篇文章 在这个基础上 我自己也梳理了不少方面的内容 其实发起做这个事情 脑子里面已
  • 机器学习训练营LightGBM学习笔记

    学习知识点概要 1 LightGBM 2 LightGBM的实现 学习内容 1 LightGBM LightGBM可以看作是XGBoost的升级豪华版 在获得与XGBoost近似精度的同时 又提供了更快的训练速度与更少的内存消耗 其优缺点和
  • 在事情没有变得糟糕之前_这是我们没有的问题的糟糕解决方案

    在事情没有变得糟糕之前 最糟糕的代码是什么 不要说JavaScript 它会在你身上成长 不 也不是Perl 好的 所以Perl非常令人讨厌 最糟糕的代码 这是我们不需要的代码 紧接着是几乎有效的代码 然后是无效的代码 几乎可以正常工作的代
  • sim卡安全问题

    USIM 存储支持鉴权密钥K 是整个UMTS安全体系的核心 接受参数有 随机数 RAND 鉴权标志参数 AUTN 并计算生成消息鉴权码 XMAC 响应参数 RES 完整性保护密钥 IK 鉴权密钥 CK GSM的SIM卡仅是一种单应用卡 它仅
  • ora-12542 address in used

    这主要是由于 操作系统的 临时端口 不够用而引起的 一般系统的 临时端口为 1024 5000 这在多用户的环境下 3000多个oracle链接就用光了 由于每个链接断开以后 还要有一个等待时间 例如在 windows 系统中 这个时间是
  • 比亚迪后续车都会搭在鸿蒙系统吗_华为手机也能当车钥匙,搭载鸿蒙系统,5G款比亚迪赶超特斯拉?...

    一直以来 互联网公司在造车这事儿上都被认为不太靠谱 虽然这点可以让下周回国贾跃亭和他的ff91背下锅 但依然改变不了我们造的车还不是那个 味 有时候我们自己也会疑问 为什么我们为啥没有自己的特斯拉 不过这件事情目前来看 似乎已经不是什么难题
  • windows下C盘文件夹管理员权限设置

    我们有时会将一些软件安装在C盘 却发现有时程序对C盘文件增删改操作失败 然后自己手动去执行时也经常弹出 你需要提供管理员权限才能进删除此文件 之类 这很烦 网上有些说法是开启Administrator用户 但是我这种有点洁癖的不喜欢增加一个
  • java b 类型_什么类型的Java类型是“[B”?

    我试图通过Java代码 Hibernate 从MySQL DB获取MD5加密传递 但我不能得到字符串或任何合理的Java类型 我唯一得到的是这个无益的信息 java lang ClassCastException B无法转换为com mys
  • 封装与检测技术

    环氧树脂 环氧树脂是一种高分子聚合物 分子式为 C 11 H 12 O 3
  • 复杂的密码有多重要?实操暴力破解wifi密码......

    暴力破解就是穷举法 将密码字典中每一个密码依次去与握手包中的密码进行匹配 直到匹配成功 注意 私自破解他人WiFi属于违法行为 本教程仅供学习与参考 破解工具 破解工具 kali linux系统 本教程使用的装在物理机的linux系统 虚拟
  • postgresql 中输入逃逸字符\n\r\b\t

    例如 1 建表 create table test a1 text a2 varchar 100 a3 char 200 2 插入数据 使用关键字 E insert into test a1 a2 a3 values E aaa n aaa
  • linux ssh服务是否已经启动?

    linux ssh服务是否已经启动 突然想到 ubuntu貌似默认是不会安装ssh server的 会默认安装ssh client 恍然大悟 是不是因为这个原因 于是查看发现 果然没有安装 下面进行安装openssh server sudo
  • Linux系统常用基本命令总结

    Linux基本命令 Linux的简介 Linux的厂商 Linux的目录结构 基于虚拟机的环境搭建 常用命令与示例 一 文件基本操作命令 1 ls命令 2 pwd命令 3 mkdir命令 4 cd命令 5 touch命令 6 cp命令 7
  • ubuntu13.10 64位系统下载Android源码

    参考http source android com source downloading html进行下载 下载过程中出现的问题参考http blog 163 com aravarcv 126 blog static 12384272820
  • (超级详细)如何在Mac OS上的VScode中配置OpenGL环境并编译

    文章目录 安装环境 下载GLAD与GLFW 一 下载GLAD 二 下载GLFW 项目结构配置 测试程序与项目的编译 测试可执行文件HelloGL 安装环境 机器 macbook air 芯片 M1芯片 arm64 macOS macOS V
  • SHA-256算法实现过程

    整理一下SHA 256的实现步骤 1 定义8个32位常量 h0 0x6a09e667 h1 0xbb67ae85 h2 0x3c6ef372 h3 0xa54ff53a h4 0x510e527f h5 0x9b05688c h6 0x1f