散列函数(md5 sha512)
定义和特点
散列(Hashing)通过散列函数将要检索的项与索引(散列,散列值)关联起来,生成一种便于搜索的数据结构(散列表),也叫杂凑函数、摘要函数或哈希函数。 特点
- 消息摘要单向、不可逆
- 可将任意长度的消息经过运算,变成固定长度数值(不同函数的固定长度不同) 常用的散列函数 MD5 : 摘要结果16个字节, 转16进制后32个字节 SHA1 : 摘要结果20个字节, 转16进制后40个字节 SHA256 : 摘要结果32个字节, 转16进制后64个字节 SHA512 : 摘要结果64个字节, 转16进制后128个字节
MD5介绍
全称:Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现,由一个单向Hash加密函数对消息进行处理而产生。 MD5算法特点:
- 正向快速:原始数据可以快速计算出哈希值
- 逆向困难:通过哈希值基本不可能推导出原始数据
- 输入敏感:原始数据只要有一点变动,得到的哈希值差别很大
- 冲突避免:很难找到不同的原始数据得到相同的哈希值
几个注意点
- MD5 与 SHA-1 算法已被攻破,可以降低使用频次了;SHA-2 与 SHA-3 还是安全的,可以使用。
- SHA-2包括:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
- SHA-3包括:SHA3-224、SHA3-256、SHA3-384、SHA3-512。
- MD5 不是加密算法,是摘要算法,因为结果无法还原。base64 虽然能还原原文,但过程中无需密钥,所以是编码算法。只有需要密钥,才能还原原文的算法才是加密算法。
应用点
1、文件秒传
文件也可以做消息摘要,如使用sha1算法,可实现秒传功能。虽然文件的名字不同,不过最后得到的值是一样的,如果原文修改了,那么sha1值就会不一样。 当我们上传一个文件时,云盘客户端会先为该文件生成一个散列值。拿着这个散列值去数据库中匹配,如果匹配到,说明该文件已经在云服务器存在。只需将该散列值与用户进行关联,便可完成本次“上传”。
一个文件在云服务器上只会存一份,大大节约了云服务器的空间。
2、文件校验
在各类文件下载网站,比如JDK版本下载、tomcat版本下载的地方,也附上其散列值和算法,用户下载后,计算其散列值,对比结果是否相同,从而校验文件的完整性。
3、数字签名
为了保证接口的安全,可以采用签名的方式发送。
发送者与接收者要有一个共享秘钥。当发送者向接收者发送请求时,参数中附加上签名(签名由共享秘钥 + 业务参数,进行单向散列函数加密生成)。
接收者收到后,使用相同的方式生成签名,再与收到的签名进行比对,如果一致,验签成功。
这样即可以验证业务参数是否被篡改,又能验明发送者的身份。这广泛使用于不同系统之间的调用。
4、数据库密码加密 用户在设置密码时,不记录密码本身,只记录密码的散列值,只有用户自己知道密码的明文。
校验密码时,只要输入的密码正确,得到的散列值一定是一样的,表示校验正确。
PS:数据库密码可做得更复杂,实际情况也是这么做的,比如给每个用户密码加盐(salt)、登录来源校验等等。
唠嗑广场
我2016年大学毕业,工作前5年都没什么钱,算是没有赶上房价大幅上涨的好日子。
2020-2023年,我在持续思考房价。买房不是借钱完成首付的事情,对于打工人来说,是对未来30年的现金流的预期和判断,必须谨慎,之前的人因为房价单边上涨,对未来持续乐观,杠杆加得比较大,最后毁灭,是不少城市、不少人出现的情况。
现在觉得,房价不由大V影响和决定,它只由政策、供地、人口、金融、市场等决定,最终,是由市场决定。
没有什么投资品是可以永远涨的,20年(1998-2018)的大幅单边上涨,已经很厉害了,现在回调深圳四五线城市的房价的毁灭,是很正常的。
你不愿意体面,规律会帮你体面。你不愿意客观,市场会帮你客观。