python实现公钥加密算法进行加解密和数字签名

要在Python中使用公钥加密算法进行加解密和数字签名,我们可以使用cryptography库。这个库提供了一系列密码学工具和原语。首先,确保你安装了cryptography库。如果还没有安装,可以通过pip安装:

pip install cryptography

下面是一个使用cryptography库进行加密、解密和数字签名的示例:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding

# 生成密钥对
def generate_keys():
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=2048,
        backend=default_backend()
    )
    public_key = private_key.public_key()
    return private_key, public_key

# 加密
def encrypt(message, public_key):
    encrypted = public_key.encrypt(
        message,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    return encrypted

# 解密
def decrypt(encrypted, private_key):
    original_message = private_key.decrypt(
        encrypted,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    return original_message

# 签名
def sign(message, private_key):
    signature = private_key.sign(
        message,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    return signature

# 验证签名
def verify(signature, message, public_key):
    try:
        public_key.verify(
            signature,
            message,
            padding.PSS(
                mgf=padding.MGF1(hashes.SHA256()),
                salt_length=padding.PSS.MAX_LENGTH
            ),
            hashes.SHA256()
        )
        return True
    except:
        return False

# 使用示例
private_key, public_key = generate_keys()

# 加解密示例
message = b"Hello, World!"
encrypted_msg = encrypt(message, public_key)
print("Encrypted:", encrypted_msg)
decrypted_msg = decrypt(encrypted_msg, private_key)
print("Decrypted:", decrypted_msg)

# 签名和验证示例
signature = sign(message, private_key)
print("Signature:", signature)
verification = verify(signature, message, public_key)
print("Verification:", verification)

这段代码首先生成一个RSA密钥对,然后使用公钥加密一条消息并用私钥解密。接着,它用私钥对消息进行签名,并使用公钥验证这个签名。如果verify函数返回True,表示签名验证成功;如果返回False,表示验证失败。

你可能感兴趣的:(python,开发语言)