Python_Hashlib加密学习
背景
在进行使用Python对数据进行AES加密时遇到了需要调用一个库函数hashlib,因此对其进行了相关的研究,并以此记录一下,可以为自己做一下积累,也希望为大家提供些许帮助,对于hashlib的库的理解也只是停留在使用方面,后继续深入研究;
hashlib模块
Hashlib是Python的内置的一个模块,其主要作用是加密,是一种hash库,且加密后的数据具有不可逆且唯一性,可以用于数据完整性校验、数字签名等应用。
Hashlib内置的hash加密函数有:MD5,SHA1,SHA256,SHA512等,以下采用代码函数示例进行讲解:
代码示例
import hashlib
def main():
data="张三李四王五123"
#字符串转字节 转成二进制数据
data=data.encode("utf8")
print(data)
res_MD5=hash_MD5(data)
res_SHA1=hash_SHA1(data)
res_SHA256=hash_SHA256(data)
res_SHA512=hash_SHA512(data)
print("MD5:",res_MD5)
print("SHA1:",res_SHA1)
print("SHA256:",res_SHA256)
print("SHA512:",res_SHA512)
#进行hash_MD5的加密
# MD5 是一种常见的哈希函数,它可以将任意长度的信息转换为一个 128 位的哈希值
def hash_MD5(data):
# 创建一个MD5的加密对象
hash_MD5=hashlib.md5()
#更新加密对象中的信息
hash_MD5.update(data)
# 加密后的结果
# hexdigest() 作为十六进制数据字符串值
#res=hash_MD5.hexdigest()
# digest() 作为二进制数据字符串值
res = hash_MD5.digest()
return res
#SHA1 是一种安全性较高的哈希函数,它可以将任意长度的信息转换为一个 160 位的哈希值。
def hash_SHA1(data):
#创建一个SHA1的加密对象
hash_SHA1_Object=hashlib.sha1()
#更新加密数据的信息
hash_SHA1_Object.update(data)
#进行加密数据十六进制的字符串数据的输出
#res=hash_SHA1_Object.hexdigest()
#进行加密数据二进制的字符串数据的输出
res=hash_SHA1_Object.digest()
return res
#SHA256 是一种安全性更高的哈希函数,它可以将任意长度的信息转换为一个 256 位的哈希值
def hash_SHA256(data):
# 创建一个SHA256的加密对象
hash_SHA256_Obj=hashlib.sha256()
# 更新加密数据的信息
hash_SHA256_Obj.update(data)
# 进行加密数据十六进制的字符串数据的输出
#res=hash_SHA256_Obj.hexdigest()
# 进行加密数据二进制的字符串数据的输出
res=hash_SHA256_Obj.digest()
return res
#SHA512 是一种安全性最高的哈希函数,它可以将任意长度的信息转换为一个 512 位的哈希值。
def hash_SHA512(data):
# 创建一个SHA512的加密对象
hash_SHA512_Obj=hashlib.sha256()
# 更新加密数据的信息
hash_SHA512_Obj.update(data)
# 进行加密数据十六进制的字符串数据的输出
#res=hash_SHA512_Obj.hexdigest()
# 进行加密数据二进制的字符串数据的输出
res=hash_SHA512_Obj.digest()
return res
if __name__=="__main__":
main()
#输出
b'\xe5\xbc\xa0\xe4\xb8\x89\xe6\x9d\x8e\xe5\x9b\x9b\xe7\x8e\x8b\xe4\xba\x94123'
MD5: b'\xef\x11\xede\xd09\xb8\xd8\x80\xaf!XR]\xbe\xb1'
SHA1: b'23\xa1syz\xeb\x9aP\xd6\x95\xe0\xeb\xb7\x1c\x9c\x92\xcf\xe1\x8c'
SHA256: b'\x88g\xc2\xd9_\xb6{f\x9fz\x86]\xeb\xc5\x04\xb2\xb8\xd1:9\xed\xd9\xcc\xa5\x15\\:\xf9\x85x?\xc8'
SHA512: b'\x88g\xc2\xd9_\xb6{f\x9fz\x86]\xeb\xc5\x04\xb2\xb8\xd1:9\xed\xd9\xcc\xa5\x15\\:\xf9\x85x?\xc8'
代码加密解析
其加密整体流程:
1.声明创建对象
2.更新需要加密的数据
3.可进行对应的哈希值二进制/十六进制的字符串表示
注:加密的数据需要进行格式转换,将字符串转换为字节字符串 即:data.encode(“utf8”)