简单理解DES加密算法
数据加密标准(Data Encryption Standard,DES)是当前使用最广泛的加密体制,对于任意的加密方案,总有两个输入:明文和密钥。
明文是64bits,密钥是56bits
加密过程就是初始和终结有两次置换,中间有十六轮加密变换。

以下是详细过程:
(生成子密钥)
查看ASCLL表,将computer转换为如下16进制表示的数:(具体不展开)
63 6f 6d 70 75 74 63 72


置换是根据置换表来的,往下会有提供。
举个例子:PC-1置换,


置换表PC-2

小结:
整个过程其实就是不断置换,中间移位一次的过程,最后会产生一个48位的子密钥,每一轮都不一样,每轮迭代的时候会用到,下面就会讲到。
为什么每一轮会不一样呢,因为移位的次数是根据迭代轮数变化的。
(生成密文)
第一步:初始置换
查看ASCLL表,将learning转换为如下16进制表示的数:(具体不展开)
6C 63 61 72 6E 69 6E 67

首先要明白,这些置换表是固定的。
置换过程开始了,A表指的是 learning 16进制转换成二进制后的结果,在每个位置标上“下标”,根据上图的置换表,
我们可以得出B表第1行第1列对应的应该是A表的第58号,我已经标上去了,答案是1。
以此类推,B表第1行第二列------A表50号(1);B表第2行第2列-------A表52号(0)。。。。

第二步:十六轮迭代置换。

Li=Ri-1;
Ri=Li-1⊕F(Ri-1,Ki)
L和R代表的是密文的左半部分(32位),和右半部分(32位)。
第一条公式我们可以看出:第二轮的左边等于第一轮的右边;重点是第二条公式,右边又等于什么呢?接下来详细讲:
过程:R0先扩展成48位,然后跟第一轮的子密钥K1(如果不知道怎么来的,请往上翻),进行异或操作之后,放入S盒当中(相当于公式中的F函数),最后输出32位,作为下一轮的右边,即R1。

补充:
1.扩展置换:中间4位不变,前后补充1位。
2.S盒的方法是这样子的:
S盒一共包含8个盒子,跟置换表一样,是DES固定不会变的,自行百度一下盒子的内容。所以异或之后不是有48位吗,每8位放入一个盒子。
举个例子,上图S1中, 111100 前后两位是10,说明是第2行,中间4位是1110,说明是第14列,那么你就到S1盒子的第2行第14列中找出那个数字,也就是5。
好,到这里你就完成了一次迭代,你也因此得出了第二轮的R1和L1。
。。。接下来,就是漫长的16轮迭代过程。
第三步:终止置换
(道理就不用讲了吧)

当然,解密过程就不多说,逆过来而已。
(1、本文只是举例子加密,助于初学者理解)
(2、本文没有提供所有的置换表)
简单理解DES加密算法的更多相关文章
- 最简单的DES加密算法实现
Base64.java package com.mstf.des; import java.io.UnsupportedEncodingException; /** * base64编码/解码 * @ ...
- 对称密码——DES加密算法
前言 本篇博文将介绍对称密码算法中的DES密码的算法原理与代码实现(Java) DES算法原理 DES加密算法是对称加密算法(加密和解密使用同一个密钥)中的一种,DES也是分组密码,以64位为分组对明 ...
- DES加密算法的C++实现
<信息安全技术>这门课又在讲 DES 加密算法了,以前用纯C写过一次,这次我用 C++ 重新写了一个,写篇文章以备后用.本文介绍了 DES 算法加密的大致步骤和整体流程. 一.DES算法原 ...
- 在.NET Core 里使用 BouncyCastle 的DES加密算法
.NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- [转]简单理解Socket
简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html 题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- Deep learning:四十六(DropConnect简单理解)
和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...
随机推荐
- nginx 方向代理
#nginx 监听原理 先监听端口 --> 再配置域名 -->匹配到就访问local 否则 没有匹配到域名就默认访问第一个监听端口的local地址 # vi nginx.conf user ...
- 【TOJ 3369】CD(二分)
描述 Jack and Jill have decided to sell some of their Compact Discs, while they still have some value. ...
- ABAP术语-Business Framework Architecture
Business Framework Architecture 原文:http://www.cnblogs.com/qiangsheng/archive/2007/12/29/1019277.html ...
- less学习三---父选择器
引用父选择器需要用到“&”符号 &运算符表示嵌套规则的父选择器,并且在修改类或伪类选择器的应用中非常普遍 ul{ li{ &:nth-child(2) a { color: r ...
- ThinkPHP 5 整合支付宝微信支付(支付宝H5,微信H5、APP支付、公众号支付)
因项目没有PC站所以没有写电脑网站支付. Pay.php支付控制器 <?php // +----------------------------------------------------- ...
- 腾讯招聘网数据爬取存入mongodb
#!/user/bin/env python3 # -*- coding: utf-8 -*- import requests from lxml import etree from math imp ...
- python学习之常用模块
- C语言实例解析精粹学习笔记——39(简单的文本编辑器)
实例说明: 编辑一个简单的单行文本编辑器,编辑命令有以下几种:(E.Q.R.I.D) 只有自己在完全空白的情况下编写出来的程序,才是真正自己会的程序,现在所做的,不过是程序的搬运工,把书上的程序搬到网 ...
- win7 下安装oracle 11g出现错误: 启动服务出现错误 找不到服务OracleMTSRecoveryService
这种错误是在多次安装oracle都没有成功的情况下发生的. 正确安装oracle,是有前提条件的 1,安装最新的jdk,不是jre!!(并配好环境变量,在cmd中测试 java -version与ja ...
- IDEA中SVN的使用
文件红色:表示文件没有添加到服务器 绿色:表示没有更新新的修改到服务器 普通黑色:表示和服务器同步 1.如何让修改的文件的父文件也变成蓝色(未提交的状态) 2.其中的1.6 format 1.7 fo ...