MDT(Message Digest)将任何长度的数据变换为固定长为128位(16字节)(数量大概是地球上沙粒数量)
SHA(Secure Hash Algorithm)是另一组散列函数
SHA-0/SHA-1输出散列值160位(20字节)
SHA-256/SHA-244分别输出256位、224位,
SHA-512/SHA-384分别输出512位和384位
160位和256位的大小
160位二进制相当于10的48次方,地球上水分子数量估计是47次方
256位二进制相当于10的77放,一直宇宙所有基本粒子大约是72-87次方
注意:
虽然今年发现MD5/SHA-0/SHA-1三种散列函数,能够以极特殊的情况下来构造个别碰撞(散列冲突),但是在实用中从未有实际的威胁
python散列函数库hashlib
print(hashlib.md5('hello world'.encode('utf-8')).hexdigest()) print(hashlib.sha1('hello world'.encode('utf-8')).hexdigest()) >>> 5eb63bbbe01eeed093cb22bb8f5acdc3 >>> 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
注意:由于python3中字符串默认为unicode编码,而hashlib只支持字节二进制字符串,所以需要将输入的字符串进行转码
应用范围
数据文件一致性判断
为每个文件计算其散列值,仅对比其散列值即可得知是否文件内容相同
用于网络文件下载完整性校验
用于文件分享系统:网盘中相同的文件(视频、音频文件)可以无需存储多次
加密形式保存密码
保存密码的md5值,加强密码安全性
放文件篡改
原理同数据文件一致性判断
彩票投注应用
彩民下注前,机构将中奖的结果散列值公布,然后彩棉投注,开奖后,彩民可以通过公布结果和散列值对比,验证机构是否作弊
还没有留言,还不快点抢沙发?