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