|
|
@ -1,9 +1,10 @@
|
|
|
|
import base64
|
|
|
|
import base64
|
|
|
|
import binascii
|
|
|
|
import binascii
|
|
|
|
|
|
|
|
|
|
|
|
from Crypto.Cipher import PKCS1_OAEP
|
|
|
|
from Crypto.Cipher import PKCS1_OAEP
|
|
|
|
|
|
|
|
from Crypto.Hash import SHA256
|
|
|
|
from Crypto.PublicKey import RSA
|
|
|
|
from Crypto.PublicKey import RSA
|
|
|
|
from Crypto.Signature import pkcs1_15
|
|
|
|
from Crypto.Signature import pkcs1_15
|
|
|
|
from Crypto.Hash import SHA256
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_keys(priKeySavePath, pubKeySavePath):
|
|
|
|
def generate_keys(priKeySavePath, pubKeySavePath):
|
|
|
@ -20,46 +21,53 @@ def generate_keys(priKeySavePath, pubKeySavePath):
|
|
|
|
with open(pubKeySavePath, "wb") as f:
|
|
|
|
with open(pubKeySavePath, "wb") as f:
|
|
|
|
f.write(public_key)
|
|
|
|
f.write(public_key)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
def encrypt_message(message, public_key_base64):
|
|
|
|
输入:
|
|
|
|
|
|
|
|
需要公私钥加解密的消息:字节类型
|
|
|
|
|
|
|
|
公私钥:base64
|
|
|
|
|
|
|
|
输出:
|
|
|
|
|
|
|
|
加解密后的数据:字节类型
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
def encrypt_message(message: bytes, public_key_base64):
|
|
|
|
# 加载公钥
|
|
|
|
# 加载公钥
|
|
|
|
public_key_bin = base64.b64decode(public_key_base64)
|
|
|
|
public_key_bin = base64.b64decode(public_key_base64)
|
|
|
|
public_key = RSA.import_key(public_key_bin)
|
|
|
|
public_key = RSA.import_key(public_key_bin)
|
|
|
|
# 使用公钥加密消息
|
|
|
|
# 使用公钥加密消息
|
|
|
|
cipher_rsa = PKCS1_OAEP.new(public_key)
|
|
|
|
cipher_rsa = PKCS1_OAEP.new(public_key)
|
|
|
|
encrypted_message = cipher_rsa.encrypt(message.encode('utf-8'))
|
|
|
|
encrypted_message = cipher_rsa.encrypt(message)
|
|
|
|
|
|
|
|
|
|
|
|
return binascii.hexlify(encrypted_message).decode('utf-8')
|
|
|
|
return encrypted_message
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def decrypt_message(encrypted_message, private_key_base64):
|
|
|
|
def decrypt_message(encrypted_message: bytes, private_key_base64):
|
|
|
|
# 加载私钥
|
|
|
|
# 加载私钥
|
|
|
|
private_key_bin = base64.b64decode(private_key_base64)
|
|
|
|
private_key_bin = base64.b64decode(private_key_base64)
|
|
|
|
private_key = RSA.import_key(private_key_bin)
|
|
|
|
private_key = RSA.import_key(private_key_bin)
|
|
|
|
# 使用私钥解密消息
|
|
|
|
# 使用私钥解密消息
|
|
|
|
cipher_rsa = PKCS1_OAEP.new(private_key)
|
|
|
|
cipher_rsa = PKCS1_OAEP.new(private_key)
|
|
|
|
decrypted_message = cipher_rsa.decrypt(binascii.unhexlify(encrypted_message))
|
|
|
|
decrypted_message = cipher_rsa.decrypt(encrypted_message)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return decrypted_message
|
|
|
|
|
|
|
|
|
|
|
|
return decrypted_message.decode('utf-8')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def sign_message(message, private_key_base64):
|
|
|
|
def sign_message(message: bytes, private_key_base64):
|
|
|
|
# 加载私钥
|
|
|
|
# 加载私钥
|
|
|
|
private_key_bin = base64.b64decode(private_key_base64)
|
|
|
|
private_key_bin = base64.b64decode(private_key_base64)
|
|
|
|
private_key = RSA.import_key(private_key_bin)
|
|
|
|
private_key = RSA.import_key(private_key_bin)
|
|
|
|
# 计算消息的哈希值
|
|
|
|
# 计算消息的哈希值
|
|
|
|
hash_obj = SHA256.new(message.encode('utf-8'))
|
|
|
|
hash_obj = SHA256.new(message)
|
|
|
|
# 使用私钥对哈希值进行签名
|
|
|
|
# 使用私钥对哈希值进行签名
|
|
|
|
signature = pkcs1_15.new(private_key).sign(hash_obj)
|
|
|
|
signature = pkcs1_15.new(private_key).sign(hash_obj)
|
|
|
|
|
|
|
|
|
|
|
|
return binascii.hexlify(signature).decode('utf-8')
|
|
|
|
return binascii.hexlify(signature).decode('utf-8')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def verify_signature(message, signature, public_key_base64):
|
|
|
|
def verify_signature(message: bytes, signature, public_key_base64):
|
|
|
|
# 加载公钥
|
|
|
|
# 加载公钥
|
|
|
|
public_key_bin = base64.b64decode(public_key_base64)
|
|
|
|
public_key_bin = base64.b64decode(public_key_base64)
|
|
|
|
public_key = RSA.import_key(public_key_bin)
|
|
|
|
public_key = RSA.import_key(public_key_bin)
|
|
|
|
# 计算消息的哈希值
|
|
|
|
# 计算消息的哈希值
|
|
|
|
hash_obj = SHA256.new(message.encode('utf-8'))
|
|
|
|
hash_obj = SHA256.new(message)
|
|
|
|
# 使用公钥验证签名
|
|
|
|
# 使用公钥验证签名
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
pkcs1_15.new(public_key).verify(hash_obj, binascii.unhexlify(signature))
|
|
|
|
pkcs1_15.new(public_key).verify(hash_obj, binascii.unhexlify(signature))
|
|
|
|