国密算法:利用python进行sm2非对称算法的实现,国密算法库gmssl的使用

本文详细介绍了国密SM2非对称加密算法的特性,并通过Python实现了SM2算法的加密和解密过程,包括密钥对的生成和验证。内容涉及gmssl库的使用,以及自定义的Sm2Tools类,包含了KeyStore和SM2_Util两个子类,用于密钥管理和加解密操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们继续来进行国密算法的演示。
本篇演示sm2非对称算法的实现,国密算法库gmssl的使用。

一 sm2算法的特点:

  • sm2: 即椭圆曲线公钥密码算法,是由国家密码管理局发布的;
  • 非对称加密算法,即有一对不一样的密钥:公钥和私钥,公钥用来加密,私钥用来解密;
  • 公钥和私钥:公钥,可以公开。私钥:不对外公开;
  • 同一个明文,同一个公钥,每次加密结果不相等;
  • 密码复杂度高,更先进,更安全,性能更快;
  • 用于替换RSA算法。很多软件都在进行国密改造,指的就是用sm1/sm2/sm3/sm4替换掉原有的加解密算法。

二sm2算法的演示:

1. 定义一个通用sm2算法类
# -*- coding: utf-8 -*-

import binascii
import re
import requests
import logging

from gmssl import sm2, func

class Sm2Tools:
    """
    通用sm2算法类
    """
    class KeyStore:
        """
        SM2 密钥对类,包含密钥对生成、获取方法
        """
        _PRIVATE_KEY = ""
        _PUBLIC_KEY = ""

        def __init__(self) -> None:
            pass

        def setKey(self, priKey: str, pubKey: str) -> bool:
            """
            简单判断密钥对格式
            :param priKey: 私钥
            :param pubKey: 公钥
            :return: bool
            """
            result = re.match(r"^[a-fA-F\d]{64}$", priKey)
            if result is None:
                logging.error("KeyStore.setKey() -> priKey is invalid.")
                return False
            result = re.match(r"^[a-fA-F\d]{128}$", pubKey)
            if result is None:
                logging.error("KeyStore.setKey() -> pubKey is invalid.")
                return False
            self._PRIVATE_KEY = priKey
            self._PUBLIC_KEY = pubKey
            return True

        def createLocal(self) -> bool:
            """
            本地创建密钥对
            :return: bool
            """

            class 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值