使用 GMSSL 在 Python 中的实现

一、概述

GMSSL(国密SSL)是我国自主研发的一种加密算法库,符合国家密码标准。作为一名开发者,了解如何在 Python 中使用 GMSSL 是一项基本技能。本文将带您一步步实现 GMSSL 的基本用法。

二、整体流程

为了让您更好地理解整个过程,首先,我们用一个表格展示步骤:

步骤 描述
1 安装 gmssl
2 导入库
3 创建一个密钥对
4 消息加密
5 消息解密
6 验证签名
7 提供完整的示例代码

三、每一步的详细说明

1. 安装 gmssl

首先,确保你的 Python 环境中安装了 gmssl 库。你可以通过 pip 命令来安装它:

pip install gmssl

2. 导入库

在你的 Python 文件中,导入所需的 gmssl 模块:

from gmssl import sm2, sm3, sm4, func
  • sm2:用于处理 SM2 密钥生成、加密、解密、签名等。
  • sm3:用于消息摘要算法。
  • sm4:用于对称加密。
  • func:包含一些辅助函数。

3. 创建一个密钥对

创建一个 SM2 密钥对,并把私钥和公钥存起来:

# 生成 SM2 密钥对
def generate_key_pair():
    sm2_crypt = sm2.Cryptography()
    private_key, public_key = sm2_crypt.generate_keypair()  # 生成密钥对
    return private_key, public_key

private_key, public_key = generate_key_pair()
print(f"私钥: {private_key}")
print(f"公钥: {public_key}")
  • generate_keypair():生成一个密钥对。

4. 消息加密

使用公钥对消息进行加密:

def encrypt_message(public_key, message):
    sm2_crypt = sm2.Cryptography(public_key=public_key, private_key=None)  # 只提供公钥
    ciphertext = sm2_crypt.encrypt(message.encode())  # 加密消息
    return ciphertext

message = "你好,世界!"
ciphertext = encrypt_message(public_key, message)
print(f"加密后的消息: {ciphertext.hex()}")
  • encrypt():执行加密操作。

5. 消息解密

使用私钥对消息进行解密:

def decrypt_message(private_key, ciphertext):
    sm2_crypt = sm2.Cryptography(public_key=None, private_key=private_key)  # 只提供私钥
    decrypted_message = sm2_crypt.decrypt(ciphertext)  # 解密消息
    return decrypted_message.decode()

decrypted_message = decrypt_message(private_key, ciphertext)
print(f"解密后的消息: {decrypted_message}")
  • decrypt():执行解密操作。

6. 验证签名

使用私钥对消息进行签名,并用公钥验证签名:

def sign_message(private_key, message):
    sm2_crypt = sm2.Cryptography(public_key=None, private_key=private_key)
    signature = sm2_crypt.sign(message.encode())  # 签名
    return signature

def verify_signature(public_key, message, signature):
    sm2_crypt = sm2.Cryptography(public_key=public_key, private_key=None)
    is_valid = sm2_crypt.verify(signature, message.encode())  # 验证签名
    return is_valid

signature = sign_message(private_key, message)
print(f"签名: {signature.hex()}")

# 验证签名
is_valid = verify_signature(public_key, message, signature)
print(f"签名有效性: {is_valid}")
  • sign():执行签名操作。
  • verify():验证签名的有效性。

7. 提供完整的示例代码

将上述所有步骤整合成一个完整的 Python 示例,形成一个简单的类结构。

class GMSSLExample:
    def __init__(self):
        self.private_key, self.public_key = self.generate_key_pair()

    def generate_key_pair(self):
        sm2_crypt = sm2.Cryptography()
        private_key, public_key = sm2_crypt.generate_keypair()
        return private_key, public_key

    def encrypt_message(self, message):
        sm2_crypt = sm2.Cryptography(public_key=self.public_key, private_key=None)
        ciphertext = sm2_crypt.encrypt(message.encode())
        return ciphertext

    def decrypt_message(self, ciphertext):
        sm2_crypt = sm2.Cryptography(public_key=None, private_key=self.private_key)
        decrypted_message = sm2_crypt.decrypt(ciphertext)
        return decrypted_message.decode()

    def sign_message(self, message):
        sm2_crypt = sm2.Cryptography(public_key=None, private_key=self.private_key)
        return sm2_crypt.sign(message.encode())

    def verify_signature(self, message, signature):
        sm2_crypt = sm2.Cryptography(public_key=self.public_key, private_key=None)
        return sm2_crypt.verify(signature, message.encode())

# 使用示例
example = GMSSLExample()
message = "你好,世界!"
ciphertext = example.encrypt_message(message)
decrypted_message = example.decrypt_message(ciphertext)
signature = example.sign_message(message)
is_valid = example.verify_signature(message, signature)

print(f"加密后的消息: {ciphertext.hex()}")
print(f"解密后的消息: {decrypted_message}")
print(f"签名: {signature.hex()}")
print(f"签名有效性: {is_valid}")

四、类图

以下是 GMSSLExample 类的类图,使用 Mermaid 语法表示:

classDiagram
    class GMSSLExample {
        +generate_key_pair()
        +encrypt_message(message)
        +decrypt_message(ciphertext)
        +sign_message(message)
        +verify_signature(message, signature)
        -private_key
        -public_key
    }

五、饼状图

以下是一个表示 GMSSL 使用情况的饼图,使用 Mermaid 语法表示:

pie
    title GMSSL 使用示例
    "加密": 30
    "解密": 30
    "签名": 20
    "验证签名": 20

六、总结

在本文中,我们详细讲解了如何在 Python 中使用 GMSSL 的基础流程。希望通过这些步骤,您对 GMSSL 有了初步的理解和应用。 如果您在实现过程中有任何问题,欢迎随时提问,Happy coding!