当前位置:   article > 正文

用python实现随机生成sm2密钥对,并进行加解密_python sm2

python sm2

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

前段时间的MQTT的项目要加上加密功能,之前用locust跑的数据要加上加解密,之前没有接触过国密,这次顺带着学习一下,然后发现网上搜索的数据都是没法直接执行的,和问AI的没啥区别,最后只好去了解了下怎么生成sm2的密钥对原理。
密码学在现代通信和数据保护中起着重要的作用。SM2是中国自主设计的一种椭圆曲线公钥密码体制,广泛应用于数字签名、加密和密钥交换等领域。本文将介绍如何使用Python随机生成国密SM2密钥对,并利用生成的密钥进行加解密操作。


一、SM2密码学简介

SM2是中国国家密码管理局(SAC)发布的一种基于椭圆曲线密码算法的公钥密码体制。它采用了椭圆曲线离散对数难题作为安全基础,具有高度的安全性和性能优势。SM2包括密钥生成、加密、解密和签名等基本操作,适用于各种信息安全应用场景。

二、Python生成国密SM2密钥对

Python提供了丰富的密码学库,其中包括了对SM2密码学算法的支持。下面是使用Python生成国密SM2密钥对的步骤:

1.导入相关库

from gmssl import sm2, func
  • 1

2.了解密钥对生成原理,并生成随机sm2密钥对

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标识符,表示未压缩
  • 1
  • 2
  • 3

3.使用Python进行SM2加解密

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())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

最后附上执行结果
在这里插入图片描述


总结

有些东西问AI也是不靠谱的,我问了好几个AI,看似没啥问题,实际都是无法执行的错误答案,而网上搜索的答案很多都是和AI回答的一样,要不就是收费的文章,看不了(主要是太贵了,将近一百了),想白嫖都不行,不过还是真的还是要自己了解原理,这只是才知识才是自己的AI回答的答案本文介绍了如何使用Python随机生成国密SM2密钥对,并利用生成的密钥进行加解密操作。通过使用Python提供的密码学库,我们可以轻松地进行国密SM2密码学算法的相关操作。使用国密算法能够提供更高的安全性和性能,适用于各种信息安全应用场景。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/448895
推荐阅读
相关标签
  

闽ICP备14008679号