DES、AES简介

DES简介

DES(Data Encryption Standard)是一种对称加密算法,1977年被美国国家标准局(NIST)确定为联邦信息处理标准(FIPS),并作为商用数据加密标准。DES使用56位密钥和64位的分组长度,通过一系列置换、替换和移位等操作来实现加密和解密。

DES的加密过程包括初始置换、16轮的Feistel网络运算和最终置换三个步骤。初始置换将64位明文按照固定的规则重新排列,然后进入16轮的Feistel网络运算,在每一轮中使用不同的48位子密钥进行扩展、置换和替换操作,最后进行最终置换得到密文。

DES的主要特点包括:

固定的块大小和密钥长度:64位的数据块和56位的密钥长度。
16轮的Feistel网络结构:每轮使用不同的子密钥进行操作,增加了加密的复杂性。
置换、替换和移位操作:通过这些操作混淆数据,增加了加密的随机性。
作为商用加密标准:DES曾经是商用加密领域的主流标准,但由于密钥长度较短,易受到暴力破解攻击。
尽管DES曾经是商用加密标准,但随着计算机算力的提升以及密码学技术的发展,DES的安全性逐渐受到挑战。因此,在实际应用中,通常会选择更安全的加密算法,如AES(Advanced Encryption Standard),来替代DES。

AES简介

AES(Advanced Encryption Standard)是一种对称加密算法,被广泛应用于保护敏感数据的安全性。AES算法由比利时密码学家Joan Daemen和Vincent Rijmen设计,2001年被美国国家标准技术研究所(NIST)确定为替代DES的新的加密标准。

AES算法使用128位、192位或256位的密钥长度,并且固定的块大小为128位。AES算法的加密过程包括字节替换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)等步骤,经过多轮的处理后得到密文。

AES的主要特点包括:

可变的密钥长度:支持128位、192位和256位三种密钥长度,提供了更高的安全性选择。
固定的块大小:所有版本的AES都使用128位的数据块长度,确保了加密操作的一致性和效率。
多轮的加密结构:AES使用不同轮数的处理来提高加密的强度,128位密钥长度的AES使用10轮加密,192位和256位分别使用12轮和14轮加密。
高效的软件和硬件实现:AES算法的设计考虑了各种平台上的高效实现,使其成为广泛应用的加密标准。
由于AES算法的高安全性和高效性,在许多领域得到了广泛的应用,包括网络通信、数据库加密、文件加密等。AES已成为目前最为流行的对称加密算法之一,并在许多国家和组织的安全标准中得到了采用。

加密流程图

**输入明文
|
初始轮操作(AddRoundKey)
|

轮迭代
|
字节替代(SubBytes)
|
行移位(ShiftRows)
|
列混淆(MixColumns)
|
轮密钥加(AddRoundKey)
|

最后一轮操作
|

输出密文
**

解密流程图

**输入密文
|
最后一轮操作
|

轮迭代
|
逆字节替代(InvSubBytes)
|
逆行移位(InvShiftRows)
|
逆列混淆(InvMixColumns)
|
轮密钥加(AddRoundKey)
|

初始轮操作(AddRoundKey)
|

输出明文
**

AES 加解密 Python 代码
from Crypto.Cipher import AES# 设置密钥,必须为 16、24 或 32 字节长度
key = b'secret_key123456'def aes_encrypt(plain_text):# 创建 AES 对象,设置加密模式和密钥cipher = AES.new(key, AES.MODE_ECB)# 对明文进行填充plain_text += (AES.block_size - len(plain_text) % AES.block_size) * '\0'# 加密明文并返回结果return cipher.encrypt(plain_text.encode())def aes_decrypt(cipher_text):# 创建 AES 对象,设置解密模式和密钥cipher = AES.new(key, AES.MODE_ECB)# 解密密文并去除填充plain_text = cipher.decrypt(cipher_text).decode().rstrip('\0')# 返回明文结果return plain_text

以上示例代码仅供参考,实际应用中需要根据具体需求进行修改和优化

DES 的加密模式和填充方式

对于 DES 和 AES 加密算法,它们都有不同的加密模式(mode)和填充方式(padding)可供选择。这些选项可以根据具体的安全需求和系统要求进行调整。

