对称密码体制

对称密码体制:一种加密系统。其加密密钥和解密密钥是相同的,或者能够从其中之一推知另一个。对称密码体制根据对明文加密方式不同分为分组密码和流密码。

分组密码

分组密码按照一定长度(如64bit、128bit)对名文分组,然后以组为单位进行加、解密。

分组密码系统:对不同的组采用同样的密钥k来进行性加密、解密。

明文组:

密文:

分组密码设计就是找到一种算法,能在密钥的控制下,从一个足够大、足够好的置换子集中简单、迅速的选出一个置换、对当前输入的明文数字组进行加密变换。

算法要求:

  • 分组长度足够大,使得不同明文分组的个数2^n足够大,以防止明文被穷举法攻击。
  • 密钥空间应足够发,尽可能消除弱密钥,从而使所有密钥同等概率,以防穷举密钥攻击,同时密钥不能太长,以利于密钥管理。
  • 由密钥确定的算法要足够复杂,充分实现明文与密钥的扩散和混淆,没有简单的关系可循,要能抵抗各种已知的攻击,差分攻击、线性攻击等。
  • 要尽量使用适合编程的子块和简单的运算
  • 加密解密应具有像是性。

分组密码的一般结构

Feistel结构

  • 明文P为64b的数据被平分为32b的L0和R0,如果明文数据不足64b就用一种特殊的方法填充到64b。
  • +表示异或
  • K表示种子密钥64位,ki表示子密钥,是48b的密钥。那这里就会有疑问了,密钥是48b的数据,每次加密的明文是32b的数据,怎么如何进行加密呢,这里就是F的作用了,
  • F是轮函数,在轮函数里面会对数据进行处理,首先会对明文进行E拓展置换,然后明文就变换为48b的数据,让后与ki进行异或,在进行S盒替换目的是在压缩为32b数据,和P盒替换四个过程。
  • 结果:Li=R(i-1) ; Ri=L(i-1)异或F(Ri-1,ki)
SP结构

F轮函数内容

F轮函数包括(E扩展置换-数据扩展为48b、数据与密钥异或、S盒压缩处理-数据变为32b、P盒置换)

E拓展置换

  • E拓展置换简单来说就是把分组后的32b的数据拓展为48位数据,为了盒子密钥进行异或。我们假设32b的数据就是如下图排列,那么黄色标注的数据就是添加的数据,也就是把原本8行4列的数据拓展为8行6列数据,当然数据在内存里肯定不是矩阵的存在,我们这样是便于理解。

  • 那么我们先看它的拓展结果在进行解释。

32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
  • 拓展原理

    • 第一步:就是把32b的数据,变为8组4b的数据。
    • 第二步:然后再每组后面添加下一组的第一个数据.
    • 第三步:再每组数据前面添加上一组数据的最后一个数据。
    • 第四步:第一组和第八组分别没有前一组和后一组,那他们两组就是首尾相连。就是32位数据组成一个循环的圈,那每一组都会有前驱和后继了。

S盒压缩处理

经过拓展的48位明文和密钥进行异或运算后,再使用8个S盒压缩处理得到32位数据。

  • 将48位数据分为8块,每6位压缩为4位数据。
  • 每一组数据取头尾两个数组成一个二位二进制数作为列,中间4位数对应行,找相应s和该位置数据就是转换后的数据,如六位011001取第一位和第六位是01那就是第一行,中间四位是1100那就是第十二列,假设为第一组的数据那就去找S1盒的1行12列对应数据是9,那转换后的数据就是1001
  • 注意点:行和列对应的范围是0-3和0-15.
  • s盒对应表很容易在网上寻找,这里我也复制下来了。

  • S1盒
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
  • S2盒
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
1 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
2 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
3 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
  • S3盒
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
1 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
2 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
  • S4盒
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
1 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
2 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
  • S5盒
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
1 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
2 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
  • S6盒
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
1 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
2 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
3 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
  • S7盒
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
2 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
3 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
  • S8盒
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
3 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

