76 lines
1.9 KiB
Python
76 lines
1.9 KiB
Python
|
import os
|
||
|
import base64
|
||
|
|
||
|
from Crypto.PublicKey import RSA
|
||
|
from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
|
||
|
|
||
|
|
||
|
def get_key(**kwargs):
|
||
|
"""
|
||
|
获取密钥
|
||
|
Parameters:
|
||
|
key_file str 密钥文件名称
|
||
|
Returns:
|
||
|
key 密钥
|
||
|
"""
|
||
|
key_file = kwargs['key_file'] # 密钥文件
|
||
|
key_path = os.path.abspath(os.path.abspath(os.path.dirname(__file__)) + '/keys/' + key_file) # 密钥文件绝对路径
|
||
|
with open(key_path) as f:
|
||
|
data = f.read()
|
||
|
key = RSA.importKey(data)
|
||
|
return key
|
||
|
|
||
|
|
||
|
def encrypt_data(**kwargs):
|
||
|
"""
|
||
|
用公钥加密
|
||
|
Parameters:
|
||
|
msg str 待加密信息
|
||
|
Returns:
|
||
|
加密后结果
|
||
|
"""
|
||
|
msg = kwargs['msg'] # 待加密信息
|
||
|
public_key = get_key(key_file='rsa_public_key.pem') # 获取密钥
|
||
|
cipher = PKCS1_cipher.new(public_key)
|
||
|
encrypt_text = base64.b64encode(cipher.encrypt(bytes(msg.encode("utf8"))))
|
||
|
return encrypt_text.decode('utf-8')
|
||
|
|
||
|
|
||
|
def decrypt_data(**kwargs):
|
||
|
"""
|
||
|
用私钥解密
|
||
|
Parameters:
|
||
|
encrypt_msg str 加密信息
|
||
|
Returns:
|
||
|
执行正确 解密后结果
|
||
|
执行错误 False
|
||
|
"""
|
||
|
try:
|
||
|
encrypt_msg = kwargs['encrypt_msg'] # 加密信息
|
||
|
private_key = get_key(key_file='rsa_private_key.pem') # 获取密钥
|
||
|
cipher = PKCS1_cipher.new(private_key)
|
||
|
back_text = cipher.decrypt(base64.b64decode(encrypt_msg), 0)
|
||
|
return back_text.decode('utf-8')
|
||
|
except Exception:
|
||
|
return False
|
||
|
|
||
|
|
||
|
def check_data(**kwargs):
|
||
|
"""
|
||
|
对比数据和加密数据
|
||
|
Parameters:
|
||
|
msg str 数据
|
||
|
encrypt_msg str 加密数据
|
||
|
Returns:
|
||
|
True 对比正确
|
||
|
False 对比错误
|
||
|
"""
|
||
|
msg = kwargs['msg']
|
||
|
decrypt_msg = decrypt_data(encrypt_msg=kwargs['encrypt_msg'])
|
||
|
if decrypt_msg is False:
|
||
|
return False
|
||
|
elif msg == decrypt_msg:
|
||
|
return True
|
||
|
else:
|
||
|
return False
|