01. 对称密码——算法
密码算法
DES
首先声明!!!
由于DES的密文可以在短时间内被破译,现已不再使用。
是什么?
DES(Data Encryption Standard)是1977年美国联邦信息处理标准(FIPS)中采用的一种对称密码。
怎么做?(加密和解密)
DES将64 bits的明文加密成64 bits的密文。但实质上其密钥长度为56 bits,因为每隔7个比特会设置一个检查错误的比特。
由于每次只能加密64比特,所以当明文较长时,需要对加密进行迭代,迭代的方式即称为模式。(后续提及)
DES加密和解密
DES的结构(Feistel网络)
在Feistel网络中,加密的各个步骤称为轮(round),整个加密过程就是进行若干次轮的循环。DES是一种16轮循环的Feistel网络。
Feistel网络加密和解密
具体步骤:
- 输入的64比特数据划分为两个32比特,分别作为“左侧”LD和“右侧”RD输入。
- ((RD + 子密钥) --> 轮函数f) XOR (LD) = 加密后的LD 向下作为下一轮左侧。
- RD直接向下作为下一轮右侧。
其中,
“轮函数”:根据RD与子密钥生成看似随机的比特序列,用于对LD加密。
“子密钥”:本轮加密所使用的密钥,每一轮都需要一个不同的子密钥(subkey)。
注意:
最后一轮加密后,不需要对调。
使用同一子密钥按照相反顺序,即可完成解密——加密解密结构相同。
Feistel网络中轮数可以任意增加,可以使用任意函数作为轮函数(即使不存在反函数也OK!)。
越复杂越好!反正能解!
综上,无论任何轮数,任何轮函数,都可用相同结构加密和解密,且加密结果必定能正确解密。
三重DES
是什么?
三重DES(triple-DES)是为了增加DES的强度,重复3次所得到的一种密码算法,缩写3DES
怎么做?
其过程是 加密–解密–加密 ,为的是兼容普通的DES(当所有密钥相同时)。
使用两(三)种不同密钥的算法,称为DES-EDE2(3)(Encryption、Decryption)
结构
DES-EDE3加密过程
现状
处理速度不高,除了向下兼容,很少用于新的用途。
AES——高级加密标准
2000年,AES(Advanced Encryption Standard)最终被确定为Rijndael对称密码算法。
什么是Rijndael
Rijndael的分组长度和密钥长度可以选择以32比特为单位,在128到256比特的范围。
AES规格,分组长度固定为128比特,密钥长度只有128、192和256比特三种。
Rijndael的加密和解密
DES使用Feistel网络,Rijndael算法使用SPN结构(Substitution-Permutation network, 代替置换网络)。
与DES一样,Rijndael算法也是由多个轮构成,每一轮分为SubBytes、ShiftRows、MixColumns和AddRoundKey四个步骤。
加密四个步骤
输入分组为128比特,即16字节
- SubBytes(逐字节替换):以每个字节的值(0~255)为索引,从一张拥有256个值的替换表(S-Box)中查找对应值。
SubBytes(逐字节替换)
- ShiftRows(行平移):以4字节为单位的行(row)按一定规则向左平移,且每一行平移的字节数不同。
ShiftRows(行平移)
- MixColumns(列混合):将每列4字节值根据矩阵运算转变为另外的值。
MixColumns(列混合)
- AddRoundKey(轮密钥XOR):将每1字节与轮密钥进行XOR。
AddRoundKey(轮密钥XOR)
其解密过程也是使用相同的结构,顺序调换罢了。
在这种结构中,输入的所有比特在一轮中都会被加密,这个Feistel网络有所区别,使得其加密所需轮数更少,此外,加密过程还能以字节、行、列为单位并行计算。
------本文图文参考书《图解密码技术》------
01. 对称密码——算法相关推荐
- md5不是对称密码算法_密码学中的消息摘要算法5(MD5)
md5不是对称密码算法 In cryptography, MD5 (Message-Digest algorithm 5) is a mainly used cryptographic hash fu ...
- PHP-密码学算法及其应用-对称密码算法
转自:http://www.smatrix.org/bbs/simple/index.php?t5662.html // 目录 1. PHP的散列函数及其应用 2. PHP中的对称密码算法 ...
- 密码学:分组密码.(块密码:是一种对称密码算法)
密码学:分组密码. 分组加密(Block Cipher) 又称为分块加密或块密码,是一种对称密码算法,这类算法将明文分成多个等长的块 (Block) ,使用确定的算法和对称密钥对每组分别加密或解密.分 ...
- 0-1背包算法python实现
0-1背包算法python实现 import numpy as np#计算状态数组 def bag(n,value,weight): '''n 背包容量value 价值数组weight 重量数组''' ...
- 背包算法轻松搞定——01背包算法、部分背包算法
这篇文章过程讲得很详细,一文搞懂(点击看原文) 不懂之前觉得很难理解,觉得很复杂,其实没有必要.因为只要懂动态规划就可以很轻松搞定0-1背包算法(部分背包算法更简单,排序即可).之前看了很多篇文章都觉 ...
- 贪心算法和01背包算法
贪心算法和01背包算法 实验报告 1.问题 2.解析 3.设计 4.分析 5.源码 实验报告 课程名称 <算法分析与设计> 实验名称 贪心算法和01背包算法 1.问题 [描述算法问题,首选 ...
- 0-1背包算法和完全背包算法MATLAB代码实现
有10件物品,它们的重量分别是5,8,3,2,6,6,5,4,7,5,,它们的价值分别是2,4,7,7,3,6,3,5,4,6,现在给你个承重为30的背包,试用0-1背包.完全背包算法,分别计算如何让 ...
- 密码学学习笔记(二)——对称密码算法(轻量级密码算法Twine)
文章目录 1. 分组密码(Twine) 1.1 加解密方式 1.1.1 加密 1.1.2 密钥生成算法 1.1.3 解密 1.1.4 全部代码 1.2. 分组密码的模式 1.2.1 ECB模式 1.2 ...
- 对称密码算法Rijndael解析—加密
这篇文章是 对我的上一篇博文的延续,之前讲解了 AxCrypt的安装于环境配置,这一章就开始谈谈其内部算法的实现.下面一篇是对其加密部分的讲解. Rijndael算法是一种对称的密码算法.它允许可变动 ...
最新文章
- 度量 数据突变_4篇Nature“霸屏”!史上最大规模人类遗传变异体数据库发布
- nohup 与 linux 程序后台执行
- linux 导出软件,如何将perf(Linux工具)的输出保存到文件中?
- Reactor线程模型
- 教我兄弟学Android逆向
- python——sort方法、sorted函数——排序
- Atitit USRqc62204 证书管理器标准化规范
- 今天修改包名时出现 java.lang.ClassNotFoundException: com.myandroid.qqlogin1.MainActivity错误
- c语言误差椭圆,平差计算
- 数字化施工管理太玄乎?“要点+案例”让你一看就懂
- instagram第三方登录
- 模块化和组件化的理解
- 深信服 SANGFOR 设备密码恢复和配置备份恢复
- stm32f407 休眠模式_STM32进入和退出睡眠模式
- 12.面向对象(继承/super/接口/抽象类)
- 前端如何创建好看的简洁的蒙版弹窗
- 论随机数AC大法(1)
- Elliptic Labs进军国际市场, 推出Poco F4 GT游戏智能手机
- 老男孩mysql运维dba实战21部完整版_老男孩Mysql DBA高级运维系列课程(16部)
- 12个摄影发烧友必知的常识
热门文章
- python怎么用pip_python怎么使用pip工具
- php gd测试代码,PHP: GD - Manual
- 太赞了!华为《Linux中文手册》火了,完整版 PDF 开放下载!
- python 哪些比赛项目_70个超火python小项目列表,拿走·不谢
- 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
- 成功解决ValueError: Could not interpret input day
- 成功解决Docker Desktop requires Windows 10 Pro or Enterprise version 15063 to run.
- 成功解决FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `ar
- Py:Python实现好莱坞《黑客》影视中珠帘似吊炸天的华丽动态加密页面
- auto-sklearn案例解析二