数据加密标准(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加密算法的更多相关文章

  1. 最简单的DES加密算法实现

    Base64.java package com.mstf.des; import java.io.UnsupportedEncodingException; /** * base64编码/解码 * @ ...

  2. 对称密码——DES加密算法

    前言 本篇博文将介绍对称密码算法中的DES密码的算法原理与代码实现(Java) DES算法原理 DES加密算法是对称加密算法(加密和解密使用同一个密钥)中的一种,DES也是分组密码,以64位为分组对明 ...

  3. DES加密算法的C++实现

    <信息安全技术>这门课又在讲 DES 加密算法了,以前用纯C写过一次,这次我用 C++ 重新写了一个,写篇文章以备后用.本文介绍了 DES 算法加密的大致步骤和整体流程. 一.DES算法原 ...

  4. 在.NET Core 里使用 BouncyCastle 的DES加密算法

    .NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...

  5. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  6. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  7. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  8. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  9. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

随机推荐

  1. DBF导入到Oracle数据库

    今天我遇到了一个需求,是将一个DBF文件导入到Oracle库中,之前一直使用的是公司提供的迁移工具,但是不知道怎么回事今天一直报DBF文件无法访问之类的错误,尝试多次之后,一气之下弃之不用,另寻他法. ...

  2. SecureCRT 个人使用爱好配置。

    1.设置默认启动会话设置. 2.设置执行 ls命令显示文件夹,各种文件,不同的对比颜色 2.1 设置前: 2.2 设置后: 3. 如果出现会话框中文乱码 ,设置以下选项 4 . 更改 命令 ls -a ...

  3. Oracle 反向索引(反转建索引) 理解

    一 反向索引 1.1 反向索引的定义 反向索引作为B-tree索引的一个分支,主要是在创建索引时,针对索引列的索引键值进行字节反转,进而实现分散存放到不同叶子节点块的目的. 1.2 反向索引针对的问题 ...

  4. 嵌入式:UCOSIII的使用(17.01.24补充)

    0.一些移植.系统相关 OS_CFG_APP.H /* --------------------- MISCELLANEOUS ------------------ */ #define OS_CFG ...

  5. ABAP术语-Function Builder

    Function Builder 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/03/1063196.html Tool for creat ...

  6. Mysql读写分离,主从同步实现

    随着用户量的增多,数据库操作往往会成为一个系统的瓶颈所在,因此我们可以通过实现数据库的读写分离来提高系统的性能. 通过设置主从数据库实现读写分离,主库负责“写”操作,从库负责“读”操作,根据压力情况, ...

  7. react native 踩坑之 SectionList state更新 不执行render重新渲染页面

    官方文档中指出 SectionList 本组件继承自PureComponent而非通常的Component,这意味着如果其props在浅比较中是相等的,则不会重新渲染.所以请先检查你的renderIt ...

  8. node Cookie

    代码: const express = require('express'); const cookieParser = require('cookie-parser'); const app = e ...

  9. Jersey2+swagger组建restful风格api及文档管理

    1.jar包引入 <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId& ...

  10. 修改mysql root密码的方法

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...