加密模式(Mode)
1、ECB(Electronic Codebook)电子密码本模式:
  • 将明文分成固定大小的块,每个块独立加密。
  • 相同的明文块会得到相同的密文块,可能泄露信息。
  • 不适合加密大量数据或需要保密性的数据。
  • CBC(Cipher Block Chaining)密码分组链接模式:
2、每个明文块与前一个密文块进行异或运算,增加了随机性。
  • 需要初始化向量(IV)来增强安全性。
  • 适合保密性要求较高的数据。
3、CFB(Cipher Feedback)密码反馈模式:
  • 将前一个密文块作为密钥流的输入。
  • 可以实现比块更小的加密。
  • 适合流式数据加密。
4、OFB(Output Feedback)输出反馈模式:
  • 将前一个密文块作为输入,输出一个密钥流。
  • 只需要加密器,不需要解密器。
  • 适合流式数据加密。
5、CTR(Counter)计数器模式:
  • 使用一个计数器和密钥产生密钥流。
  • 可以实现并行加密和流式加密。
  • 适合硬件实现和并行处理。
6、GCM(Galois/Counter Mode)伽罗瓦/计数器模式:
  • 结合了CTR模式和GMAC(Galois Message Authentication Code)。
  • 提供验证和加密的功能。
  • 适合需要验证和加密的场景。
填充方式(Padding)
1、PKCS5Padding 和 PKCS7Padding:
  • 在加密前对数据进行填充,使得数据块长度符合加密算法的要求。
  • PKCS7Padding 是 PKCS5Padding 的扩展版本,用于填充块大小为8位字节的数据块。
2、ZeroPadding:
  • 在数据块末尾填充零字节,使得数据块长度符合加密算法的要求。
3、ISO10126Padding:
  • 在数据块末尾填充随机数据,最后一个字节表示填充的长度。
4、ANSI X.923 填充方式:
  • 类似于ISO10126Padding,但最后一个字节表示填充的长度。

在选择加密模式和填充方式时,需要根据具体的安全需求、数据类型和系统要求进行权衡和选择。不同的模式和填充方式具有不同的特性和适用场景,因此需要根据实际情况进行合理的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KaiwuDB 时序引擎数据去重功能详解

一、背景介绍 随着物联网领域的快速发展,时序数据的产生和处理需求不断增长。时序数据是按照时间顺序收集和记录的数据,其特点在于数据具有时间戳,并且时间是数据分析和查询的一个重要维度。 在实际场景中,可能存在多条相同时间…

k8s是什么

生么是k8s: Kubernetes:8个字母省略,就是k8s 自动部署,自动扩展和管理容器化部署的应用程序的一个开源系统、 k8s是负责自动化运维管理多个容器化程序的集群,是一个功能强大的容器编排工具。 分布式和集群化的分布式进行容器管…

分支限界法求解01背包(优先队列)【java】

实验内容:运用分支限界法解决0-1背包问题 实验目的:分支限界法按广度优先策略遍历问题的解空间树,在遍历过程中,对已经处理的每一个结点根据限界函数估算目标函数的可能取值,从中选取使目标函数取得极值的结点优先进行广度忧先搜…

python 面试题第一弹

1. 如何理解Python中的深浅拷贝 浅拷贝(Shallow Copy)创建一个新的对象,该对象的内容是原始对象的引用。这意味着新对象与原始对象共享相同的内存地址,因此对于可变对象来说,如果修改了其中一个对象,另一个…

Echarts随机生成颜色

