浅谈对称加密(AES与DES)

简介: 浅谈对称加密(AES与DES)

浅谈对称加密(AES与DES)
对称加密是一种加密方式,其中同一个密钥(也称为私钥或共享密钥)用于加密和解密数据。这意味着加密和解密都使用相同的密钥。对称加密速度通常很快,因为它不涉及复杂的数学运算。

对称加密的示例步骤:

  1. 选择密钥:双方协商并选择一个密钥,在实际应用中确保密钥的安全性至关重要。
  2. 加密数据:使用所选密钥对明文数据进行加密,生成密文。
  3. 传输密文:将密文传输给接收方。
  4. 解密数据:接收方使用相同的密钥对接收到的密文进行解密,还原出原始明文数据。

对称加密算法有许多种,如 AES(高级加密标准)、DES(数据加密标准)等。在对称加密中,由于加密和解密使用相同的密钥,因此密钥的安全传输和存储对于确保数据机密性至关重要。

安装:

pip3 install pycrpytodome

AES(Advanced Encryption Standard)是一种对称密钥加密算法,最常用的模式ECB 模式和CBC模式,当然还有很多其他模式,都属于AES加密。ECB模式和CBC模式两者区别就是ECB不需要iv偏移量,而CBC需要。

在 AES 加密中,ECB(Electronic Codebook)模式和 CBC(Cipher Block Chaining)模式是两种常见的加密模式。以下是它们的参数、作用以及数据类型:

ECB 模式(电子密码本模式)

  1. 参数

    • 密钥(Key):对称密钥,用于加密和解密数据块。
    • 初始向量(IV):在 ECB 模式下通常不需要使用初始向量。
  2. 作用

    • 将明文分成固定大小的数据块,然后独立地对每个数据块使用相同的密钥进行加密。
    • 易于实现和理解,适合对数据块进行独立加密的场景。
  3. 数据类型

    • 明文(Plaintext):待加密的原始数据。
    • 密文(Ciphertext):经过 ECB 模式加密后的数据。

CBC 模式(密码分组链接模式)

1. **参数**- **密钥(Key)**:对称密钥,用于加密和解密数据块。
   - **初始向量(IV)**:每次加密操作都需要一个唯一的初始向量,用于在数据块之间引入依赖性。

2. **作用**- 在加密之前,与前一个数据块的密文进行异或运算,增加了数据块之间的关联性,提高了安全性。
   - 使得每个密文块的输出都依赖于前一个数据块的加密结果,因此有更好的混淆效果。

3. **数据类型**- **明文(Plaintext)**:待加密的原始数据。
   - **密文(Ciphertext)**:经过 CBC 模式加密后的数据。

这些是 AES 加密中 ECB 和 CBC 模式的主要参数、作用和数据类型。选择合适的加密模式取决于具体的安全需求和应用场景。

CBC加密案例

from Crypto.Cipher import AES

import base64

key = '1234567890abcdef'.encode() # 密钥
# 密钥:必须是16位字节或者24位字节或者32位字节
text = 'philips is dsb!!'
# text = 'philips is dsb' 需要加密的内容
# while len(text.encode('utf-8')) % 16 != 0: # 如果text不足16位的倍数就用空格补足16位
#     text +=  '\0'
text = text.encode()

print('完整text:', text)

iv = b'abcdabcdabcdabcd'  # 偏移量--必须16字节

aes = AES.new(key, AES.MODE_CBC, iv) # 创建一个aes对象

en_text = aes.encrypt(text) # 加密明文
print('aes加密数据:::', en_text)

en_text = base64.b64encode(en_text).decode() # 将返回的字节型数据转进行base64编码
print(en_text)

运行结果如下:

完整text: b'philips is dsb!!'
aes加密数据::: b'\xb0\x8fxbf1\xec\xfaW\xc5o\xa5\xa5\xc1_\x0f'
sI94YmYx7PpXxW+lpcFfDw==

CBC解密案例:

from Crypto.Cipher import AES
import base64


