python3GUI--字符串加密方案(附源码)

文章目录

  • 一.前言
  • 二.展示
    • 1.AES 加密
      • 1.介绍
      • 优点
      • 缺点
      • 2.代码
      • 3.结果
    • 2.RSA 加密
      • 1.介绍
      • 优点
      • 缺点
      • 2.代码
      • 3.结果
    • 3.基于 HMAC 的 URL 签名
      • 1.介绍
      • 优点
      • 缺点
      • 2.代码
      • 3.结果
    • 4.JWT(JSON Web Token)加密
      • 1.介绍
      • 优点
      • 缺点
      • 2.安装
      • 3.代码
      • 4.结果
  • 三.总结


一.前言

本文将介绍四种字符串加密方案,开发语言为python3,每种方案提供一套代码,这里以加密一个url地址为例,代码包能运行。

二.展示

1.AES 加密

1.介绍

AES(Advanced Encryption Standard)是一种对称加密算法,它由美国国家标准与技术研究院(NIST)于2001年正式发布,用于取代较早的Data Encryption Standard(DES)算法。AES是一个广泛使用的标准,适用于各种数据加密应用

优点

  1. 高安全性

    • 密钥长度:AES支持128位、192位和256位密钥长度,提供了强大的加密保护。尤其是AES-256,被认为是非常安全的,至今没有有效的攻击方法能够破解它。
    • 抗攻击能力:AES设计上抗击多种攻击手段,包括暴力破解、差分分析和线性分析等。
  2. 效率高

    • 快速加密和解密:AES的设计使其在处理速度上相当高效,适合需要高吞吐量的应用,比如网络流量和大数据处理。
    • 硬件加速:现代处理器和硬件通常提供了AES加速指令,使得AES的加密和解密操作在硬件层面更加高效。
  3. 标准化

    • 广泛采用:AES是由美国国家标准与技术研究院(NIST)制定的标准,广泛被国际标准组织采纳,确保了其在各种应用中的兼容性和可信度。
    • 广泛支持:几乎所有现代操作系统、软件库和网络协议都支持AES加密,使其易于集成和使用。
  4. 灵活性

    • 多种密钥长度:AES支持三种不同的密钥长度(128位、192位、256位),用户可以根据需要选择合适的密钥长度以平衡安全性和性能。

缺点

  1. 密钥管理

    • 密钥分发:对称加密算法的一个主要挑战是密钥的安全分发和管理。发送方和接收方必须安全地共享和存储相同的密钥,否则加密的安全性将受到威胁。
    • 密钥更换:定期更换密钥是确保长期安全的良好实践,但这可能增加了管理的复杂性和成本。
  2. 数据块大小限制

    • 数据块大小:AES是基于固定数据块大小(128位)的加密算法。如果需要加密的数据块较大,可能需要进行额外的填充和分块处理,这会增加一定的处理复杂性。
  3. 对称加密的固有局限性

    • 单一密钥:对称加密算法依赖单一密钥进行加密和解密,这使得密钥的保护成为重点。任何密钥的泄露都会直接影响数据的安全性。
    • 无法保证数据完整性:AES本身只提供机密性,而不提供数据完整性检查。通常需要结合其他机制(如消息认证码(MAC)或数字签名)来确保数据在传输过程中的完整性和真实性。
  4. 计算资源需求

    • 计算开销:尽管AES设计上很高效,但在某些资源受限的环境中,例如低功耗设备或嵌入式系统,AES的计算和存储需求可能会成为问题。

2.代码

from Crypto.Cipher import AES
import base64


# AES 加密函数
def encrypt_aes(data, key):
	cipher = AES.new(key, AES.MODE_EAX)
	ciphertext, tag = cipher.encrypt_and_digest(data.encode())
	return base64.urlsafe_b64encode(cipher.nonce + tag + ciphertext).decode()


# AES 解密函数
def decrypt_aes(encrypted_data, key):
	raw_data = base64.urlsafe_b64decode(encrypted_data)
	nonce = raw_data[:16]
	tag = raw_data[16:32]
	ciphertext = raw_data[32:]
	cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
	return cipher.decrypt_and_verify(ciphertext, tag).decode()


# 示例:加密和解密
key = b'Sixteen byte key'  # 必须是 16、24 或 32 字节
data = 'https://example.com?id=123&name=john'

encrypted_url = encrypt_aes(data, key)
print("Encrypted URL:", encrypted_url)

