哈希函数/散列算法

2023-03-17 21:06:32 浏览数 (1)

一、哈希函数/散列算法文档

1.1、哈希函数介绍

哈希函数(Hash function),又称散列函数、散列算法,它是一种不可逆的信息摘要算法,具体实现就是把任意长度的输入信息通过哈希算法变成固定长度的输出信息。

1.2、哈希碰撞与输入输出

哈希碰撞:由于Hash是无限集合的数据向有限集合的数据进行单方向映射,所以难免会出现,对不同的数据可能得到相同的哈希值,这种现象称为哈希碰撞。因为哈希碰撞无法避免,所以要尽量降低这种碰撞成功的概率,以下为哈希值输入输出的两种情况:

  • 输入数据相同,则输出的结果值相同;
  • 输入数据不同,则有小概率输出的结果值相同。

1.3、哈希函数的特点

哈希函数没有特定的公式,一般只要符合散列算法的要求即可,只要符合散列算法的要求都可以称之为哈希算法,以下为哈希函数的主要特点:

  • 无论输入的消息有多长,计算出来的哈希值总是固定的;
  • 哈希计算的输出结果必须是随机和没有规律的;
  • 哈希函数必须是不可逆的单向函数,无法从输出的哈希值中推算出输入信息。

二、哈希函数的具体应用

一般相关的系统或组件都会自带哈希函数,我们可以使用其提供的HASH函数或HMAC函数对文本进行相关处理。通常情况下,不同的需求使用不同安全系数的散列算法,常见的安全哈希算法分类为:MD算法、SHA算法、MAC算法。

2.1、MD算法

MD(Message Digest Algorithm,消息摘要算法)算法是应用非常广泛的一个算法分支,尤其是MD5算法,它由 Ron Rivest(RSA 公司)在 1992年提出,目前被广泛应用于数据完整性校验、数据(消息)摘要、数据签名等很多场景。

  • MD2算法:它已被弃用,取而代之的是SHA-256和其他强大的散列算法;
  • MD4算法:虽然安全性已受到严重威胁,但是很多哈希算法如MD、SHA算法等都是基于MD4演进而来;
  • MD5算法:可以被破解,对于需要高度安全性的使用场景,专家建议改用其他哈希算法;
  • MD6算法:还未成为标准。

2.2、SHA算法

SHA(Secure Hash Algorithm,安全哈希算法)算法是由美国专门制定密码算法的标准机构(美国国家标准技术研究院NIST)制定的,由于它产生的数据摘要的长度更长、更难以发生碰撞,所以也更为安全,它代表着未来数据摘要算法的发展方向。

  • SHA-0算法:安全散列算法标准的初版,因安全问题很快就被撤掉的版本;
  • SHA-1算法:安全散列算法标准的第一版,该算法已经不够安全,不建议继续使用;
  • SHA-2算法:包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256等;
  • SHA-3算法:SHA算法分支的最新版本,也是官方推荐使用的安全版本。

2.3、MAC算法

MAC(Message Authentication Code,消息认证码算法)算法是含有加密密钥的散列算法,它在MD和SHA算法特性的基础上加入了加密密钥(参考本在线工具的场景二)。因为MAC算法融合了密钥散列函数(keyed-Hash),通常我们也把MAC算法称为HMAC(Keyed-Hash Message Authentication Code)。

  • MD版本:例如,HMAC-MD2、HMAC-MD4、HMAC-MD5等;
  • SHA版本:例如,HMAC-SHA1、HMAC-SHA224、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512等。

0 人点赞