浅谈对称加密(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网站]获取。

相关文章
|
存储 算法 安全
【加密算法】AES对称加密算法简介
【加密算法】AES对称加密算法简介
|
5月前
|
人工智能 自然语言处理 安全
Claude Code 插件登陆 VS Code:开发者迎来 AI 编程新利器
Anthropic正式发布Claude Code——VS Code官方插件,支持多语言智能补全、代码解释、错误诊断与安全重构。隐私优先、长上下文(200K tokens)处理能力强,显著优于Copilot的可解释性与代码质量,已获开发者广泛好评。(239字)
8884 5
|
算法 数据安全/隐私保护
一文详解 RSA 非对称加密算法
非对称加密算法指的是 加、解密使用不同的密钥,一把为公开的公钥,另一把为私钥。 公钥加密的内容只能由私钥进行解密,反之由私钥加密的内容只能由公钥进行解密。也就是说,这一对公钥、私钥都可以用来加密和解密,并且一方加密的内容只能由对方进行解密。
11233 1
|
6月前
|
缓存 网络协议 JavaScript
使用window.performance API
`window.performance` 是W3C提供的性能API,IE9+支持,用于监控页面加载各阶段耗时。包含navigation、timing等字段,可精确统计DNS查询、TCP连接、DOM解析、白屏、domready等关键性能指标,助力前端性能优化。
|
安全 Java Spring
Spring Boot 过滤器(Filter)详解
本文详解Spring Boot中过滤器的原理与实践,涵盖Filter接口、执行流程、@Component与FilterRegistrationBean两种实现方式、执行顺序控制及典型应用场景如日志记录、权限验证。对比拦截器,突出其在Servlet容器层的通用性与灵活性,助力构建高效稳定的Web应用。
6015 1
|
存储 SQL 分布式计算
ClickHouse 高可用之副本
ClickHouse 使用副本机制增强数据可用性,复制数据到多个节点以备故障转移。仅MergeTree系列引擎支持副本,需使用`Replicated`前缀。副本是表级别,需先创建对应表结构。配置高可用副本需借助Zookeeper协调。在三台机器上部署,每台有三份数据。创建副本表时,需指定Zookeeper路径和唯一副本名称。通过`CREATE TABLE`语句在每个节点创建副本表并插入数据,然后验证数据同步。还可以使用工具如PrettyZoo查看Zookeeper中的副本表元数据。
955 0
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
33293 8
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
存储 消息中间件 弹性计算
统一观测丨借助 Prometheus 监控 ClickHouse 数据库
统一观测丨借助 Prometheus 监控 ClickHouse 数据库
2152 108
统一观测丨借助 Prometheus 监控 ClickHouse 数据库
|
关系型数据库 MySQL 数据库
Navicat备份数据库
涵盖`Navicat`数据库备份、数据安全及备份策略等主题。文库采用精美主题,提升阅读体验。
472 1
Navicat备份数据库
|
算法 安全 搜索推荐
深入理解密码学技术
深入理解密码学技术
549 1