decrypted_url = decrypt_aes(encrypted_url, key)
print("Decrypted URL:", decrypted_url)

3.结果

在这里插入图片描述

2.RSA 加密

1.介绍

RSA(Rivest-Shamir-Adleman)算法是一种广泛使用的非对称加密算法,用于数据加密和数字签名。它由罗纳德·李维斯特(Ron Rivest)、阿迪·香农(Adi Shamir)和伦纳德·阿德尔曼(Leonard Adleman)于1977年首次提出。RSA加密的核心是使用一对密钥——公钥和私钥——进行数据的加密和解密。

优点

  1. 安全性高

    • 强大的安全性:RSA的安全性基于大数因式分解的困难。当前技术无法有效破解足够长的RSA密钥,这使得RSA非常安全。
    • 广泛接受:RSA已被广泛测试和验证,并成为许多加密协议的基础,如TLS/SSL,用于保护互联网通信。
  2. 密钥管理方便

    • 公钥和私钥分离:公钥可以公开分发,任何人都可以用公钥加密消息,但只有持有私钥的人才能解密。这简化了密钥分发和管理。
    • 数字签名功能:RSA不仅可以加密,还可以生成数字签名,验证数据的完整性和发送者的身份。这增强了数据传输的安全性。
  3. 非对称加密的优势

    • 无需共享密钥:与对称加密不同,RSA不需要加密双方共享密钥,这减少了密钥泄露的风险。
  4. 标准化和兼容性

    • 成熟的标准:RSA是广泛接受的国际标准,许多安全协议和应用程序都支持RSA,这确保了其与现有系统的兼容性。

缺点

  1. 计算开销大

    • 性能问题:RSA的加密和解密过程涉及大数运算,计算开销较大,因此速度较慢。尤其是在处理大量数据时,相比对称加密算法,RSA的性能差距更加明显。
    • 密钥长度:为了确保安全性,RSA需要较长的密钥(例如2048位或更长),这会增加计算和存储的负担。
  2. 不适合大数据加密

    • 数据加密限制:RSA主要用于加密较小的数据块(如对称密钥或哈希值),而不适合直接加密大数据。通常,RSA会与对称加密算法(如AES)结合使用,对大数据进行加密。
  3. 密钥管理和存储

    • 密钥管理:尽管公钥可以公开分发,但私钥必须妥善保管,防止泄露。私钥的泄露将严重危害数据安全。
    • 密钥生成复杂:生成安全的RSA密钥需要高效的大数运算和安全的质数生成算法,这对实现有一定要求。
  4. 潜在的实施问题

    • 算法实现:不当的RSA实现可能导致安全漏洞,如不安全的填充方案或参数选择错误。选择不合适的参数或算法实现缺陷可能使RSA系统容易受到攻击。

2.代码

import base64

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes

# 生成 RSA 密钥对
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()

# 将公钥序列化
public_pem = public_key.public_bytes(
	encoding=serialization.Encoding.PEM,
	format=serialization.PublicFormat.SubjectPublicKeyInfo
)


# 使用公钥加密
def encrypt_rsa(data, public_key):
	return base64.urlsafe_b64encode(
		public_key.encrypt(
			data.encode(),
			padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
		)
	).decode()


# 使用私钥解密
def decrypt_rsa(encrypted_data, private_key):
	raw_data = base64.urlsafe_b64decode(encrypted_data)
	return private_key.decrypt(
		raw_data,
		padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
	).decode()


# 示例:加密和解密
data = 'https://example.com?id=123&name=john'

encrypted_url = encrypt_rsa(data, public_key)
print("Encrypted URL:", encrypted_url)

decrypted_url = decrypt_rsa(encrypted_url, private_key)
print("Decrypted URL:", decrypted_url)

3.结果

在这里插入图片描述

3.基于 HMAC 的 URL 签名

1.介绍

基于 HMAC 的 URL 签名是一种用于验证和保护 URL 安全性的技术。HMAC(Hash-based Message Authentication Code)是一种通过哈希函数和密钥生成消息认证码的方法,用于确保消息在传输过程中未被篡改和验证其完整性。URL 签名技术结合了 HMAC 和 URL,广泛用于保护 API 请求、下载链接、以及其他需要保护的 URL。

