python 实现sm3国密算法

from gmssl import sm3
import hmac


def encrypt(src: str):
    """
    国密SM3加密
    :param src: 原始字符串
    :return: 哈希值
    """
    return sm3_hash(src)


def sm3_hash(src: str):
    msg_list = [i for i in bytes(src.encode('utf-8'))]
    return sm3.sm3_hash(msg_list).upper()


def verify(src: str, sm3_hex_str: str):
    new_hex_str = sm3_hash(src)
    return new_hex_str == sm3_hex_str


def encrypt_with_key(src: str, key: str):
    """
    SM3+HMAC加密
    :param src: 原始字符串
    :param key: HMAC密钥
    :return: 哈希值
    """
    return hmac_hash(src, key, 'SM3')


def hmac_hash(src: str, key: str, mod: str):
    return hmac.new(key.encode('utf-8'), src.encode('utf-8'), mod).hexdigest().upper()


def verify_with_key(src: str, sm3_hex_str: str, key: str):
    new_hex_str = hmac_hash(src, key, 'SM3')
    return new_hex_str == sm3_hex_str


if __name__ == "__main__":
    src = "测试字符串"
    key = "ABCDEF"

    hash_str = encrypt(src)
    flag = verify(src, hash_str)
    print(hash_str)
    print(flag)

    hash_str = encrypt_with_key(src, key)
    flag = verify_with_key(src, hash_str, key)
    print(hash_str)
    print(flag)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值