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

加密原理3-代码

对称加密是一种加密方式,它使用同一个密钥(称为“共享密钥”)来加密和解密数据。其核心原理是通过数学算法对明文进行转换,使得转换后的密文在没有密钥的情况下无法被还原。

对称加密的基本流程

  1. 密钥生成:通信双方事先协商或生成一个共享密钥。
  2. 加密过程:发送方使用密钥和加密算法将明文转换为密文。
  3. 传输密文:通过不安全的信道(如网络)传输密文。
  4. 解密过程:接收方使用相同的密钥和对应的解密算法将密文还原为明文。

核心加密算法示例

AES(高级加密标准) 为例,它是目前最流行的对称加密算法之一:

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64# 1. 生成或获取共享密钥(必须是16、24或32字节长度)
key = b"this_is_a_secret_key_32bytes_long!"  # 32字节 = 256位# 2. 创建加密器实例
cipher = AES.new(key, AES.MODE_CBC)  # 使用CBC模式,需要初始化向量(IV)# 3. 准备明文并加密
plaintext = "Hello, AES encryption!"
padded_plaintext = pad(plaintext.encode('utf-8'), AES.block_size)  # 填充到16字节倍数
ciphertext = cipher.encrypt(padded_plaintext)# 4. 保存初始化向量(IV)和密文
iv = cipher.iv
encrypted_data = base64.b64encode(iv + ciphertext).decode('utf-8')
print(f"加密后的数据: {encrypted_data}")# 5. 解密过程(接收方)
received_data = base64.b64decode(encrypted_data)
iv = received_data[:AES.block_size]
ciphertext = received_data[AES.block_size:]# 6. 创建解密器实例并解密
decipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_data = unpad(decipher.decrypt(ciphertext), AES.block_size)
print(f"解密后的明文: {decrypted_data.decode('utf-8')}")

加密模式的作用

不同的加密模式决定了如何处理块加密(将明文分成固定大小的块):

  1. ECB(电子密码本):最简单但不安全,相同明文生成相同密文。
  2. CBC(密码块链接):引入初始化向量(IV),增强安全性,需填充数据。
  3. CTR(计数器):转为流加密,无需填充,支持并行计算。
  4. GCM(伽罗瓦/计数器模式):提供加密和认证,常用于TLS。

常见对称加密算法

算法密钥长度块大小特点
DES56位(已淘汰)64位早期标准,安全性低
3DES112/168位64位DES的增强版,性能较低
AES128/192/256位128位目前最安全和流行的标准
ChaCha20256位流加密,性能高,移动端友好

对称加密的优缺点

  • 优点
    • 加密和解密速度快,适合处理大量数据。
    • 算法公开,安全性主要依赖密钥。
  • 缺点
    • 密钥分发困难:需通过安全信道共享密钥。
    • 密钥管理复杂:每对通信方需要独立密钥。
    • 扩展性差:用户数量增多时,密钥数量呈指数增长。

实际应用场景

  1. 数据存储加密:加密硬盘、数据库中的敏感数据。
  2. 网络通信:TLS协议中使用对称加密传输数据。
  3. 文件加密:如ZIP加密、PGP加密文件。

与非对称加密的结合

实际中,对称加密常与非对称加密(如RSA)结合使用:

  1. 使用非对称加密安全地交换对称密钥。
  2. 使用对称密钥快速加密大量数据。

这种混合模式既解决了密钥分发问题,又保持了加密效率。

http://www.xdnf.cn/news/471223.html

相关文章:

  • 可视化图解算法40:二分查找-I
  • HGDB企业版迁移到HGDB安全版
  • fakeroot 在没有超级用户权限的情况下模拟文件系统的超级用户行为
  • 疲劳分析后处理参数意义?
  • LeetCode 2900.最长相邻不相等子序列 I:阅读理解题——O(n)一次遍历(贪心)
  • Makefile 详解
  • Vscode 配置python调试环境
  • QT——概述
  • 6.重建大师空三介绍
  • AI大模型:(二)2.5 人类对齐训练自己的模型
  • 低损耗高效能100G O Band DWDM 10km光模块 | 支持密集波分复用
  • 致远OA周报日报管理应用包【附百度网盘下载链接,官方售价8K】
  • Qt中控件的Viewport作用
  • 上线前测试组发现问题较多。开发总结
  • 《Python星球日记》 第80天:目标检测(YOLO、Mask R-CNN)
  • WordPress_Relevanssi Sql注入漏洞复现(CVE-2025-4396)
  • 用 Python 实现系统监控与资源管理:深入解析 `psutil` 库
  • HGDB插入超长字段报错指示列名的问题处理
  • C++核心编程--2 引用
  • 5月15日星期四今日早报简报微语报早读
  • IEEE出版|连续多年稳定检索|第三届信号处理与智能计算国际学术会议(SPIC2025)
  • 开源模型应用落地-模型上下文协议(MCP)-Resources-资源的使用逻辑
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月15日第78弹
  • ubuntu系统 usb网卡rtl8852bu驱动安装
  • CSS- 1.1 css选择器
  • LeetCode 235. 二叉搜索树的最近公共祖先 LeetCode 701.二叉搜索树中的插入操作 LeetCode 450.删除二叉搜索树中的节点
  • C++核心编程--1 内存分区模型
  • QT6 源(99)篇三,行输入框QLineEdit:信号与槽函数的学习与举例,以及附上源码
  • vue3:十三、分类管理-表格--行内按钮---行删除、批量删除实现功能实现
  • 多智能体Multi-Agent应用实战与原理分析