python이 sm2와 sm4 국밀(국가 상용 암호) 알고리즘을 실현하는 예시
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이 국가 상용 암호 알고리즘을 실현하는 것에 대한 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.