5.1 hashlib.py
#!/usr/bin/python
# -*- encoding: utf-8
import hashlib
if __name__ == "__main__":
md5 = hashlib.md5()
md5.update('This is a sentence.'.encode(encoding='utf-8'))
md5.update('This is a second sentence.'.encode())
print (u'不出意外,这个将是“乱码”:', md5.digest())
print (u'MD5:', md5.hexdigest())
md5 = hashlib.md5()
md5.update('This is a sentence.This is a second sentence.')
print (u'MD5:', md5.hexdigest())
print (md5.digest_size, md5.block_size)
print ('------------------')
sha1 = hashlib.sha1()
sha1.update('This is a sentence.')
sha1.update('This is a second sentence.')
print (u'不出意外,这个将是“乱码”:', sha1.digest())
print (u'SHA1:', sha1.hexdigest())
sha1 = hashlib.sha1()
sha1.update('This is a sentence.This is a second sentence.')
print (u'SHA1:', sha1.hexdigest())
print (sha1.digest_size, sha1.block_size)
print ('=====================')
md5 = hashlib.new('md5', 'This is a sentence.This is a second sentence.')
print (md5.hexdigest())
sha1 = hashlib.new('sha1', 'This is a sentence.This is a second sentence.')
print (sha1.hexdigest())
print (hashlib.algorithms)
Q1:
md5.update('This is a sentence.')
TypeError: Unicode-objects must be encoded before hashing
As1:
注意update()必须指定要加密的字符串的字符编码
解决办法:
md5.update('This is a sentence.'.encode(encoding='utf-8'))
md5.update('This is a second sentence.'.encode())
相关知识
str.encode()
def encode(self, encoding: str = 'utf-8', errors: str = 'strict') Inferred type: (self: str, encoding: str, errors: str) -> bytes
参数:encoding = 'utf-8'
表示以utf-8编码,即将str
对象以你选定的编码方式进行编码,errors=
默认为strict
,即会抛出编码异常的错误UnicodeEncodeError
,可用ignore
忽略
md5.update()
sha1.update()
hashlib.new()
都需要指定要加密的字符串的字符编码
hashlib
是一个集成hash
加密或者md5
加密以及sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), and blake2s(). md5()
的库
主要功能是将字符串进行加密,或者对信息进行摘要。
MD5
主要对于任意长度的信息,经过MD5
算法都能得到一段长度为128bit的摘要