5.1 hashlib.py

来源:互联网 发布:浪潮软件股票走势 编辑:程序博客网 时间:2024/06/05 15:40
5.1 hashlib.py#!/usr/bin/python# -*- encoding: utf-8import hashlibif __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的摘要