MD5讯息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位的散列值(hash value),用于确保信息传输完整一致。MD5的前身有MD2、MD3、MD4。
MD5功能,输入任意长度的信息,经过处理,输出为128位的信息(数字指纹)。
md5算法特点:
1。压缩性:任意长度的数据,算出的md5数值是固定的
2。容易计算:从原数据转换成md5值很容易
3。抗修改性:对原数据进行任何改动,md5值会发生改变
4。强抗碰撞,已知原数据和md5,想找一个相同md5值的数据很难的
>>> import hashlib
>>>
>>> m = hashlib.md5()
>>>
>>> m.update("hello world")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Unicode-objects must be encoded before hashing
>>> m.update(b"hello world") #必须为字节类型
>>> print(m.hexdigest())
5eb63bbbe01eeed093cb22bb8f5acdc3 #16进制hash值
>>> m.update("你好世界".encode("utf-8")) #追加内容
>>>
>>> print(m.hexdigest())
ae8824a8c72230e74a6e8b0a1186a4fb #观察完整输出是否和这个值一样?
>>>
>>> m1 = hashlib.md5()
>>>
>>> m1.update("hello world你好世界".encode("utf-8")) #拼接完整输出
>>> print(m1.hexdigest())
ae8824a8c72230e74a6e8b0a1186a4fb #值一样
#不用update的写法
>>> import hashlib
>>>
>>>
>>> a = hashlib.md5(b"hello world")
>>> a.hexdigest()
'5eb63bbbe01eeed093cb22bb8f5acdc3'
SHA-1 安全hash算法(Secure Hash Algorithm)主要适用于数字签名标准里面定义的数字签名算法。对于长度小于2^64的消息,SHA会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。
SHA是美国国家安全局设计的,由美国国家标准和技术研究院发布的一些列密码散列函数。由于MD5和SHA-1在2005年被破解了,科学家们又推出了SHA224,SHA256,SHA384,SHA512,位数越长,破解难度越大,但同时生成加密的消息摘要耗时也更长,目前最流行的加密算法是SHA-256。
>>> import hashlib
>>>
>>> a = hashlib.sha
hashlib.sha1( hashlib.sha384( hashlib.sha3_384( hashlib.shake_128(
hashlib.sha224( hashlib.sha3_224( hashlib.sha3_512( hashlib.shake_256(
hashlib.sha256( hashlib.sha3_256( hashlib.sha512(
>>> a = hashlib.sha1(b"hello world")
>>> print(a.hexdigest())
2aae6c35c94fcfb415dbe95f408b9ce91ee846ed #160位消息摘要
0 Comments