当前位置: 首页 > news >正文

python tkinter 实现 带界面(GUI)的RSA加密、签名

参考文章:python tkinter 实现 带界面(GUI)的RSA加密、签名 - swuxyj - 博客园

RSA加密的过程是:使用公钥加密,私钥解密

RSA签名的过程是:使用私钥签名,公钥验证

所以核心代码就是,生成公钥私钥,使用公钥私钥分别进行加密解密。

在实际编码的时候,使用python自带的RSA库,需要特别处理编码问题,因为默认的加密解密函数是接收bytes类型的数据。

加密的核心代码如下:

# -*- coding: utf-8 -*-
import rsa
import base64
(public_key, private_key) = rsa.newkeys(1024)
msg = "M2Crypto python关于RSA的库还是蛮多的,当然也可以直接用openSSLqweasasd123"
msg = msg.encode(encoding="utf-8")
encrypt_msg = rsa.encrypt(msg, public_key)decrypt_msg = rsa.decrypt(encrypt_msg, private_key)
print("公钥:")
print(public_key.save_pkcs1().decode('utf8'))
print("\n私钥:")
print(private_key.save_pkcs1().decode('utf8'))
print("\n原始文本:")
print(msg.decode('utf8'))
print("\n加密后的文本:")
print(base64.encodebytes( encrypt_msg).decode('utf8'))
print("\n解密后的文本:")
print(decrypt_msg.decode('utf8'))

固定了一下密钥,封装了一下:

# -*- coding: utf-8 -*-
import rsa
import base64# 将公钥和私钥字符串写死到代码中
public_key_str = """-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAJlL2UCGa+vZZyCpilGRA5Oid6UO8yQQ5Jq7+AY4xCbsoRB8F4GgSPhI
w+imewOIwIZucYFSuxhAfA8bAPoXbi/1lgu8GSo2C/FptWooI5QsB2R1m1kv570Z
y8uCBiAtYA9axmok/16ijoxpWnk4oCsAHX1UwqUkPXmEOT26zA4nAgMBAAE=
-----END RSA PUBLIC KEY-----"""private_key_str = """-----BEGIN RSA PRIVATE KEY-----
MIICYgIBAAKBgQCZS9lAhmvr2WcgqYpRkQOTonelDvMkEOSau/gGOMQm7KEQfBeB
oEj4SMPopnsDiMCGbnGBUrsYQHwPGwD6F24v9ZYLvBkqNgvxabVqKCOULAdkdZtZ
L+e9GcvLggYgLWAPWsZqJP9eoo6MaVp5OKArAB19VMKlJD15hDk9uswOJwIDAQAB
AoGAAwR1MEn1Ed1jpEbyDAz4rw1BoaQbsRgMB+evSCAR7Fo4CWUH6WtIRGraQFgW
j8k/UOYXod4JBL8wMfPsG1xe3DAEw52odwL4hrHP45jGqNSc7jKDB+77o8+YpJLm
AF1LnMhM5fFbeZDKjUu1wurOWe6MNQRz28S96UIbULQGCpECRQC458I4Hqy92wFS
UuJAFLXBBC3q9v/bpoQq0YNB6b07rfhWOv3hX9dBXdATbfc8z779zoifh1/WWOnm
EhKE+OXoqauNJQI9ANQ8z85457xOHlonkMK1xOyf4Q6X6oJsMsxyXyN0P6lBu2Sx
J93xFgYfnjseivh6zAuBbrV5GuOkk/S6WwJFAKtQjvHP+dwtfRv5DwawKXWbma+J
CaVIsku5shLvrRQOK3g5T9/wHE/Dy3U0/UyqbhpZsNudYX4HAy7Wr7HjqZ/XE8rB
Aj0A0gkQejvK0d7ZSM0pBJhQNwAOAJw09zdOmmeBYZvUuJMVeZOcaZcB/bNiqw0R
6M/ViHlh73PXOXuQ9LtLAkUAtZ0O0ThbZgMfldcrpbKXryL4vaEEbtDwoBvl38Rg
qD4niX1X/TWp/FtKjFNNfR7ih3ufnAZE0xV6HFeTfGMCbPDN2Ik=
-----END RSA PRIVATE KEY-----"""# 从字符串加载密钥
public_key = rsa.PublicKey.load_pkcs1(public_key_str.encode('utf-8'))
private_key = rsa.PrivateKey.load_pkcs1(private_key_str.encode('utf-8'))def rsa_encrypt(message, public_key):"""使用公钥加密消息Args:message (str): 要加密的消息public_key (rsa.PublicKey): 公钥Returns:str: 基64编码的加密消息"""# 将消息编码为字节message_bytes = message.encode(encoding="utf-8")# 使用公钥加密消息encrypted_message = rsa.encrypt(message_bytes, public_key)# 将加密后的消息字节进行base64编码encrypted_message_b64 = base64.b64encode(encrypted_message).decode('utf-8')return encrypted_message_b64def rsa_decrypt(encrypted_message_b64, private_key):"""使用私钥解密消息Args:encrypted_message_b64 (str): 基64编码的加密消息private_key (rsa.PrivateKey): 私钥Returns:str: 解密后的消息"""# 将base64编码的加密消息解码为字节encrypted_message = base64.b64decode(encrypted_message_b64.encode('utf-8'))# 使用私钥解密消息decrypted_message_bytes = rsa.decrypt(encrypted_message, private_key)# 将解密后的消息字节解码为字符串decrypted_message = decrypted_message_bytes.decode('utf-8')return decrypted_message# 测试加密解密函数
msg = "M2Crypto python关于RSA的库还是蛮多的,当然也可以直接用openSSLqweasasd123"# 加密消息
encrypt_msg = rsa_encrypt(msg, public_key)
print("\n原始文本:")
print(msg)
print("\n加密后的文本:")
print(encrypt_msg)# 解密消息
decrypt_msg = rsa_decrypt(encrypt_msg, private_key)
print("\n解密后的文本:")
print(decrypt_msg)

