Python 标准库base64、hmac、hashlib的基本使用

base64

import base64  # Base64是一种用64个字符来表示任意二进制数据的方法。常用于在URL、Cookie、网页中传输少量二进制数据。

encode_val = base64.b64encode('test ak47'.encode())  # 将bytes类型转换成base64类型 返回一个bytes类型
decode_val = base64.b64decode(encode_val)  # 将得到的值进行解码 可以是字符串类型

print(encode_val, type(encode_val), decode_val.decode())

hmac

import hmac # hmac模块实现了标准的Hmac算法。


def test_md5_hmac():
    msg = 'test'.encode() # 将传入的参数转成bytes类型
    key = 'mykey'.encode() # 将key转成bytes类型 这个过程也成加盐
    # hm = hmac.new(key, msg, digestmod='MD5') # 使用md5的方法计算
    # return hm.hexdigest()
    hm = hmac.new(key)  # 加盐操作
    hm.update(msg)  # 类似hashlib 计算数据
    return hm.hexdigest()


if __name__ == "__main__":
    pass_md5 = test_md5_hmac()
    print(pass_md5, type(pass_md5), len(pass_md5))

hashlib

import hashlib  # hashlib提供了常见的摘要算法:摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
'''
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。
举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'。
如果有人篡改了你的文章,并发表为'how to use python hashlib - by Bob',你可以一下子指出Bob篡改了你的文章,因为根据'how to use python hashlib - by Bob'计算出的摘要不同于原始文章的摘要。
摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
'''

def test_sha256(password):
    # 利用sha256生成密码
    h = hashlib.sha256() # 创建一个实例
    # h.update(password.encode('utf-8')) # 开始处理数据,接受一个bytes类型的值
    # 对数据进行加盐处理,为什么要这样做,对呀密码进行加密的时候 可能会出现使用123456 111111 password等简单密码,因为算法生成得到的值永远是一样的
    # 所以有可能会被有心人士轻松的对比出来,所以我们进行加盐操作后,只有对方不知道我们加的值是什么,那么对方就无法得到加密数据的明文值
    h.update((password + '-mykey').encode('utf-8'))
    # h_result = h.hexdigest() # 得出计算结果 返回一个16进制字符串
    h_result = h.digest() # 得出计算结果 返回一个bytes类型
    return h_result

def test_md5():
    # 利用md5生成密码
    h = hashlib.md5()
    # 当需要计算的数据过大时 可以拆分计算 得到的结果任然是一样的
    h.update('1234'.encode('utf-8'))
    h.update('56'.encode('utf-8'))
    h_result = h.hexdigest()
    return h_result


if __name__ == "__main__":
    pass_sha256 = test_sha256('123456')
    pass_md5 = test_md5()
    print(pass_sha256, type(pass_sha256), len(pass_sha256))
    print(pass_md5, type(pass_md5), len(pass_md5))
    # print(dir(hashlib))
    import chardet
    # 使用 chardet 猜测bytes的编码
    print(chardet.detect(pass_sha256))
发布了264 篇原创文章 · 获赞 202 · 访问量 110万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章