得空,把一些之前用到的自己查找到以及自己封装好的内容拿来分享一下,希望有需要的朋友
AES加密与解密
import base64,datetime,time
from urllib import request
from Crypto.Cipher import AES
from tqdm import tqdm
#依赖安装:pip3 install pycryptodome
ENCRYPT_KEY = "chenjq"
#补足16位并返回bytes
def add_to_16(value):
while len(value) % 16 != 0:
value = value + "\0"
return str.encode(value)
#AES加密
def encrypt_aes(text):
text = request.quote(text)
aes = AES.new(add_to_16(ENCRYPT_KEY),AES.MODE_ECB)
encrypt_aec = aes.encrypt(add_to_16(text))
encrypt_text = str(base64.encodebytes(encrypt_aec),encoding="utf-8").strip()
return encrypt_text
#AES解密
def decrypt_aes(text):
aes = AES.new(add_to_16(ENCRYPT_KEY),AES.MODE_ECB)
decrypt_aec = base64.decodebytes(text.encode(encoding='utf-8'))
decrypt_text = str(aes.decrypt(decrypt_aec),encoding='utf-8').replace("\0",'')
decrypt_text = request.unquote(decrypt_text)
return decrypt_text
DES加密解密
import base64,datetime,time
from urllib import request
from Crypto.Cipher import DES
from tqdm import tqdm
#依赖安装:pip3 install pycryptodome
ENCRYPT_KEY = "29909"
#补足8位并返回bytes =================>如果是3DES,要import DES3,然后 add_to_16即可
def add_to_8(value):
while len(value) % 8 != 0:
value = value + "\0"
return value.encode(encoding='utf-8')
#DES加密
def encrypt_des(text):
text = request.quote(text)
aes = DES.new(add_to_8(ENCRYPT_KEY),DES.MODE_ECB)
encrypt_aec = aes.encrypt(add_to_8(text))
encrypt_text = str(base64.encodebytes(encrypt_aec),encoding="utf-8").strip()
return encrypt_text
#DES解密
def decrypt_des(text):
aes = DES.new(add_to_8(ENCRYPT_KEY),DES.MODE_ECB)
decrypt_aec = base64.decodebytes(text.encode(encoding='utf-8'))
decrypt_text = str(aes.decrypt(decrypt_aec),encoding='utf-8').replace("\0",'')
decrypt_text = request.unquote(decrypt_text)
return decrypt_text
BASE64加密解密
import math
BASEDATA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
# 补齐到6位_在后面补充
def add_to_6s(data):
if len(data) % 6 != 0:
data = data + "0" * (6 - len(data) % 6)
else:
pass
return data
# 补齐到6位_在前面补充
def add_to_6p(data):
if len(data) % 6 != 0:
data = "0" * (6 - len(data) % 6) + data
else:
pass
return data
def encode_base64(data):
bin_str = ""
# 将所有字符转为2进制
for letter in data:
if letter == " ":
bin_str += bin(ord(letter)).replace("b", "0")
else:
bin_str += bin(ord(letter)).replace("b", "")
# 计算可拆分的组数
count = int(math.ceil(len(bin_str) / 24))
all_str = ""
for i in range(count):
bin24 = bin_str[i * 24:(i + 1) * 24] # 每24位一组
if len(bin24) % 6 != 0:
bin24 = add_to_6s(bin24) # 不足24位,补充成6的倍数
for j in range(int(len(bin24) / 6)):
index = int(bin24[j * 6:(j + 1) * 6], 2) # 每6位一组,并转为10进制数
all_str += BASEDATA[index] # 对照base64索引表获取转换后字符
if len(all_str) % 4 != 0:
all_str += "=" * (4 - len(all_str) % 4) # 如果最终字符不是4的整数倍,用=号填充
return all_str
def decode_base64(data):
origin = data.replace("=", "") #去除补充的=号
bin_all = ""
for letter in origin:
index = BASEDATA.index(letter) #根据base64索引表取出对应数字
bin_all += add_to_6p(bin(index).replace("0b", "")) #数字换成6位的二进制数
remain = len(bin_all) % 8
if remain != 0:
bin_all = bin_all[0: - remain] #去除补充的0
all_str = ""
for i in range(int(len(bin_all) / 8)):
bin8 = bin_all[i * 8:(i + 1) * 8] #获取8位二进制数
oc = int(bin8, 2) #换成十进制
all_str += chr(oc) #换成ASCIII字符并累加
return all_str
RSA加密解密
import base64,datetime,time
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as p5
from tqdm import tqdm
from tqdm._tqdm import trange
def gen_rsa_key(pwd = "my_sign"):
key = RSA.generate(1024)
encrypted_key = key.export_key()
public_key = key.publickey().export_key()
with open("private_rsa_key.pem", "wb") as f:
f.write(encrypted_key)
with open("public_rsa_key.pem", "wb") as f:
f.write(public_key)
def encrypt_rsa(text,file="public_rsa_key.pem"):
with open(file,"r") as rd:
key = rd.read()
pubKey = RSA.import_key(key)
cipKey = p5.new(pubKey)
encrypt_text = base64.b64encode(cipKey.encrypt(text.encode(encoding="utf-8")))
return encrypt_text.decode()
def decrypt_rsa(text,file="private_rsa_key.pem"):
with open(file,"r") as f:
key = f.read()
priKey = RSA.import_key(key)
cipKey = p5.new(priKey)
decrypt_text = cipKey.decrypt(base64.b64decode(text),"ERROR")
return decrypt_text.decode()
其中的
impor tqdm
,
from tqdm.xxx import xxx
是我用于测试这些加密方式的性能时查看加解密进度的工具,可以去掉