python이 sm2와 sm4 국밀(국가 상용 암호) 알고리즘을 실현하는 예시

GMSSL 모듈 소개
GmSSL은 소스 암호화 패키지의python 구현으로 SM2/SM3/SM4 등 국밀(국가 상용 암호) 알고리즘을 지원하고 프로젝트는 상업 응용에 우호적인 클래스 BSD 소스 개설 허가증을 사용하며 소스 개설 및 소스 폐쇄 상업 응용에 사용할 수 있다.
설치 모듈

pip install gmssl
https://github.com/duanhongyi/gmssl/blob/master/README.md 공식 문서
SM2 알고리즘
RSA 알고리즘의 위기는 아지수 알고리즘이 존재하는 데 있다. ECC 알고리즘에 있어 일반적으로 아지수 공격 알고리즘 SM2 타원 곡선 키 암호화 알고리즘이 없다. 중국 자율 지적재산권의 상용 암호화 알고리즘은 ECC(Elliptic Curve Cryptosystem) 알고리즘의 일종이다. 타원 곡선 이산 대수 문제를 바탕으로 계산의 복잡도는 지수급이고 해답의 난이도가 비교적 높으며 동등한 안전 정도의 요구에 따라타원 곡선 암호는 다른 공공 키 알고리즘에 필요한 키 길이보다 훨씬 작다.
gmssl은 국밀 SM2 알고리즘을 포함하는 Python 구현으로 encrypt, decrypt 등 함수를 제공하여 암호화 복호화에 사용합니다. 사용법은 다음과 같습니다.
1. CryptSM2 초기화

import base64
import binascii
from gmssl import sm2, func
#16 
private_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5'
public_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207'
sm2_crypt = sm2.CryptSM2(
  public_key=public_key, private_key=private_key)
2. encrypt 및 decrypt

# bytes 
data = b"111"
enc_data = sm2_crypt.encrypt(data)
dec_data =sm2_crypt.decrypt(enc_data)
assert dec_data == data
3. sign 및 verify

data = b"111" # bytes 
random_hex_str = func.random_hex(sm2_crypt.para_len)
sign = sm2_crypt.sign(data, random_hex_str) # 16 
assert sm2_crypt.verify(sign, data) # 16 
SM4 알고리즘
국밀 SM4(무선 랜 SMS4) 알고리즘, 하나의 그룹 알고리즘, 그룹 길이는 128bit, 키 길이는 128bit, 알고리즘의 구체적인 내용은 SM4 알고리즘을 참조한다.
gmssl은 국밀 SM4 알고리즘을 포함하는 Python 구현으로 encrypt_ecb, decrypt_ecb, encrypt_cbc, decrypt_cbc 등 함수를 제공하여 암호화 해독에 사용하는데 다음과 같다.
1. CryptSM4 초기화

from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT

key = b'3l5butlj26hvv313'
value = b'111' # bytes 
iv = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' # bytes 
crypt_sm4 = CryptSM4()
2. encrypt_ecb 및 decrypt_ecb

crypt_sm4.set_key(key, SM4_ENCRYPT)
encrypt_value = crypt_sm4.crypt_ecb(value) # bytes 
crypt_sm4.set_key(key, SM4_DECRYPT)
decrypt_value = crypt_sm4.crypt_ecb(encrypt_value) # bytes 
assert value == decrypt_value
3. encrypt_cbc 및 decrypt_cbc

crypt_sm4.set_key(key, SM4_ENCRYPT)
encrypt_value = crypt_sm4.crypt_cbc(iv , value) # bytes 
crypt_sm4.set_key(key, SM4_DECRYPT)
decrypt_value = crypt_sm4.crypt_cbc(iv , encrypt_value) # bytes 
assert value == decrypt_value
이상은python이 sm2와 sm4 국밀(국가 상용 암호) 알고리즘을 실현하는 예시의 상세한 내용입니다. 더 많은python이 국가 상용 암호 알고리즘을 실현하는 것에 대한 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기