当前位置: 首页 > news >正文

SHA256算法学习

  SHA-256(Secure Hash Algorithm 256-bit)是一种常用的哈希算法,是SHA-2家族中的一种。它可以将任意长度的数据转换为一个固定长度的256位(32字节)哈希值。

算法特点

  • 固定长度输出:无论输入数据有多长,SHA-256总是输出一个256位(64个十六进制字符)的哈希值。
  • 单向不可逆:给定输出哈希值,难以反推出原始输入。

算法流程

消息预处理

  • 填充:将消息进行填充,使得填充后的消息长度对512取余为448。
    填充方式是在原始消息后面添加一个1,然后连续添加0,直到消息长度达到448比特(即接近512的整数倍)。
    填充的最后64位用于存储原始消息的长度(以比特为单位)。
  • 分块:将填充后的消息划分为多个512位(64字节)的块。

初始化缓冲区

SHA-256使用八个32位的初始哈希值,表示为H0到H7:

H0 = 0x6a09e667
H1 = 0xbb67ae85
H2 = 0x3c6ef372
H3 = 0xa54ff53a
H4 = 0x510e527f
H5 = 0x9b05688c
H6 = 0x1f83d9ab
H7 = 0x5be0cd19

循环压缩

对于每个512位的消息块,SHA-256进行64轮压缩运算。

  • 消息扩展
    将每个512位的消息块扩展为64个32位的字(W0到W63),前16个字直接来自于消息块,后48个通过非线性函数生成。

  • 主循环
    使用64个固定的常量K,这些常量是前64个素数的立方根的小数部分。
    对于每一轮运算,使用非线性函数(如Σ0、Σ1、Ch、Maj等)进行复杂的位运算,确保哈希函数的混淆性和扩散性。

  • 更新哈希值

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值连接起来,得到最终的256位哈希值。

python调用

import hashlib
data = "Bileton"
data_hash = hashlib.sha256(data.encode("UTF-8")).hexdigest()
print(data_hash)
>>> b54bc358a78fb7bbfcb6bdcd79ba65436534c222ce67ebbc838e8a29df5b2b28

Java 调用

MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
String data = "Bileton";
sha256.update(data.getBytes());
byte[] data_sha256=sha256.digest();
String result = HexFormat.of().formatHex(data_sha256);
System.out.println(result);>>> b54bc358a78fb7bbfcb6bdcd79ba65436534c222ce67ebbc838e8a29df5b2b28

Android Studio

MessageDigest sha256 = MessageDigest.getInstance("sha-256");
sha256.update(data.getBytes());
byte[] data_sha1 = sha256.digest();
String result = bytesToHex(data_sha1);
Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();

在这里插入图片描述


http://www.mrgr.cn/news/50630.html

相关文章:

  • MATLAB代码解析:利用DCGAN实现图像数据的生成 全网最细DCGAN设计-训练入门
  • [供应链] 让步接收
  • 安科瑞ARB5弧光保护在船舶中压配电板中的应用-安科瑞黄安南
  • Vue3创建
  • Flutter框架学习计划
  • 一份Python自动化测试学习秘籍,请查收!
  • 真空牛肉滚揉机的优点:
  • 三勾软件/ java+springboot+vue3玖玖云电商ERP多平台源码
  • 如何将AI大模型部署到本地电脑
  • Deeppaas 3.6版本发布,推动零代码开发新纪元
  • 怎样用python获取浏览器的背景颜色?怎样用python把浏览器背景颜色设置为dark?
  • 【jQuery】jQuery基本操作(样式操作 内容操作 节点操作 属性操作 节点遍历)
  • 关于Oracle透明数据加密(TDE)的两个概念
  • RLC串联谐振
  • 多元线性回归模型
  • 光伏电站的安装方式有哪些类型
  • 国际盲人节,看华为智能眼镜2是如何为视障用户开启便捷新体验的
  • 【工具推荐】Hikvision - 一款海康威视综合漏洞利用工具,适用于漏洞挖掘、SRC漏洞挖掘、护网红队、渗透测试,支持一键获取 shell。
  • 【工具分享】XSStrike是一款检测XSS漏洞的高级检测工具,XSS漏洞挖掘神器,渗透必备,SRC挖掘必备,多个SRC挖掘团队都在偷偷使用。
  • RTR-Chapter9上