key = '1234567890abcdef'.encode() # 密钥
model = AES.MODE_CBC
iv = b'abcdabcdabcdabcd'
aes = AES.new(key, model, iv)
text = 'SrACs3J3tfAONPPwxzMMfg=='.encode()
ecrypted_base64 = base64.b64decode(text) # base64解码成字节流
str = aes.decrypt(ecrypted_base64).decode() # 解密

print('aes解密数据:::', str)

运行结果如下:

aes解密数据::: phips is dsb!!!!

本示例可以在[小蜜蜂AI网站]获取。

相关文章
|
2月前
|
人工智能 自然语言处理 安全
Claude Code 插件登陆 VS Code:开发者迎来 AI 编程新利器
Anthropic正式发布Claude Code——VS Code官方插件,支持多语言智能补全、代码解释、错误诊断与安全重构。隐私优先、长上下文(200K tokens)处理能力强,显著优于Copilot的可解释性与代码质量,已获开发者广泛好评。(239字)
4887 6
|
运维 Linux
Linux系统调优详解(五)——磁盘IO状态查看命令
Linux系统调优详解(五)——磁盘IO状态查看命令
593 2
|
Java Spring
java spring事务父方法、子方法各自回滚问题处理
java spring事务父方法、子方法各自回滚问题处理
java spring事务父方法、子方法各自回滚问题处理
|
7月前
|
机器学习/深度学习 人工智能 算法
从人工决策到AI自主规划:2025物流配送管理工具的智能化升级
物流配送管理工具正经历技术革新,从手工调度1.0迈向数字孪生与AI驱动的4.0时代。新一代系统融合IoT、强化学习与路径优化算法,实现智能调度、实时执行与资源优化。多模态感知、自适应路由与弹性网络设计推动物流数字化转型。未来,量子计算、自主物流网络与认知型AI将重塑行业格局,助力物流向高效、绿色、韧性发展。
1194 0
|
安全 Java Spring
Spring Boot 过滤器(Filter)详解
本文详解Spring Boot中过滤器的原理与实践,涵盖Filter接口、执行流程、@Component与FilterRegistrationBean两种实现方式、执行顺序控制及典型应用场景如日志记录、权限验证。对比拦截器,突出其在Servlet容器层的通用性与灵活性,助力构建高效稳定的Web应用。
5585 0
|
10月前
|
JSON 数据挖掘 API
京东商品评论API接口指南
京东商品评论API接口是京东开放平台提供的服务,支持开发者通过HTTP请求获取商品评论数据,适用于数据分析、情感分析等场景。接口采用GET或POST请求方式,需提供app_key、sku_id等参数,返回JSON格式的评论内容、时间、评分等信息。使用时需完成权限申请和签名计算,确保请求安全。示例代码展示了如何用Python的requests库调用该API并处理响应数据。
|
存储 SQL 分布式计算
ClickHouse 高可用之副本
ClickHouse 使用副本机制增强数据可用性,复制数据到多个节点以备故障转移。仅MergeTree系列引擎支持副本,需使用`Replicated`前缀。副本是表级别,需先创建对应表结构。配置高可用副本需借助Zookeeper协调。在三台机器上部署,每台有三份数据。创建副本表时,需指定Zookeeper路径和唯一副本名称。通过`CREATE TABLE`语句在每个节点创建副本表并插入数据,然后验证数据同步。还可以使用工具如PrettyZoo查看Zookeeper中的副本表元数据。
822 0
|
Android开发
我是一位Android工程师,用通义灵码的AS插件做开发工作助手,对比之前没有灵码,现在提效了60%
我是一位Android工程师,用通义灵码的AS插件做开发工作助手,对比之前没有灵码,现在提效了60%
794 0
|
算法 安全 搜索推荐
深入理解密码学技术
深入理解密码学技术
454 1
|
关系型数据库 MySQL 数据库
Navicat备份数据库
涵盖`Navicat`数据库备份、数据安全及备份策略等主题。文库采用精美主题,提升阅读体验。
399 1
Navicat备份数据库