python实现对称秘钥加解密和非对称秘钥加解密

python实现对称秘钥加解密和非对称秘钥加解密

代码示例:

# -*- coding: utf-8 -*-

import os
import sys

import base64
import traceback
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
from Crypto.Cipher import ARC4

priv_file = "priv.pem"
pub_file = "pub.pem"

# 根据文件获取RSA对象
def get_rsa_key_obj(key_file) :
    key_obj = None 
    with open(key_file, "r") as f:
        key_str = f.read()
        key_obj = PKCS1_v1_5.new(RSA.importKey(key_str))
    return key_obj

# 使用RSA公钥加密
def rsa_encrypt(key_obj, plaintext, length=100) :
    try:
        data_lst = []
        for i in range(0, len(plaintext), length):
            data_tmp = key_obj.encrypt(plaintext[i:i+length])
            data_lst.append(data_tmp)
        ciphertext = b"".join(data_lst)
        msg_b64 = base64.b64encode(ciphertext)
        return msg_b64
    except Exception as e:
        traceback.print_exc()
        return None
    
# 使用RSA私钥解密
def rsa_decrypt3(key_obj, msg_b64, length=128) :
    msg = base64.b64decode(msg_b64)
    try:
        data_lst = []
        for i in range(0, len(msg), length):
            data_tmp = key_obj.decrypt(msg[i:i+length],"")
            data_lst.append(data_tmp) 
        plaintext = b''.join(data_lst)
        return plaintext 
    except Exception :
        traceback.print_exc()
        return None

# rc4解密
def rc4_encrypt(msg,key):
    cipher = ARC4.new(key)
    ciphertext=cipher.encrypt(msg)
    return base64.b64encode(ciphertext)

# rc4加密
def rc4_decrypt(msg,key):
    cipher = ARC4.new(key)
    ciphertext = base64.b64decode(msg)
    return cipher.decrypt(ciphertext)


if __name__ == "__main__":
    RSA_pub_key_obj = get_rsa_key_obj(pub_file) 
    RSA_priv_key_obj = get_rsa_key_obj(priv_file) 

    ret = rsa_encrypt(RSA_pub_key_obj, b"12345678")
    print(ret)
    print("length : "+str(len(ret)))
    ret = rsa_decrypt3(RSA_priv_key_obj, ret) 
    print(ret)
    print("length : "+str(len(ret)))

    ret = rc4_encrypt(b"1234567890", b"abcde")
    print(ret)
    print("length : "+str(len(ret)))
    ret = rc4_decrypt(ret, b"abcde")
    print(ret)
    print("length : "+str(len(ret)))

生成一个密钥对 priv.pem,并把公钥 pub.pem 从密钥对里提取出来。

测试:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注