您的位置:首页 > 文旅 > 美景 > python3GUI--字符串加密方案(附源码)

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

2024/12/23 11:22:52 来源:https://blog.csdn.net/a1397852386/article/details/142342808  浏览:    关键词: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 base64from 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)适用于密钥交换和签名,计算较慢。混合加密结合两者优点,常用于加密数据和保护密钥。确保选择成熟算法,关注安全性、性能和合规性,并定期更新加密实践。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com