优点

  1. 增强安全性

    • 防篡改:HMAC 签名能够有效防止 URL 在传输过程中被篡改,因为任何更改都会导致签名验证失败。
    • 数据完整性:确保 URL 中的参数和内容没有被篡改,提供数据完整性保障。
  2. 身份验证

    • 确保合法性:通过使用密钥生成签名,只有拥有正确密钥的用户才能生成有效的签名,从而验证请求的合法性。
  3. 防止重放攻击

    • 时间戳:在 URL 中加入时间戳可以防止重放攻击,即攻击者重复使用旧的 URL 请求。这通常通过设定 URL 的有效期来实现,超出时间范围的 URL 会被视为无效。
  4. 简便性和效率

    • 易于实现:HMAC 算法相对简单,易于实现和集成到现有系统中。
    • 计算高效:HMAC 的计算速度较快,适合于对大量请求进行签名和验证。
  5. 无需额外的加密机制

    • 无须额外加密:与加密 URL 不同,HMAC 只需要计算哈希值,避免了对 URL 进行加密的复杂性。

缺点

  1. 密钥管理

    • 密钥安全:密钥的保密性至关重要。如果密钥泄露,攻击者可以伪造有效的签名。因此,需要有效地保护密钥并管理其分发。
  2. URL 长度限制

    • 长度问题:签名可能使 URL 变得较长,特别是当 URL 参数众多时。这可能超出某些系统或浏览器的长度限制,导致问题。
  3. 时间同步问题

    • 时间差异:如果使用时间戳进行防重放攻击,系统之间的时间必须同步。时间不同步可能导致合法请求被拒绝或过期的请求被接受。
  4. 不可见签名

    • 签名不加密:虽然 HMAC 提供了验证和保护,但签名本身不会加密 URL 中的内容。因此,攻击者仍然可以看到 URL 的全部内容,只能保证其未被篡改。
  5. 动态参数的挑战

    • 参数变化:如果 URL 参数频繁变化,生成和验证签名的逻辑可能需要频繁调整。这在处理复杂和动态参数时可能会带来挑战。

2.代码

import hmac
import hashlib
import base64


# 生成 HMAC 签名
def generate_hmac(url, secret_key):
	signature = hmac.new(secret_key.encode(), url.encode(), hashlib.sha256).digest()
	return base64.urlsafe_b64encode(signature).decode()


# 校验 HMAC 签名
def verify_hmac(url, received_signature, secret_key):
	expected_signature = generate_hmac(url, secret_key)
	return hmac.compare_digest(expected_signature, received_signature)


# 示例:签名和验证
url = 'https://example.com?id=123&name=john'
secret_key = 'mysecretkey'

# 生成签名并附加到 URL
signature = generate_hmac(url, secret_key)
signed_url = f"{url}&signature={signature}"
print("Signed URL:", signed_url)

# 验证签名
is_valid = verify_hmac(url, signature, secret_key)
print("Is signature valid?", is_valid)

3.结果

在这里插入图片描述

4.JWT(JSON Web Token)加密

1.介绍

JSON Web Token(JWT)是一种开放标准(RFC 7519),用于以紧凑的、自包含的方式安全地传输信息。JWT 在 Web 应用中被广泛使用,特别是在身份验证和授权过程中。它可以携带经过签名的数据,确保信息的真实性和完整性。虽然 JWT 通常用于签名而不是加密,但它也可以进行加密以保护数据隐私。

优点

  1. 数据机密性

    • 保护敏感数据:通过加密 JWT 的有效负载部分,可以防止未经授权的用户查看令牌中的敏感信息。即使令牌被截获,加密可以确保只有持有正确密钥的接收方才能解密和读取数据。
  2. 结合身份验证

    • 加密与签名结合:JWE 可以与 JWS(JSON Web Signature)结合使用,同时提供数据机密性和完整性保护。即,数据可以在传输中被加密,同时保证数据未被篡改。
  3. 标准化

    • 兼容性:JWE 是一个标准化的规范,广泛支持,便于实现和集成到现有的安全系统中。
  4. 自包含的令牌

    • 紧凑和自包含:加密后的 JWT 仍然保持紧凑性,自包含的信息结构适合在各种环境中使用,如 HTTP 请求、URL 查询参数等。
  5. 时间限制

    • 过期时间保护:加密 JWT 可以包含过期时间等声明,这有助于进一步保护令牌在特定时间范围内的有效性。

