python-Crypto加密
使用Crypto包加密数据
import base64
from Crypto.PublicKey import RSA
def restore_public_key(public_key_str):
try:
# 解码 base64 编码的公钥字符串
encoded_key = base64.b64decode(public_key_str)
key_spec = RSA.import_key(encoded_key)
return key_spec.public_key()
except ValueError as e:
raise RuntimeError("公钥获取失败 {}".format(e))
# 测试
public_key_str = "....."
public_key = restore_public_key(public_key_str)
from Crypto.Cipher import PKCS1_v1_5
def encode_by_public_key(public_key, text):
try:
cipher = PKCS1_v1_5.new(public_key)
# 加密文本
input_bytes = text.encode('utf-8')
# 分组加密
max_encrypt_block = 117
off_set = 0
result_bytes = b''
while len(input_bytes) - off_set > 0:
if len(input_bytes) - off_set > max_encrypt_block:
cache = cipher.encrypt(input_bytes[off_set:off_set + max_encrypt_block])
off_set += max_encrypt_block
else:
cache = cipher.encrypt(input_bytes[off_set:])
off_set = len(input_bytes)
result_bytes += cache
# 返回 Base64 编码的加密结果
return base64.b64encode(result_bytes).decode('utf-8')
except ValueError as e:
raise RuntimeError("公钥加密失败 {}".format(e))
text = '{"hello word "}'
encrypted_text = encode_by_public_key(public_key, text)
print(encrypted_text)
在导入Crypto包的时候可能会遇到找不到包名的情况这是因为安装的时候默认将Crypto的首字母大写改为了小写导致找不到包名
pip3 show Crypto
#查看保存在的位置
cd /data/python/Lib/Site/crypto
mv /data/python/Lib/Site/crypto /data/python/Lib/Site/Crypto
评论区