P盒转换

P盒转换和初始转换相似,原理是一样的,这里先不说转换过程,等到下面初始置换的时候再说,现在这里保存P盒置换表

DES

DES是分组长度为64b的分组密码算法。密钥长度也是64b,其中每8b有一个奇偶校验位,所以有效长度为56b。采用Feistel结构。

DES算法框图



初始置换IP和初始逆置换IP:将明文数据用初始置换IP置换,得到一个乱序的64b明文分组,然后分组,经过16轮完全类似的迭代运算后,将所得的左右数据合并,最后使用初始逆置换IO置换,产生密文数据组。

初始置换

我们拿到的64为数据首先要进行初始置换,那么我们拿到的应该是一组有含义的数据我们假设是64个0、1二进制流,那么初始置换就是这些数据根据下表从新排列一边,这一步是很简单的,如我们对应下表,应该把源数据的第58个数据提到第一个位置,把第50个数据提到第二的数据,就是根据下表进行对应位置的转换。

初始置换IP

58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7

16轮迭代加密

上面基本已经讲了,在这里就说一下这个子密钥的生成。

子密钥的生成

密钥为64位的密钥,出去8位校验位,剩余的56位参与运算。

首先我们要用一个PC-1表把密钥的8位校验位去除,并且重新排序,这个和明文的初始置换是差不多的。

PC-1表

57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

然后我们把着56位的密钥,分为28位的两组数据,染后根据移位次数表分别左移,如我们要求第一次的子密钥,就把这两组28位密钥分别左移1位然后根据PC-2置换就是第一次的子密钥了,求第二次的子密钥就是在第一次的两组上在分别左移2位,在用PC-2置换回来,就是k2了。不知道有有没有写明白。

第i次迭代 1 2 3 4 5 6 7 8
循环左移次数 1 1 2 2 2 2 2 2
第i次迭代 9 10 11 12 13 14 15 16
循环左移次数 1 2 2 2 2 2 2 1

PC-2表

14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32

IP-1置换

把得到的R16和L16组合数据根据逆置换表置换就完成了。

逆置换IP-1

40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25

总结

我们得到64b的明文(不足64b的补足),我们首先使用IP置换处理一下明文,然后把他们分为两组32b的数据,然后两组数据进入16次迭代运算,16次迭代中每次有一组数据和一组子密钥(48b)进行异或运算,首先要把数据进行E扩展变为48b数据,然后进行异或,在经过S盒压缩处理,最后经过P置换,这就完成了F轮函数的过程,最后和另一组数据进行异或,完成一轮迭代,最后进行IP-1置换,完成加密,得到密文。