缺点

  1. 实现复杂性

    • 复杂的加密操作:JWE 的实现比 JWS 更复杂,需要处理密钥生成、加密算法选择、初始化向量、身份验证标签等。这可能增加实现和维护的难度。
  2. 性能开销

    • 加密和解密性能:加密和解密过程比签名过程需要更多的计算资源,可能会影响性能,尤其是在需要处理大量 JWT 时。
  3. 密钥管理

    • 密钥的安全性:加密 JWT 依赖于对称或非对称密钥的安全管理。密钥的保护和分发是确保数据安全的关键,一旦密钥泄露,数据的机密性将受到威胁。
  4. URL 长度限制

    • 可能的长度问题:加密后的 JWT 可能会变得较长,特别是在加密和签名过程中,可能会超出某些系统或浏览器的 URL 长度限制。
  5. 调试困难

    • 难以调试:加密的 JWT 使调试和故障排除变得更加困难,因为内容被加密,无法直接查看和分析其内部数据。
  6. 额外的处理步骤

    • 额外的复杂性:除了标准的签名步骤,还需要处理加密和解密的逻辑,这可能增加系统的复杂性,并需要额外的库或工具支持。

2.安装

pip install pyjwt

在这里插入图片描述

3.代码

import jwt


# 生成 JWT
def generate_jwt(data, secret_key):
	return jwt.encode(data, secret_key, algorithm='HS256')


# 验证和解码 JWT
def decode_jwt(token, secret_key):
	return jwt.decode(token, secret_key, algorithms=['HS256'])


# 示例:生成和解码 JWT
secret_key = 'mysecretkey'
data = {'id': 123, 'name': 'john'}

jwt_token = generate_jwt(data, secret_key)
print("JWT Token:", jwt_token)

decoded_data = decode_jwt(jwt_token, secret_key)
print("Decoded Data:", decoded_data)

4.结果

在这里插入图片描述

三.总结

本篇介绍了四种可加密字符串的方案,每种方案都给出了详细的代码以及运行结果截图,我们应该选择合适的加密算法来应对不同的需求,选择加密方案时,考虑数据敏感性、使用场景和性能需求。对称加密(如 AES)适合高效数据加密,但密钥管理复杂。非对称加密(如 RSA)适用于密钥交换和签名,计算较慢。混合加密结合两者优点,常用于加密数据和保护密钥。确保选择成熟算法,关注安全性、性能和合规性,并定期更新加密实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/879426.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

孙怡带你深度学习(2)--PyTorch框架认识

文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader(数据加载器)4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…

1×1卷积核【super star 卷积核】

一、11卷积的作用 我们先来给出11卷积的一般作用,如下所示: • 跨通道的特征整合 • 特征通道的升维与降维 • 减少权重参数(卷积核参数) 【 简化模型 】 1.1 特征通道的升维与降维/跨通道的特征整合/简化模型 输入数据&…

《深度学习》—— PyTorch的神经网络模块中常用的损失函数

文章目录 前言一、回归模型中常用的损失函数1、平均绝对误差损失(L1Loss)2、均方误差损失(MSELoss也称L2Loss)3、SmoothL1Loss 二、分类模型中常用的损失函数1、负对数似然损失(NLLLoss)2、二元交叉熵损失&…

网络封装分用

目录 1,交换机 2,IP 3,接口号 4,协议 分层协议的好处: 5,OSI七层网络模型. 6,TCP/IP五层网络模型(主流): [站在发送方视角] [接收方视角] 1,交换机 交换机和IP没有关系,相当于是对路由器接口的扩充,这时相当于主机都与路由器相连处于局域网中,把越来越多的路由器连接起…

8-----手机机型维修工具助手 功能较全 涵盖解锁 刷机 修复等选项 维修推荐

上图是一款功能较全的维修加密狗。目前可以无限制 任何人使用。看图片可以了解其中涵盖刷机 解锁 修复分区 查看短接图 安装驱动 修复基带等等选项。而且其中有针对各个机型型号的对应功能操作。以及一些rec5.0相关的操作选项。 通过此博文了解 ★★★★★此工具涵盖的一些…

论文解读《NewsBench:一个评估中文新闻大型语言模型编辑能力的系统评估框架》

引言:感觉这篇文章,对 LLMs 的新闻编辑能力做了一个详细的实验和分析,而且还贡献了一个宝贵的中文新闻数据集,蛮不错的,后面或许可以用起来,就拜读了一下。 这篇博客的题目说是解读,其实大部分…

Java发邮件:如何配置SMTP服务器实现发信?

