7.hashlib模块与加密解密

1.数据安全


    -- 数据时代为了保证数据安全性,防止数据泄露,往往需要对数据进行加密;
    -- 对于敏感数据,加密措施更加令人发指

    - 加密: 是最常用的安全保密手段,利用技术手段把重要的数据变为乱码传输;
    - 解密:到达目的后,再利用相同手段或者不同手段还原



2.概念


-- 对称加密
        数据加密与解密使用相同的密钥

-- 非对称加密
        加密与解密用两把不同的密钥, 
        公钥用于加密数据
        私钥用于解密数据
        
-- 单向加密
        只能加密不能解密

3.hash结构

--  hash因为不可逆性,只能进行单项加密
    

hash:
        散列函数,一般译为哈希,
        把输入任意长度的数据通过散列函数进行转化,变成一个长度固定的值(散列值);这个值是唯一的
        hash算法中的一种将任意长度的数据变成一个长度固定的数据的函数
        

特点:
        不可逆:无法根据散列值来还原原来的数据
        定长输出: 无论原始数据有多长,结果长度相同
        抗修改性:输入的微小改变哪怕只有一个字符,会引起结果的巨大改变
        强碰撞性:很难找到两端内容相同的的数据,使他们产生hash值相同一致几乎不可能。


4. hashlib模块API


hashlib模块提供了许多供我们调用的hash算法,主要有:
    1.md5
    2.SHA系列:sha1, sha224, sha256, sha384, sha512

方法作用补充
hashlib.new(name,data)生成一个hash对象方法名name上面介绍了; 数据data是二进制数据(可 encode编码)不常用
hashlib.hash算法名(data)生成一个使用该算法的hash对象数据data是二进制数据(可 encode编码),data是用于加密混淆的,可写可不写
hash对象.update(arg)添加需要加密数据arg也是二进制数据(可 encode编码)
hash对象.disget()返回hash算法加密后的值(bytes类型)
hash对象.hexdisget()返回hash算法加密后的值(str类型)

5.案例



import hashlib

obj = hashlib.md5()
obj.update("小马过河".encode("utf-8"))
print(obj,type(obj))


# -------------------结果:
# <md5 HASH object @ 0x000002FC55869A20> 
# <class '_hashlib.HASH'>


import hashlib

obj = hashlib.md5()
obj.update("小马过河".encode("utf-8"))
# print(obj,type(obj))

print(obj.digest())  # b'$\xf6{\x0fm\x02\xad\xc8\x86}a.\x0e\x0f\xc4\n'
print(obj.hexdigest())  # 24f67b0f6d02adc8867d612e0e0fc40a


import hashlib

obj = hashlib.md5("mcw@xiaoma@aaaafffff".encode("utf-8"))  # 添加一些内容,提高加密复杂度。此处的字符串也要先编码,
obj.update("小马过河".encode('utf-8'))
result = obj.hexdigest()
print(result)  # b11740508f28e04837f2c0e3a58cf990

经典案例:登录注册,数据一致性校验




6.扩展:hmac模块

hmac模块的加密方式,与hashlib类似

# 还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密:

import hmac

h = hmac.new('天王盖地虎'.encode('utf8'))  # hmac必须要加盐
h.update('hello'.encode('utf8'))
print(h.hexdigest())   # 1abaae8f65f68f2695a8545c5bc8e738


# 要想保证hmac最终结果一致,必须保证:
# 1:hmac.new括号内指定的初始key一样
# 2:无论update多少次,校验的内容累加到一起是一样的内容


# 下面单重方式得到的结果是一样的

import hmac

h1=hmac.new(b'tom')  # 初始值必须保证一致,最终得到的结果就会不一样
h1.update(b'hello')
h1.update(b'world')
print(h1.hexdigest())



h2=hmac.new(b'tom')  # 初始值必须保证一致,最终得到的结果就会不一样
h2.update(b'helloworld')
print(h2.hexdigest())



h3=hmac.new(b'tomhelloworld') # 初始值不一样,所以与上面两种的结果不一样
print(h3.hexdigest())


'''

0426ccec3b134e8c18fdcefee841ef25

0426ccec3b134e8c18fdcefee841ef25

ff1214d895bbaf5f1847db4ebae8212e

'''


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值