赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前段时间的MQTT的项目要加上加密功能,之前用locust跑的数据要加上加解密,之前没有接触过国密,这次顺带着学习一下,然后发现网上搜索的数据都是没法直接执行的,和问AI的没啥区别,最后只好去了解了下怎么生成sm2的密钥对原理。
密码学在现代通信和数据保护中起着重要的作用。SM2是中国自主设计的一种椭圆曲线公钥密码体制,广泛应用于数字签名、加密和密钥交换等领域。本文将介绍如何使用Python随机生成国密SM2密钥对,并利用生成的密钥进行加解密操作。
SM2是中国国家密码管理局(SAC)发布的一种基于椭圆曲线密码算法的公钥密码体制。它采用了椭圆曲线离散对数难题作为安全基础,具有高度的安全性和性能优势。SM2包括密钥生成、加密、解密和签名等基本操作,适用于各种信息安全应用场景。
Python提供了丰富的密码学库,其中包括了对SM2密码学算法的支持。下面是使用Python生成国密SM2密钥对的步骤:
from gmssl import sm2, func
1.生成随机数d,是一个256位的随机数,表示私钥
2.通过SM2椭圆曲线上的标量乘法运算,计算公钥P=d·G,其中G是椭圆曲线上的一个固定点,称为基点或生成点。
3.这样就得出了私钥和公钥,这时候的公钥需要在前面加上04表示未压缩
private_key=func.random_hex(64) # 生成随机64字节的16进制私钥
public_key = sm2.CryptSM2._kg('这里填写私钥', '这里填写基点') # 通过私钥生成随机128字节的16进制公钥,这里要注意格式
public_key = '04' + public_key # 生成128字节的16进制公钥加上04标识符,表示未压缩
public_key为上面生成的130字符的16进制公钥
private_key为上面生成的64字符的16进制私钥
sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key=private_key, mode=1, asn1=True)
# 要加密的数据
plaintext = b"Hello, World!"
# 使用公钥对数据进行加密
ciphertext = sm2_crypt.encrypt(plaintext)
# 使用私钥对数据进行解密
decrypted_text = sm2_crypt.decrypt(ciphertext)
# 打印加密和解密结果
print("加密后的数据:", ciphertext.hex())
print("解密后的数据:", decrypted_text.decode())
最后附上执行结果
有些东西问AI也是不靠谱的,我问了好几个AI,看似没啥问题,实际都是无法执行的错误答案,而网上搜索的答案很多都是和AI回答的一样,要不就是收费的文章,看不了(主要是太贵了,将近一百了),想白嫖都不行,不过还是真的还是要自己了解原理,这只是才知识才是自己的本文介绍了如何使用Python随机生成国密SM2密钥对,并利用生成的密钥进行加解密操作。通过使用Python提供的密码学库,我们可以轻松地进行国密SM2密码学算法的相关操作。使用国密算法能够提供更高的安全性和性能,适用于各种信息安全应用场景。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。