Java发邮件功能实现的教程?Java发邮件的方式有哪些? 无论是用于用户注册确认、密码重置,还是系统通知,Java发邮件都是不可或缺的一部分。AokSend将详细介绍如何配置SMTP服务器,以便在Java发邮件时能够顺利发送邮件。 …

如何创建和编辑抖音百科词条,不会的找我们代创建!

如何创建和编辑抖音百科词条,不会的找我们代创建! 如何创建抖音百科个人词条,个人抖音百科的创建 #抖音百科 #百科 #推广 做过百度百科的老板们注意了,等一下别划走。 2024 年品宣新风口出现了,抖音百科正在替代百度…

Flask-JWT-Extended登录验证

1. 介绍 """安装:pip install Flask-JWT-Extended创建对象 初始化与app绑定jwt JWTManager(app) # 初始化JWTManager设置 Cookie 的选项:除了设置 cookie 的名称和值之外,你还可以指定其他的选项,例如:过期时间 (max_age)&…

erlang学习:mnesia数据库与ets表1

Mnesia 和 ETS 都是 Erlang 提供的表管理工具,用于存储和检索数据,但它们之间有一些重要的区别和共同点。 共同点 都是Erlang提供的表存储机制:ETS 和 Mnesia 都允许你在内存中创建表,并且可以用来存储键值对或者更复杂的数据结…

VC++以资源方式打开可执行文件

刚看一个资料说可以在VC中,以资源方式打开可执行文件,然后它如果包含对话框一些资源,会呈现出来,可以把其他程序界面上的控件直接拷贝到自己程序; 但是操作了一下没有成功, 先新建一个空对话框准备拷贝东…

Modbus_tcp

目录 一:modbus起源 1.起源 2. 分类: 3. 优势: 4. 应用场景: 5.ModbusTCP特点(掌握): 二、 ModbusTCP的协议 1. 报文头 2. 寄存器 1. 线圈(Coils) 2. 离…

【无标题】rocket

rocketMQ集群双主双从同步模式(2m-2s-sync)搭建-CSDN博客 集群架构概念 在部署的时候首先要将nameserver启动起来,之后就是将broker启动起来,broker启动起来会将自己的信息注册到nameserver上面。之后再去创建topic,因为发消息的逻辑和收消…

虹科方案 | 精准零部件测试!多路汽车开关按键功能检测系统

欢迎关注虹科,为您提供最新资讯! #LIN/CAN总线 #零部件测试 #CAN数据 导读 在汽车制造业中,零部件的安全性、功能性和可靠性是确保车辆整体性能的关键。虹科针对车辆零部件的LIN/CAN总线仿真测试,提出了基于虹科Baby-LIN系列产…

【教程】鸿蒙ARKTS 打造数据驾驶舱---前序

鸿蒙ARKTS 打造数据驾驶舱 ​ 前面2章我介绍了如何通过定义View绘制箭头以及圆形进度,初步了解了鸿蒙如何进行自定义View。接下来我将通过我最近在带的一个VUE的项目,简单实现了几个鸿蒙原生页面。帮助大家快速上手纯血鸿蒙开发. 本项目基于Api11Stage模…

Qt 弹出菜单右键菜单 QMenu 设置不同颜色的子项

概述 在Qt中,可以使用样式表(StyleSheet)来自定义 QMenu 的外观,包括其子项(如菜单项QAction)的颜色。但是,这通常可以设置 QMenu 的整体样式,而不能单独设置某个子项的颜色。不过&…

Cobalt Strike的下载与基本用法

CobaltStrike4.8 链接:百度网盘 请输入提取码 提取码:tgf3 what Cobalt Strike是一款渗透测试神器,常被业界人称为CS神器。Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个&…

第六部分:1---进程间通信,匿名管道

目录 进程间通信 进程间通信的目的: 进程间通信的本质: 管道: 管道的定义: 匿名管道 单向通信的管道通路: 进程和文件之间的解耦: 单向管道的读写端回收问题: 管道通信主要实现动态数…

Java多线程-(线程的创建,线程安全,线程状态)

第一章.创建线程的方式 1.第一种方式_extends Thread 1.定义一个自定义线程类继承Thread 2.重写run方法(run方法是用于设置线程任务的) 3.创建自定义线程类对象 4.调用Thread类中的start方法(start方法:开启线程,jvm自动执行run方法) public class MyThread extends Thread{…

MacOS安装MAT教程

MAT下载地址MAT下载地址MAT下载地址MAT下载地址 如果不知道你的芯片类型, 可以执行如下命令 uname -m