本文目录导读:

我来帮你实现一个Python加密解密展示案例,包含多种常见的加密方法。
基础案例:凯撒密码加解密
def caesar_cipher(text, shift, mode='encrypt'):
"""
凯撒密码加解密
mode: 'encrypt' 加密,'decrypt' 解密
"""
result = ""
if mode == 'decrypt':
shift = -shift
for char in text:
if char.isalpha():
# 判断大小写
start = ord('A') if char.isupper() else ord('a')
# 移位并取模
result += chr((ord(char) - start + shift) % 26 + start)
else:
result += char
return result
# 使用示例
text = "Hello, World!"
shift = 3
encrypted = caesar_cipher(text, shift, 'encrypt')
decrypted = caesar_cipher(encrypted, shift, 'decrypt')
print(f"原文: {text}")
print(f"加密后: {encrypted}")
print(f"解密后: {decrypted}")
Base64编码解密
import base64
def base64_demo(text):
"""Base64编码解码演示"""
# 编码(加密)
encoded = base64.b64encode(text.encode()).decode()
# 解码(解密)
decoded = base64.b64decode(encoded).decode()
print(f"原文: {text}")
print(f"Base64编码: {encoded}")
print(f"Base64解码: {decoded}")
return encoded, decoded
# 使用示例
base64_demo("Python加密演示")
AES对称加密
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
def aes_encrypt_decrypt(text, key):
"""AES加密解密演示"""
# 确保key为16字节
if len(key) < 16:
key = key.ljust(16)[:16]
else:
key = key[:16]
key = key.encode()
# 加密
cipher = AES.new(key, AES.MODE_ECB)
padded_text = pad(text.encode(), AES.block_size)
encrypted = cipher.encrypt(padded_text)
encrypted_base64 = base64.b64encode(encrypted).decode()
# 解密
cipher = AES.new(key, AES.MODE_ECB)
decrypted = unpad(cipher.decrypt(encrypted), AES.block_size)
decrypted_text = decrypted.decode()
print(f"原文: {text}")
print(f"密钥: {key.decode()}")
print(f"加密结果(Base64): {encrypted_base64}")
print(f"解密结果: {decrypted_text}")
return encrypted_base64, decrypted_text
# 使用示例(需要安装pycryptodome: pip install pycryptodome)
aes_encrypt_decrypt("Python AES加密解密示例", "mysecretkey12345")
RSA非对称加密
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64
def rsa_encrypt_decrypt(text):
"""RSA加密解密演示"""
# 生成RSA密钥对
key = RSA.generate(2048)
private_key = key
public_key = key.publickey()
# 加密(使用公钥)
cipher_rsa = PKCS1_OAEP.new(public_key)
encrypted = cipher_rsa.encrypt(text.encode())
encrypted_base64 = base64.b64encode(encrypted).decode()
# 解密(使用私钥)
cipher_rsa = PKCS1_OAEP.new(private_key)
decrypted = cipher_rsa.decrypt(encrypted)
decrypted_text = decrypted.decode()
print(f"原文: {text}")
print(f"公钥: {public_key.export_key().decode()[:50]}...")
print(f"私钥: {private_key.export_key().decode()[:50]}...")
print(f"加密结果(Base64): {encrypted_base64}")
print(f"解密结果: {decrypted_text}")
return encrypted_base64, decrypted_text
# 使用示例
rsa_encrypt_decrypt("RSA非对称加密演示")
综合加解密工具类
import hashlib
import base64
from cryptography.fernet import Fernet
class CryptoUtils:
"""综合加解密工具类"""
@staticmethod
def md5_hash(text):
"""MD5哈希(不可逆)"""
return hashlib.md5(text.encode()).hexdigest()
@staticmethod
def sha256_hash(text):
"""SHA256哈希(不可逆)"""
return hashlib.sha256(text.encode()).hexdigest()
@staticmethod
def fernet_encrypt_decrypt(text, key=None):
"""Fernet对称加密"""
if not key:
key = Fernet.generate_key()
f = Fernet(key)
# 加密
encrypted = f.encrypt(text.encode())
# 解密
decrypted = f.decrypt(encrypted).decode()
print(f"原文: {text}")
print(f"密钥: {key.decode()}")
print(f"加密结果: {encrypted.decode()}")
print(f"解密结果: {decrypted}")
return encrypted.decode(), decrypted
# 使用示例
print("=== MD5哈希 ===")
print(CryptoUtils.md5_hash("Python编程"))
print("\n=== SHA256哈希 ===")
print(CryptoUtils.sha256_hash("Python编程"))
print("\n=== Fernet加密 ===")
CryptoUtils.fernet_encrypt_decrypt("Fernet加密解密示例")
图形界面加解密演示
import tkinter as tk
from tkinter import ttk, messagebox
import base64
from cryptography.fernet import Fernet
class CryptoApp:
def __init__(self, root):
self.root = root
self.root.title("加解密演示工具")
self.root.geometry("600x400")
# 生成密钥
self.key = Fernet.generate_key()
self.cipher = Fernet(self.key)
self.setup_ui()
def setup_ui(self):
# 输入区域
tk.Label(self.root, text="输入文本:", font=("Arial", 12)).pack(pady=10)
self.input_text = tk.Text(self.root, height=5, width=50)
self.input_text.pack(pady=5)
# 按钮区域
btn_frame = tk.Frame(self.root)
btn_frame.pack(pady=10)
tk.Button(btn_frame, text="🔐 加密",
command=self.encrypt_text,
bg="lightblue", width=15).pack(side=tk.LEFT, padx=5)
tk.Button(btn_frame, text="🔓 解密",
command=self.decrypt_text,
bg="lightgreen", width=15).pack(side=tk.LEFT, padx=5)
tk.Button(btn_frame, text="🔑 生成新密钥",
command=self.generate_new_key,
bg="lightyellow", width=15).pack(side=tk.LEFT, padx=5)
# 结果显示
tk.Label(self.root, text="结果:", font=("Arial", 12)).pack(pady=10)
self.result_text = tk.Text(self.root, height=5, width=50)
self.result_text.pack(pady=5)
# 密钥显示
tk.Label(self.root, text=f"当前密钥: {self.key.decode()[:30]}...",
font=("Arial", 8)).pack(pady=5)
def encrypt_text(self):
text = self.input_text.get("1.0", tk.END).strip()
if not text:
messagebox.showwarning("警告", "请输入要加密的文本")
return
try:
encrypted = self.cipher.encrypt(text.encode())
self.result_text.delete("1.0", tk.END)
self.result_text.insert("1.0", encrypted.decode())
messagebox.showinfo("成功", "加密完成!")
except Exception as e:
messagebox.showerror("错误", f"加密失败: {str(e)}")
def decrypt_text(self):
text = self.result_text.get("1.0", tk.END).strip()
if not text:
messagebox.showwarning("警告", "没有可解密的内容")
return
try:
decrypted = self.cipher.decrypt(text.encode())
self.result_text.delete("1.0", tk.END)
self.result_text.insert("1.0", decrypted.decode())
messagebox.showinfo("成功", "解密完成!")
except Exception as e:
messagebox.showerror("错误", f"解密失败: {str(e)}")
def generate_new_key(self):
self.key = Fernet.generate_key()
self.cipher = Fernet(self.key)
# 更新密钥显示
for widget in self.root.winfo_children():
if isinstance(widget, tk.Label) and "当前密钥" in widget.cget("text"):
widget.config(text=f"当前密钥: {self.key.decode()[:30]}...")
break
messagebox.showinfo("成功", "新密钥已生成!")
# 运行图形界面
if __name__ == "__main__":
root = tk.Tk()
app = CryptoApp(root)
root.mainloop()
安装依赖
# 安装必要的库 pip install cryptography pycryptodome
使用说明
- 凯撒密码:最简单的替换密码,适合教学演示
- Base64:不是真正的加密,但常用于数据传输
- AES:对称加密,加密和解密使用相同密钥
- RSA:非对称加密,使用公钥加密、私钥解密
- Fernet:Python推荐的对称加密方式
- 图形界面:直观展示加解密过程
这些案例展示了Python中常见的加解密实现方式,你可以根据实际需求选择合适的方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播