Python_Hashlib模块的学习

本文详细介绍了Python的hashlib模块,包括其在AES加密中的应用,内置的MD5、SHA1、SHA256和SHA512哈希函数,以及加密流程,包括数据转换和生成二进制/十六进制哈希值。
摘要由CSDN通过智能技术生成

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”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值