Echarts生成随机颜色,并且不要黑色、灰色、棕色等难看的颜色,暖色系并且颜色亮丽, 可以通过修改saturation 和lightness 的随机数值,提高颜色饱和度和亮度 function generateWarmColor() {let hue Math.floor(Math.random() * 3…

自动驾驶数据集waymo

目录 waymo-open-dataset-viewer 依赖项: 可视化参考: nuScenes数据集 相关资料: 3d室内数据集 scanent waymo-open-dataset-viewer https://github.com/erksch/waymo-open-dataset-viewer/tree/master 依赖项: # 安装 …

leetCode算法—15. 三数之和

15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三…

arcpy获取矢量坐标系

代码: shppath "矢量路径" shpdescribe arcpy.Describe(shppath) print(shpdescribe.spatialReference.name) 结果:

智能优化算法应用:基于袋獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于袋獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于袋獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.袋獾算法4.实验参数设定5.算法结果6.参考文献7.MA…

前端----css 的引入方式

css的三种引入方式 行内式内嵌式&#xff08;内部样式&#xff09;外链式 1. 行内式 直接在标签的 style 属性中添加 css 样式 示例代码: <div style"width:100px; height:100px; background:red ">hello</div>优点&#xff1a;方便、直观。 缺点&…

人工智能_机器学习078_聚类算法_概念介绍_聚类升维_降维_各类聚类算法_有监督机器学习_无监督机器学习---人工智能工作笔记0118

首先看一下什么是聚类,我们可以进入sklearn的官网去看看 可以看到这里,首先classification 这个分类我们学完了,然后就是regression回归我们也学完了对吧,其实我们现实生活中的,大部分问题就是 这两种问题就可以解决了. 然后我们再来看一个: clustering,这个就是聚类对吧.聚类算…

【Linux驱动】最基本的驱动框架 | LED驱动

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux驱动》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3c0;最基本的驱动框架⚽驱动程序框架⚽编程 &#x1f3c0;LED驱动⚽配置GPIO⚽编程…

顺序表的基本操作(必学)

目录 线性表&#xff1a; 顺序表&#xff1a; 概念和结构&#xff1a; 动态顺序表常用操作实现&#xff1a; 头文件&#xff08;数组顺序表的声明&#xff09;&#xff1a; 各种基本操作总的声明&#xff1a; 顺序表的初始化&#xff1a; 顺序表的销毁 顺序表的打印 …

3分钟了解安全数据交换系统有什么用!

企业为了保护核心数据安全&#xff0c;都会采取一些措施&#xff0c;比如做网络隔离划分&#xff0c;分成了不同的安全级别网络&#xff0c;或者安全域&#xff0c;接下来就是需要建设跨网络、跨安全域的安全数据交换系统&#xff0c;将安全保障与数据交换功能有机整合在一起&a…

Wordpress对接Lsky Pro 兰空图床插件

Wordpress对接Lsky Pro 兰空图床插件 wordpress不想存储图片到本地&#xff0c;访问慢&#xff0c;wordpress图片没有cdn想要使用图床&#xff0c;支持兰空自定义接口 安装教程—在wp后台选择插件zip—然后启用—设置自己图床API接口就ok了&#xff0c;文件全部解密&#xff0c…

css的继承属性

继承属性&#xff1a; &#xff08;1&#xff09;说明 当一个元素的继承属性没有指定值的时候&#xff0c;就会使用父元素的属性的计算值。 css的计算值&#xff1a;在继承过程中从父级传输到子级的值。根据指定值计算。 处理特殊值 inherit、initial、revert、revert-layer …

实习知识整理9: 点击直接购买按钮后,跳转到确认订单页面

1. 为按钮绑定事件 <button id"addCartButton">加入购物车</button><br/> $("#buyButton").click(function () {if ( ! loginUser) {// 如何将商品信息传递到后台&#xff0c;后台能够将内容在新的订单页面显示$("#buyItemForm&quo…

[SWPUCTF 2021 新生赛]hardrce

[SWPUCTF 2021 新生赛]hardrce wp 参考博客&#xff1a;https://www.cnblogs.com/bkofyZ/p/17644820.html 代码审计 题目的代码如下&#xff1a; <?php header("Content-Type:text/html;charsetutf-8"); error_reporting(0); highlight_file(__FILE__); if(is…

第41节: Vue3 watch函数

在UniApp中使用Vue3框架时&#xff0c;你可以使用watch函数来观察和响应Vue实例上的数据变化。以下是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用watch函数&#xff1a; <template> <view> <input v-model"message" type"text…

数据结构之<堆>的介绍

1.简介 堆是一种特殊的数据结构&#xff0c;通常用于实现优先队列。堆是一个可以被看作近似完全二叉树的结构&#xff0c;并且具有一些特殊的性质&#xff0c;根据这些性质&#xff0c;堆被分为最大堆&#xff08;或者大根堆&#xff0c;大顶堆&#xff09;和最小堆两种。 2.…