1、什么Hash
在计算机科学中,hash是一种函数,该函数可以把任意长度的输入转换为固定长度的输出,输出的结果称为hash值,通常为一个字符串,对于特定的hash算法输出结果的长度总是一定的,例如,不管是输入内容是长如小说般的内容还是一个字母,MD5总会产生32为长度的hash值。
hash函数的特点:
对于特定的hash算法输出结果的长度总是一定的;
对于相同的输入内容不管执行多少次hash函数,总会得到相同的hash值;
对于输入字符串哪怕及其微小的变动也会引起输出结果巨大的变化;
哈希过程是单向的,即不能通过特定的函数从hash值恢复出原始数据。
2、常见的hash算法
有很多广泛使用的hash算法,例如MD5、SHA1、SHA224、SHA256、SHA512等,一般编程语言中都提供的了常见的hash算法,如在python中:
import hashlib
hash = hashlib.md5(“Dataspace”.encode(‘utf-8’))
print(hash.hexdigest())
将会输出:
e2d48e7bc4413d04a4dcb1fe32c877f6
3、常见hash算法的应用场景
3.1 hash与密码
如果一个系统在数据库中直接保存了用户名和密码明文,那么一旦用户信息表泄露,捕获到信息的人就能使用任意账号登录系统;此时如果用户信息表中密码字段保存的是用户密码的hash值,即使该密码泄露,拿到该密码的人也并不能使用它来登录系统,因此给密码进行hash处理,会在一定程度上增加用户的安全性,注意,这种安全性并不是绝对的,因为hash过程虽然是不可逆的,但却可以被破解,因为这个世界上早有人搜集了不计其数的明文以及对应的hash值,放在数据库中,并以网站的形式对外提供服务,如https://cmd5.com/。
对密码更为安全的处理形式将会另行展开论述。
3.2 对抗计算机病毒
当发布出去的计算机程序感染病毒时,执行该程序可能会引起一些严重的后果, 那么如何保证用户执行的程序是开发者“真正”发布的程序呢?使用hash算法就是起到防范病毒的作用。具体来说就是,当发布程序时,会以程序为输入使用hash算法得到一个hash值,然后将程序和该hash值一并分发给用户,用户以得到的程序作为输入,执行指定的hash算法,也会得到一个hash值,如果用户执行出来的hash值与程序发布者发布的hash值一致说明程序未被篡改。