Skip to main content

python实现的国密SM2/SM3/SM4算法库

Project description

gd_sm

软件说明

这是一个python实现的国密算法库,按照国密规范实现了sm2/sm3/sm4算法,其中sm2的功能主要是参考gmssl 库,在其基础上进行了一定的完善。 sm3和sm4是利用了cryptography库,采用这个库进行了sm3和sm4运算,这里只是对其进行了简单封装。

每个模块实现了以下功能,在使用这些函数或方法时,传入的数据需要是16进制字符串或者bytes格式( 传入bytes格式会被转成16进制字符串处理), 返回的数据均为16进制字符串,建议调用的时候统一使用16进制字符串。

  • sm2:
    • sign: 使用sm2私钥进行签名
    • verify: 使用sm2公钥进行验签
    • encrypt: 使用sm2公钥进行加密
    • decrypt: 使用sm2私钥进行加密
    • private_key_export_pubkey: 通过私钥导出公钥
  • sm3:
    • sm3_hash: 计算sm3 hash值
    • check_sm3: 校验sm3 hash值是否正确
  • sm4:
    • encrypt: sm4加密,支持ecb/cbc模式,不填充或者采用pkcs7 padding填充
    • decrypt: sm4解密,支持ecb/cbc模式,不填充或者采用pkcs7 padding填充

使用说明

使用pip安装本项目pip install gd_sm,在代码中使用from gd_sm import *语句引用,详细参考下面的示例章节

示例

from gd_sm import *

# sm2使用示例
s2 = sm2.SM2()  # 示例化一个sm2对象
print(f"实例化一个sm2对象,私钥:{s2.private_key}, 公钥:{s2.public_key}")  # 打印对象的公私钥
data = "C27AA65FCA082F8959D8B0F71764B6C5CA02C0AAD27C0CF6B393E61136B82EA9"  # 待处理的数据,16进制字符串格式
sign_data = s2.sign(data)  # 使用私钥签名
valid_sign = s2.verify(data, sign_data)  # 公钥验签
assert valid_sign is True
enc_data = s2.encrypt(data)  # 公钥加密
dec_data = s2.decrypt(enc_data)  # 私钥解密
assert dec_data.lower() == data.lower()

# sm3使用示例
data = "C27AA65FCA082F8959D8B0F71764B6C5CA02C0AAD27C0CF6B393E61136B82EA9"  # 待处理的数据,16进制字符串格式
data_hash = sm3.sm3_hash(data)
valid_hash = sm3.check_sm3(data, data_hash)
assert valid_hash is True

# sm4使用示例
data = "C27AA65FCA082F8959D8B0F71764B6C5CA02C0AAD27C0CF6B393E61136B82EA9"  # 待处理的数据,16进制字符串格式
key = "000102030405060708090A0b0c0d0e0f"
iv = "00000101020203030404050506060707"
enc_data = sm4.encrypt(key, data)  # 默认ecb模式,默认不填充
dec_data = sm4.decrypt(key, enc_data)
assert dec_data.lower() == data.lower()

enc_data = sm4.encrypt(key, data, mode="cbc", iv=iv)  # 采用cbc模式,默认不填充
dec_data = sm4.decrypt(key, enc_data, mode="cbc", iv=iv)
assert dec_data.lower() == data.lower()

enc_data = sm4.encrypt(key, data, mode="cbc", iv=iv, is_pad=True)  # cbc模式,pkcs7填充
dec_data = sm4.decrypt(key, enc_data, mode="cbc", iv=iv, is_pad=True)   # cbc模式,pkcs7填充
assert dec_data.lower() == data.lower()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gd_sm-1.0.2.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gd_sm-1.0.2-py2.py3-none-any.whl (10.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file gd_sm-1.0.2.tar.gz.

File metadata

  • Download URL: gd_sm-1.0.2.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for gd_sm-1.0.2.tar.gz
Algorithm Hash digest
SHA256 c9ead6f39caaad9eaf237a6febf746e913da20a1fcd7c7ccb6bcbb453b28ebab
MD5 2d0f6ed2492c481ebe98b211ca5e2d72
BLAKE2b-256 07ac01120e65750933038d495775f2bd0da7c957c5ebab2df82c2bd4b8755269

See more details on using hashes here.

File details

Details for the file gd_sm-1.0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: gd_sm-1.0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for gd_sm-1.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f10652c3d11e54d8c8e3e2e29290b0af5a38cdadd1ee5367276721872782bf15
MD5 73cebe7fb32d0a47fdb73487ce243032
BLAKE2b-256 fe12c7ec1aa7ec2e0871faa28f7b8bde16de677cd5b407e0fe879e61abb15b7b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page