签名哈希函数
- 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 也不再安全可靠,建议使用更为安全的哈希函数。
区别
| 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()) |
| 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); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库