侧边栏壁纸
博主头像
gale-blog博主等级

少年一贯快马扬帆,道阻且长不转弯,要盛大,要绚烂,要哗然,要用理想的泰坦尼克号去撞现实冰川,要当烧赤壁的风,而非借箭草船,要为了一片海,就肯翻万山

  • 累计撰写 39 篇文章
  • 累计创建 5 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

Crypto加密数据

二月在这里
2024-04-09 / 0 评论 / 0 点赞 / 30 阅读 / 1718 字

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

0

评论区