密码算法

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网络加密和解密

具体步骤:

  1. 输入的64比特数据划分为两个32比特,分别作为“左侧”LD和“右侧”RD输入。
  2. ((RD + 子密钥) --> 轮函数f) XOR (LD) = 加密后的LD 向下作为下一轮左侧
  3. 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字节

  1. SubBytes(逐字节替换):以每个字节的值(0~255)为索引,从一张拥有256个值的替换表(S-Box)中查找对应值。

SubBytes(逐字节替换)

  1. ShiftRows(行平移):以4字节为单位的行(row)按一定规则向左平移,且每一行平移的字节数不同。

ShiftRows(行平移)

  1. MixColumns(列混合):将每列4字节值根据矩阵运算转变为另外的值。

MixColumns(列混合)

  1. AddRoundKey(轮密钥XOR):将每1字节与轮密钥进行XOR。

AddRoundKey(轮密钥XOR)

其解密过程也是使用相同的结构,顺序调换罢了。
在这种结构中,输入的所有比特在一轮中都会被加密,这个Feistel网络有所区别,使得其加密所需轮数更少,此外,加密过程还能以字节、行、列为单位并行计算

------本文图文参考书《图解密码技术》------

01. 对称密码——算法相关推荐

  1. md5不是对称密码算法_密码学中的消息摘要算法5(MD5)

    md5不是对称密码算法 In cryptography, MD5 (Message-Digest algorithm 5) is a mainly used cryptographic hash fu ...

  2. PHP-密码学算法及其应用-对称密码算法

    转自:http://www.smatrix.org/bbs/simple/index.php?t5662.html // 目录 1.    PHP的散列函数及其应用 2.    PHP中的对称密码算法 ...

  3. 密码学:分组密码.(块密码:是一种对称密码算法)

    密码学:分组密码. 分组加密(Block Cipher) 又称为分块加密或块密码,是一种对称密码算法,这类算法将明文分成多个等长的块 (Block) ,使用确定的算法和对称密钥对每组分别加密或解密.分 ...

  4. 0-1背包算法python实现

    0-1背包算法python实现 import numpy as np#计算状态数组 def bag(n,value,weight): '''n 背包容量value 价值数组weight 重量数组''' ...

  5. 背包算法轻松搞定——01背包算法、部分背包算法

    这篇文章过程讲得很详细,一文搞懂(点击看原文) 不懂之前觉得很难理解,觉得很复杂,其实没有必要.因为只要懂动态规划就可以很轻松搞定0-1背包算法(部分背包算法更简单,排序即可).之前看了很多篇文章都觉 ...

  6. 贪心算法和01背包算法

    贪心算法和01背包算法 实验报告 1.问题 2.解析 3.设计 4.分析 5.源码 实验报告 课程名称 <算法分析与设计> 实验名称 贪心算法和01背包算法 1.问题 [描述算法问题,首选 ...

  7. 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背包.完全背包算法,分别计算如何让 ...

  8. 密码学学习笔记(二)——对称密码算法(轻量级密码算法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 ...

  9. 对称密码算法Rijndael解析—加密

    这篇文章是 对我的上一篇博文的延续,之前讲解了 AxCrypt的安装于环境配置,这一章就开始谈谈其内部算法的实现.下面一篇是对其加密部分的讲解. Rijndael算法是一种对称的密码算法.它允许可变动 ...

最新文章

  1. 度量 数据突变_4篇Nature“霸屏”!史上最大规模人类遗传变异体数据库发布
  2. nohup 与 linux 程序后台执行
  3. linux 导出软件,如何将perf(Linux工具)的输出保存到文件中?
  4. Reactor线程模型
  5. 教我兄弟学Android逆向
  6. python——sort方法、sorted函数——排序
  7. Atitit USRqc62204 证书管理器标准化规范
  8. 今天修改包名时出现 java.lang.ClassNotFoundException: com.myandroid.qqlogin1.MainActivity错误
  9. c语言误差椭圆,平差计算
  10. 数字化施工管理太玄乎?“要点+案例”让你一看就懂
  11. instagram第三方登录
  12. 模块化和组件化的理解
  13. 深信服 SANGFOR 设备密码恢复和配置备份恢复
  14. stm32f407 休眠模式_STM32进入和退出睡眠模式
  15. 12.面向对象(继承/super/接口/抽象类)
  16. 前端如何创建好看的简洁的蒙版弹窗
  17. 论随机数AC大法(1)
  18. Elliptic Labs进军国际市场, 推出Poco F4 GT游戏智能手机
  19. 老男孩mysql运维dba实战21部完整版_老男孩Mysql DBA高级运维系列课程(16部)
  20. 12个摄影发烧友必知的常识

热门文章

  1. python怎么用pip_python怎么使用pip工具
  2. php gd测试代码,PHP: GD - Manual
  3. 太赞了!华为《Linux中文手册》火了,完整版 PDF 开放下载!
  4. python 哪些比赛项目_70个超火python小项目列表,拿走·不谢
  5. 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
  6. 成功解决ValueError: Could not interpret input day
  7. 成功解决Docker Desktop requires Windows 10 Pro or Enterprise version 15063 to run.
  8. 成功解决FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `ar
  9. Py:Python实现好莱坞《黑客》影视中珠帘似吊炸天的华丽动态加密页面
  10. auto-sklearn案例解析二