浅析DES原理的更多相关文章

  1. 浅析bootstrap原理及优缺点

    网格系统的实现原理,是通过定义容器大小,平分12份(也有平分成24份或32份,但12份是最常见的),再调整内外边距,最后结合媒体查询,就制作出了强大的响应式网格系统   网格系统的实现原理,是通过定义 ...

  2. 浅析WebSocket 原理

    浅析WebSocket 原理 长恨此身非我有,何时忘却营营. 简介:先简单了解下WebSocket 原理,日后的使用中再进一步深入研究~ 一.什么是WebSocket WebSocket 是HTML5 ...

  3. 浅析Kerberos原理,及其应用和管理

    文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/5269739.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...

  4. DES原理及代码实现

    一.DES基础知识DES技术特点 DES是一种用56位密钥来加密64位数据的方法    DES采取了分组加密算法:明文和密文为64位分组长度    DES采取了对称算法:加密和解密除密钥编排不同外,使 ...

  5. 懂了!国际算法体系对称算法DES原理

    概念 加密领域主要有国际算法和国密算法两种体系.国密算法是国家密码局认定的国产密码算法.国际算法是由美国安全局发布的算法.由于国密算法安全性高等一系列原因.国内的银行和支付机构都推荐使用国密算法. 从 ...

  6. DES原理

    1.DES的描述 为了建立适用于计算机系统的商用密码,美国商业部的国家标准局NBS于1973年5月和1974年8月两次发布通告,向社会征求密码算法.在征得的算法中,由IBM公司提出的算法lucifer ...

  7. 浅析foreach原理

    在日常开发工作中,我们发现很多对象都能通过foreach来遍历,比如HashTable.Dictionary.数组等数据类型.那为何这些对象能通过foreach来遍历呢?如果写一个普通的Person类 ...

  8. DES原理与实现

    一 DES综述 DES是对称密码的一种,它使用56位秘钥对64位长分组进行加密.DES对每个分组的内容都会进行16轮迭代,每轮的操作相同但是对应不同的子秘钥.所有的子秘钥都是由主密钥推导而来. 64位 ...

  9. 浅析DES与AES、RSA三种典型加密算法的比较

    DES与AES的比较 自DES 算法公诸于世以来,学术界围绕它的安全性等方面进行了研究并展开了激烈的争论.在技术上,对DES的批评主要集中在以下几个方面: 1.作为分组密码,DES 的加密单位仅有64 ...

随机推荐

  1. git忽略文件提交 .gitignore

    Git 忽略规则 详细的忽略规则可以参考官方英文文档 Git 忽略规则优先级 在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低) ...

  2. Centos7.+系统,二进制包脚本安装Mysql

    #!/bin/bash #配置数据库要安装的目录,可以根据自己的安装路径修改PATHDIRPATHDIR="/project"BASEDIR="$PATHDIR/mysq ...

  3. 中国首个进入谷歌编程之夏(GSoC)的开源项目: Casbin, 2022 年预选生招募!

    Casbin 明日之星预选生计划-Talent for Casbin 2022 "Casbin 明日之星预选生计划-Talent for Casbin 2022"是什么? &quo ...

  4. 如何结合phpstorm配置在docker中的xdebug

    作为一个资深的php开发者,我在之前的一篇文章里面也讲了如何搭建lnmp的docker镜像,这里不再赘述.在基于镜像运行容器中我也安装了xdebug,于是考虑用phpstorm来配置xdebug. 使 ...

  5. MongoDB 带访问控制的副本集部署

    当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成. 版本及环境 MongoDB4.4  Centos6.5  一. 下载安装 MongoDB Server 及 ...

  6. 攻防世界Web_python_template_injection

    题目: 就一句话啥也没有.python 模板注入.刚学菜鸡还不知道python模板有哪些注入漏洞,上网查一下.又学到一个知识点. python常用的web 模板有 Django,Jinja2,Torn ...

  7. Spring-servlet随笔1

    一:工程思想 1.建立父工程 2:导入通用依赖 3:删除无用文件 4:创建不同模块. pom.xml 依赖文件: <dependencies>   <dependency>   ...

  8. jmeter参数化文件路径问题

    问题 win下做好的带参数化文件的脚本,放到linux下运行,由于参数化文件路径不正确,导致脚本运行失败,如果解决这个问题呢? 方案一:参数化路径 比如,参数化文件我放到jmeter的bin目录下,参 ...

  9. [题解]第十一届北航程序设计竞赛预赛——F.序列

    题目描述 (1,--,n)的一个排列S,定义其对应的权值F[S]为:将S划分为若干段连续子序列,每个子序列都是上升序列,F[S]的值等于能划分出的最小段数. 求n的全排列的F[S]的和,答案mod(1 ...

  10. [旧][Android] Retrofit 源码分析之 Retrofit 对象

    备注 原发表于2016.04.27,资料已过时,仅作备份,谨慎参考 前言 在上一周学习了一下 Retrofit 的执行流程.接下来的文章要更为深入地学习 Retrofit 的各个类,这次我们先学习一下 ...