相关文章:

  • 什么是静态住宅IP?为什么静态住宅IP能提高注册通过率?
  • torch.nn 下的常用深度学习函数
  • 卫星导航算法程序设计——单点定位测速(SPV)
  • MRNet 数据集分享
  • 气象大模型光伏功率预测中的应用:从短期,超短期,中长期的实现与开源代码详解
  • uniapp开发HarmonyOS NEXT应用之项目结构详细解读
  • 近日部署跑通的若干多模态模型总结与论文概述
  • 基于大模型与异步技术的股票分析系统实现
  • Xilinx Kintex-7 XC7K325T-2FFG676I 赛灵思 FPGA
  • 激活函数(sigmoid、Tanh、ReLu、softmax、softmin、LogSoftma)公式,作用,使用场景和python代码(包含示例)详解
  • CarConfig自动化测试思路(CCP)
  • 【中级软件设计师】死锁 (附软考真题)
  • C PRIMER PLUS——第8节:字符串和字符串函数
  • 力扣刷题(第二十二天)
  • 小刚说C语言刷题—1078求恰好使s=1+1/2+1/3+…+1/n的值大于X时n的值
  • 【MCAL】TC397+EB-tresos之I2c配置实战(同步、异步)
  • 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘
  • 记录踩过的坑-金蝶云苍穹平台-轻分析和轻报表(慢慢更新)
  • TCP IP
  • 图(邻接矩阵和邻接表)
  • 为何发胖?如何减肥?一个医学体重管理中心的探索启示
  • 欧盟决意与俄罗斯能源彻底决裂之际,美国谋划新生意:进口俄气对欧转售
  • 71岁导演詹姆斯・弗雷病逝,曾执导《纸牌屋》、麦当娜MV
  • 上海优化营商环境再攻坚,企业和机构有哪些切实感受?
  • 中国中古史集刊高质量发展论坛暨《唐史论丛》创刊四十周年纪念会召开
  • 全国铁路五一假期累计发送1.51亿人次,多项运输指标创历史新高