首页 > 其他分享 >sha256 和hamc-sha256区别

sha256 和hamc-sha256区别

时间:2023-04-17 13:00:11浏览次数:43  
标签:函数 区别 SHA hamc 哈希 sha256 256 HMAC md5

签名哈希函数

  • SHA-256:SHA-256 是全称为 Secure Hash Algorithm 256(安全散列算法 256)的缩写。SHA-256 可以将任意长度的数据计算成一个长度为 256 位的哈希值,在数字签名中得到广泛应用。
  • SHA-512:SHA-512 是 SHA-256 的加强版,可以生成更长、更不易被碰撞的消息摘要。在一些对于安全性要求较高的场合,比如金融交易等领域中,SHA-512 更为常用。
  • MD5:MD5 是一种不可逆的哈希函数,可以将任意长度的数据计算成一个长度为 128 位的哈希值。然而,由于 MD5 易受到碰撞攻击,已经不再被推荐使用。
  • SHA-3:SHA-3 是美国国家标准技术研究所(NIST)发布的一种哈希算法标准,在2015年成为了美国联邦政府建议使用的哈希函数。SHA-3 具有抗碰撞性、安全性、可扩展性等特点,目前被广泛用于加密通信和数字签名等领域中。

基于哈希函数和密钥的消息认证码算法

  • HMAC-SHA1 使用 SHA-1 哈希函数,生成的 HMAC 值长度为 160 比特。虽然 SHA-1 目前已经被认为不再安全,但 HMAC-SHA1 在某些场景下仍有一定应用。
  • HMAC-SHA256 使用 SHA-256 哈希函数,生成的 HMAC 值长度为 256 比特。SHA-256 是比 SHA-1 更安全的哈希函数,因此 HMAC-SHA256 在更多场合下使用,例如 TLS 协议中的数字签名和认证。
  • HMAC-MD5 使用 MD5 哈希函数,生成的 HMAC 值长度为 128 比特。MD5 目前已经被认为不再安全,因此 HMAC-MD5 也不再安全可靠,建议使用更为安全的哈希函数。

区别

  • 哈希函数 通过hash算法生成固定长度的输出
import hashlib

md5 = hashlib.md5()
md5.update(b'Hello, world!')
print(md5.hexdigest())


  • hamc
    • 选择一个适合的哈希函数 H(如 SHA-256、SHA-512 等);
    • 如果密钥长度超过哈希函数输入块长度,则对密钥进行哈希计算并缩小长度,否则直接使用密钥;
    • 对消息 M 进行哈希计算,并得到哈希结果 H(M);
    • 将密钥作为 HMAC 的输入,再将 H(M) 与密钥进行异或运算,得到最终的输出 HMAC。
import hmac
import hashlib

key = b'secret'
data = b'Hello, world!'

h = hmac.new(key, digestmod=hashlib.md5)
h.update(data)

print(h.hexdigest())
java hutools md5 hmac-md5
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.core.util.HexUtil;

String str = "Hello, world!";
String md5 = DigestUtil.md5Hex(str);
System.out.println(md5);

 byte[] data = "Hello, world!".getBytes();
byte[] key = "secret".getBytes();
 byte[] hmacMd5 = DigestUtil.hmacMd5(data, key);
String result = HexUtil.encodeHexStr(hmacMd5);
System.out.println(result);

标签:函数,区别,SHA,hamc,哈希,sha256,256,HMAC,md5
From: https://www.cnblogs.com/guanchaoguo/p/17325514.html

相关文章

  • JS中Map、WeakMap和Object的区别
    JavaScript中的Map、WeakMap和Object都是用于存储键值对的数据结构:1.Map:Map是一种新的数据结构,它允许使用任何数据类型(包括对象和基本数据类型)作为键。Map的一些特性包括:-保持键的插入顺序:当遍历Map时,键值对会按照插入顺序返回。-键可以是任意类型:与Object不同,Map的键可以......
  • http GET和POST的区别
    1、幂等性:由于GET是读,POST是写,所以GET是幂等的,POST不是幂等的;由于GET是读,POST是写,所以用浏览器打开网页会发送GET请求,想要POST打开网页要用form标签。由于GET是读,POST是写,所以GET打开的页面刷新是无害的,POST打开的页面刷新需要确认。由于GET是读,POS......
  • jquery中prop()方法和attr()方法的区别
    jquery1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值。官方例举的例子感觉和attr()差不多,也不知道有什么区别,既然有了prop()这个新方法,不可能没用吧,那什么时候该用attr(),什么时候该用prop()呢?大家都知道有的浏览器只要写dis......
  • [云原生]K8S 中 Ingress 和 Service 的区别?
    K8SIngress和Service的作用?Kubernetes中的Ingress和Service都是用于构建和管理应用程序的网络服务的重要组件,两者的作用不同。Service:是Kubernetes中一个抽象的概念,用于定义一组Pod的访问方式和网络访问规则。Service通常用于在内部网络中提供可靠的负载均衡机制,如将服务......
  • FBV和CBV的区别(源码分析)
    FBV和CBV源码分析FBV直接调用user方法执行业务代码CBV相当于在FBV上面封装了一层fromdjango.contribimportadminfromdjango.urlsimportpathfromapp01importviewsurlpatterns=[path('users/',views.UserView.as_view()),]fromdjango.viewsimport......
  • Comparator.reverseOrder() 和 reversed()的区别
    摘要:Comparator.reverseOrder()和reversed()的区别是前者以某字段进行倒序排列,而reversed是针对已排序数据进行处理,常常用于比较器的末尾。  在使用Streamsorted进行排序的时候,常常需要按照摸个属性进行降序排列,有时候reverseOrder()和reversed()都可以实现目标,那他们的区......
  • js动态查询指定class名的所有元素,querySelectorAll()和querySelectorAll()的区别
    "document.querySelectorAll()"方法返回的是一个静态的NodeList(节点列表),即它只能在页面刚加载时获取到一次,之后即使有新的元素符合选择器,它也不会再重新获取。如果你想动态地获取到新增的元素,可以使用"document.getElementsByClassName()"或"document.getElementsByTagName()"......
  • ThreadPoolTaskExecutor和ThreadPoolExecutor区别
    ThreadPoolExecutor是Java原生的线程池类,而ThreadPoolTaskExecutor是Spring推出的线程池工具  一、从核心参数看两者关系 ThreadPoolExecutor(java.util.concurrent) publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,......
  • .Net [FromBody]与[FromForm]区别、各请求格式说明
    [FromBody]与[FromForm]区别1,FromBody:在Action方法传入参数后添加[frombody]属性,参数将以一个整体的josn对象的形式传递。代码示例:///<summary>///发公告///</summary>///<paramname="dateTime"></param>///<retur......
  • magicos7.1和7.0的区别
    荣耀MagicOS7.1操作系统是在荣耀MagicOS7.0操作系统的基础上做的升级,MagicOS7.1操作系统相比较MagicOS7.0操作系统到底有了哪些升级也是大家比较关注的问题。magicos7.1和7.0的区别介绍 1、MagicOS7.1操作系统将MagicOS7.0操作系统的荣耀备忘录升级为了荣耀笔记,可以快速......