一、base64
import base64
# 编码
s1 = 'hello'
result = base64.b64encode(s1.encode()) # 只能对bytes类型编码,结果为bytes类型
print(result.decode()) # 解码为字符串
# 解码
res = "6IuR5rWpIGlzIGdvb2Q="
s2 = base64.b64decode(res.encode()) # 只能对bytes类型解码,结果为bytes类型
print(s2.decode()) # 解码为字符串
# 补全长度
s = "eW91eQ" # base64编码结果长度必须是4的倍数,如果不够则需用等号补全长度
s += ("=" * (4 - len(s) % 4)) # 补全长度
print("填充后", s)
ret = base64.b64decode(s.encode()).decode()
print(ret)
二、MD5、SHA1
# 摘要算法:通过一个hash函数计算一个不定长的字串串得到一个定长的结果
from hashlib import md5, sha256, sha512
# 案例1
md5_obj = md5()
data = "123"
md5_obj.update(data.encode()) # 一定是字节数据
ret = md5_obj.hexdigest()
print(ret, type(ret)) # 32位 "202cb962ac59075b964b07152d234b70" <class 'str'>
print(md5_obj.digest()) # 16位字节类型,b' ,\xb9b\xacY\x07[\x96K\x07\x15-#Kp'
# 案例2: 多次更新数据,用于数据校验
md5_obj = md5()
md5_obj.update(b"hello")
md5_obj.update(b"world")
print(md5_obj.hexdigest())
# hello world: 5eb63bbbe01eeed093cb22bb8f5acdc3
三、AES加密
示例代码1:ECB加密
from Crypto.Cipher import AES
import base64
# (1)加密并base64编码
# key的长度是16
key = "alex is dsb12345".encode()
aes = AES.new(key, AES.MODE_ECB)
# data的长度是16的倍数
data = "hello yuan,you are very good".encode()
while len(data) % 16 != 0:
data += b"\0"
print(data)
# 加密数据
encrypt_data = aes.encrypt(data)
print("encrypt_data:", encrypt_data)
# base64编码
final_data = base64.b64encode(encrypt_data).decode()
print(final_data)
# (2) base64解码并解密
# 解码
data = "MFADjBGq5sw6x0imp82GgT5+ITHj5ctMLv1h94+wIao="
encrypt_data = base64.b64decode(data.encode())
print(encrypt_data)
# 解密
key = "alex is dsb12341".encode()
aes = AES.new(key, AES.MODE_ECB)
plain_data = aes.decrypt(encrypt_data)
print(plain_data)
示例代码2:CBC加密
from Crypto.Cipher import AES
import base64
# (1)加密并base64编码
# key的长度是16
key = "alex is dsb12345".encode()
iv = b"0123456789123456"
aes = AES.new(key, AES.MODE_CBC, iv)
# data的长度是16的倍数
data = "hello rain,you are very good".encode()
while len(data) % 16 != 0:
data += b"\0"
print(data)
# 加密数据
encrypt_data = aes.encrypt(data)
print("encrypt_data:", encrypt_data)
# base64编码
final_data = base64.b64encode(encrypt_data).decode()
print(final_data)
# (2) base64解码并解密
data = "7h5hPq7SVwuKItAw4vwuwcyUt2goWRonreuuBZl/BjI="
encrypt_data = base64.b64decode(data.encode())
print(encrypt_data)
# 解密
key = "alex is dsb12345".encode()
iv = b"0123456789123456"
aes = AES.new(key, AES.MODE_CBC, iv)
plain_data = aes.decrypt(encrypt_data)
print(plain_data)
四、RSA加密
from Crypto.PublicKey import RSA
# 生成秘钥
rsakey = RSA.generate(1024)
with open("rsa.public", mode="wb") as f:
f.write(rsakey.publickey().exportKey())
with open("rsa.private", mode="wb") as f:
f.write(rsakey.exportKey())
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64
# 加密
data = "我喜欢你"
with open("rsa.public", mode="r") as f:
pk = f.read()
rsa_pk = RSA.importKey(pk)
rsa = PKCS1_v1_5.new(rsa_pk)
result = rsa.encrypt(data.encode("utf-8"))
# 处理成b64方便传输
b64_result = base64.b64encode(result).decode("utf-8")
print(b64_result)
s = "D0LpKl+i4IA/M5fFBO+b/J7JL7sklzcE41MX5kqJZpJh5VnGyzcGk0Eux/2KPKrAgbFtJmeuaHPNMPd6cHZkVjrP8MLtS604wt6GtOMUIcu3qK97/zSw0a3Yel5X1yW/KNIGowTKQVYUYgEPpLto1GMnn02KTgZH61pP1vvRCjw="
with open("rsa.private", mode="r") as f:
pk = f.read()
rsa_pk = RSA.importKey(pk)
rsa = PKCS1_v1_5.new(rsa_pk)
data = rsa.decrypt(base64.b64decode(s), None)
print(data.decode())
标签:编码,加密,python,base64,rsa,encode,print,encrypt,data
From: https://www.cnblogs.com/yuan-qi/p/17496850.html