Bootstrap

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

我们继续来进行国密算法的演示。
本篇演示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
            ""&#
;