因为前端的rsa是将base64封装到里面了, python的rsa加密不经过base64处理的话 是 字节串
,字节串不利于传输所以需要转成base64.
加密流程 :
RSA加密 > BASE64加密
解密流程 :BASE64解密 > RSA解密
有长度限制.
import base64
import rsa
def create_keys(): # 生成公钥和私钥
Public_key, Private_key = rsa.newkeys(1024)
pub = Public_key.save_pkcs1()
with open('Public_key.pem', 'wb+')as f: # 公
f.write(pub)
pri = Private_key.save_pkcs1()
with open('Private_key.pem', 'wb+')as f: # 私
f.write(pri)
def encrypt(content): # 用公钥加密
with open('Public_key.pem', 'rb') as Public_key:
p = Public_key.read()
pubkey = rsa.PublicKey.load_pkcs1(p)
original_text = str(content).encode('utf8') # 加密前处理
Encrypted_content = rsa.encrypt(original_text, pubkey)
cipher_text = base64.b64encode(Encrypted_content).decode() # base64 加密
return cipher_text # 加密后的密文
def decrypt(encryption_text): # 用私钥解密
with open('Private_key.pem', 'rb') as Private_key:
p = Private_key.read()
cipher_text = (base64.b64decode(encryption_text)) # base64 解密
secret_key = rsa.PrivateKey.load_pkcs1(p)
Decrypt_content = rsa.decrypt(cipher_text, secret_key).decode() # 注意,这里如果结果是bytes类型,就需要进行decode()转化为str
return Decrypt_content
if __name__ == '__main__':
# create_keys()
crypt_text = encrypt({"code": 1})
print(crypt_text)
print(decrypt(crypt_text))
无长度限制,分段式加解密.
1.0 这里是使用了 Crypto
,Windows 上安装这个有时候会有问题.
import base64
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
def create_keys(): # 生成公钥和私钥
Public_key, Private_key = rsa.newkeys(1024)
pub = Public_key.save_pkcs1()
with open('../static/pem/Public_key.pem', 'wb+')as f: # 公
f.write(pub)
pri = Private_key.save_pkcs1()
with open('../static/pem/Private_key.pem', 'wb+')as f: # 私
f.write(pri)
# 分段长加密
def c_jia_mi(msg: str): # Crypto 加密
# 获取公钥
key = open('../static/pem/Public_key.pem').read()
public_key = RSA.importKey(key)
# 分段加密
pk = PKCS1_v1_5.new(public_key)
encrypt_text = []
for i in range(0, len(msg), 100):
cont = msg[i:i + 100]
encrypt_text.append(pk.encrypt(cont.encode()))
# 加密完进行拼接
cipher_text = b''.join(encrypt_text)
# base64进行编码
result = base64.b64encode(cipher_text)
return result.decode()
# 分段长解密
def c_jie_mi(msg: str): # Crypto 解密
# base64解码
msg = base64.b64decode(msg)
# 获取私钥
private_key = open('../static/pem/Private_key.pem').read()
rsa_key = RSA.importKey(private_key)
cipher = PKCS1_v1_5.new(rsa_key)
# 进行解密
text = []
for i in range(0, len(msg), 128):
cont = msg[i:i + 128]
text.append(cipher.decrypt(cont, 1))
text = b''.join(text)
return text.decode()
2.0 这里是使用了 rsa
, Windows可以直接安装这个.( 我测试没啥问题,这是我根据Crypto改的.)
import base64
import rsa
# 分段长加密_RSA
def r_jia_mi_1(msg: str): # RAS 加密
# 获取公钥
with open('../static/pem/Public_key.pem', 'rb') as Public_key:
p = Public_key.read()
pubkey = rsa.PublicKey.load_pkcs1(p)
encrypt_text = []
for i in range(0, len(msg), 100):
cont = msg[i:i + 100]
encrypt_text.append(rsa.encrypt(str(cont).encode('utf8'), pubkey))
# 加密完进行拼接
cipher_text = b''.join(encrypt_text)
# base64进行编码
result = base64.b64encode(cipher_text)
return result.decode()
# 分段长解密
def r_jie_mi(msg: str): # RSA 解密
# base64解码
msg = base64.b64decode(msg)
# 获取私钥
with open('../static/pem/Private_key.pem', 'rb') as Private_key:
p = Private_key.read()
secret_key = rsa.PrivateKey.load_pkcs1(p)
# 进行解密
text = []
for i in range(0, len(msg), 128):
cont = msg[i:i + 128]
text.append(rsa.decrypt(cont, secret_key))
text = b''.join(text)
return text.decode()