国密sm4的加密解密使用
from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT
import binascii
from setting import EncryptKey
class SM4EncryptDecrypt:
"""
国密sm4加解密
"""
def __init__(self):
self.encrypt_key = self.decrypt_key = EncryptKey
self.crypt_sm4 = CryptSM4()
@staticmethod
def str_to_hex(hex_str):
"""
字符串转hex
:param hex_str: 字符串
:return: hex
"""
hex_data = hex_str.encode('utf-8')
str_bin = binascii.unhexlify(hex_data)
return str_bin.decode('utf-8')
def encrypt(self, value, salt):
"""
国密sm4加密
:param value: 待加密的字符串
:param salt: 盐
:return: sm4加密后的hex值
"""
crypt_sm4 = self.crypt_sm4
crypt_sm4.set_key(self.encrypt_key.encode(), SM4_ENCRYPT)
value = value + salt
encrypt_value = crypt_sm4.crypt_ecb(value.encode())
return encrypt_value.hex()
def decrypt(self, encrypt_value):
"""
国密sm4解密
:param encrypt_value: 待解密的hex值
:return: 原字符串
"""
crypt_sm4 = self.crypt_sm4
crypt_sm4.set_key(self.decrypt_key.encode(), SM4_DECRYPT)
decrypt_value = crypt_sm4.crypt_ecb(bytes.fromhex(encrypt_value))
return self.str_to_hex(decrypt_value.hex())