# 背景
# 计算机字节串(UTF-8 编码):b'\xe4\xbd\xa0\xe5\xa5\xbd'
# 解码为人类语言字符串(Unicode 编码):'你好'
# 第一部分 md5加密
# md5加密 对字节加密,返回的结果需要将字节转16进制字符串
# 导包
import hashlib
def get_md5(data,salt=' '):
data = hashlib.md5(data.encode())# md5加密之前需要先将处理对象 转字节 计算机只能做字节串 计算机语言
# 处理之后需要将处理后的数据 转字符串
# hex 是"十六进制" 的缩写;
# digest 是 "摘要" 的意思,特指通过哈希算法生成的固定长度的数据
md5_data = data.hexdigest() # 将计算机语言转成人类的语言
return md5_data
# 第二部分 对md5产生的数据 做RSA加密
# 导包
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
# PKCS1: Public-Key Cryptography Standards 1,公钥密码学标准1。
# Cipher:指加密和解密数据的过程,或者指用于加密和解密的算法。
import base64
def get_rsa(md5_data):
# 读 公钥
with open('./public.pem') as file:
# 将内容赋值给公钥
public_key_file=file.read()
# 调用RSA类 并调用 放入公钥方法 实例化了一个毒药瓶子
public_key=RSA.import_key(public_key_file)
# 实例化出来一个秘书 秘书手里有两个东西
# 一个是毒药瓶子 也就是加密的公钥,外人会被毒死,自己人不会
cipher = PKCS1_cipher.new(public_key)
# 另一个是被加密的信封 md5_data,
# 秘书做对信封做加密动作
# 步骤1 加密
# 步骤2 将md5处理过的数据转化为字节类型 为了被rsa加密
# 步骤3 将加密的数据转64位字节; base64.b64encode()函数编码后的结果是一个字节串(bytes)
# 步骤4 注意 这里使用64位是因为开发设计这个接口的时候 要求了64位;
rsa_data = base64.b64encode(cipher.encrypt(md5_data.encode()))# 计算机的字节串 做加密操作
# 步骤4 将处理结果decode转为字符串
return rsa_data.decode() # 计算机语言转换为人类可读的语言
# 实例化
if __name__ == '__main__':
result1=get_md5('fqs')
result2=get_rsa(result1)
print(result2)