首先 了解对称密码加密技术:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。但是有时候密钥不用完全相同 只要相似也可以。因为用一个密钥可以推导出另一个。


传统密钥算法有:DES,IDEA,TDEA,RC5等

同时 DES还是分组加密。对称加密分为分组加密和序列密码。

分组密码,也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。
序列密码,也叫流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。
解密是指用同样的密钥和密码算法及与加密相同的伪随机位流,用以还原明文位流。

下面来了解DES:

DES算法的主要过程:

那么首先 我们来看一下初始置换

这一部分 我们将密文按照固定的矩阵 进行位序的移动 这部分与密钥毫无关系

如上图 原本64位的58位 移动到了第一行第一列 原本的50位 移动到了一行二列

这一部分很明显是可逆的

之后我们把对来看一下密钥的操作

我们先去掉8个校验位(但是原本的序号肯定是不变的,从图中可以看出是去掉每个字节第八位)

然后再将56位换成两个28位

之后 这里的左移是二进制位运算的左移嗷

一共16轮          16轮不就生成了16个密钥嘛

两个28位左移比单纯56位左移 复杂性更高

之后

此时56位成为了48位 很多位数又没了

总的过程:

前边的这些操作都是移位 置换 没经过什么运算

现在乘机变换要真正进行加密了

经过扩展变换之后其实还有很多变换

乘积变换有点复杂 上边的可能看的有点晕 我就先大体说一下 我们首先是把初始置换(IP)的明文分成两部分 L0和R0

之后我们进行:

Li = Ri-1

Ri = Li-1 异或 f(Ri-1,Ki)

一共16次迭代变换 对应1<=n<=16 这里的f()函数 其中就包含了Rn-1先扩展变换(E盒变换)为48位 后与子密钥Ki异或运算 之后经过s盒压缩变换为32位 然后经过p盒32位的置换

这样应该就能懂了

那么现在讲讲扩展变换:

其实也就是变成了

扩展变换的结果与Ki进行二进制异或运算

得到的结果再经过s盒变换

大概的规则就是这个

我们举个例子 就能看懂了

之后就要经过P盒置换 从32位线性变换为32位 这就很简单了

这时候     f(Ri-1,Ki)的结果已经出来了 我们只需要把它和Li-1异或 就得到了Ri

经过16次运算 得到了L16和R16

好了 这时候我们再将L16和R16两部分 颠倒 合并为新的64位

也就是 新的64位 是R16和L16  这个能懂吧

然后对其执行一个最终的变换 IP-1 了

其实是IP的逆矩阵哦  要用到线性代数的知识

然后我们就得到了 明文M的加密形式C

现在再来讲讲解密 因为是对称密码 所以解密就简单多了 就是一个逆过程罢了

我们加密时16轮的迭代子密钥顺序是k1到k16

我们解密是从k16到k1

同时 产生子密钥的循环移位 是右移

之后我们就总结一下DES加密的数学模型吧:

解密的数学模型:

理解DES算法的更多相关文章

  1. Web安全学习笔记之DES算法实例详解

    转自http://www.hankcs.com/security/des-algorithm-illustrated.html 译自J. Orlin Grabbe的名作<DES Algorith ...

  2. Asp.Net 常用工具类之加密——对称加密DES算法(2)

    又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...

  3. 使用 DES 算法对数据加密

    DES算法 ☆提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改 ☆具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握 ☆DES密码体制的安全性应该不依赖于算法的保 ...

  4. DES算法解析

    DES算法  美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告. 1977年1月,美国 ...

  5. 怎么理解RSA算法

    原文地址:http://www.ittenyear.com/414/rsa/ 怎么理解RSA算法 能够把非对称加密算法里的公钥想象成一个带锁的箱子,把私钥想象成一把钥匙 能够把对称加密算法里的密钥想象 ...

  6. DES算法与四种加密模式的代码实现(C++语言)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Love_Irelia97/article/ ...

  7. 深入理解KMP算法

    前言:本人最近在看<大话数据结构>字符串模式匹配算法的内容,但是看得很迷糊,这本书中这块的内容感觉基本是严蔚敏<数据结构>的一个翻版,此书中给出的代码实现确实非常精炼,但是个人 ...

  8. DES算法详解

    本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 1.DES算法简介 DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准. DES是一个分组 ...

  9. KMP算法详解 --- 彻头彻尾理解KMP算法

    前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k. 但是问题在于如何求出这个最大前后缀长度呢? 我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破, 后来翻看 ...

随机推荐

  1. hystrix源码小贴士之调用异常处理

    executeCommandAndObserve方法处理onerror异常. return execution.doOnNext(markEmits) .doOnCompleted(markOnCom ...

  2. Redis5设计与源码分析读后感(二)简单动态字符串SDS

    一.引言 学习之前先了解几个概念: SDS定义:简单动态字符串,Redis的基本数据结构之一,用于储存字符串和整型数据. 二进制安全:C语言中用"\0"表示字符串结束,如果字符串本 ...

  3. php+html实现用户登录退出

    随着渗透学习,逐渐意识到了学会开发也是非常重要的,仅仅是看懂感觉还是差了一些,所以写一写php的开发,这套程序目前并未有较完整的功能,之后会不断进行完善 登录页面.html <!DOCTYPE ...

  4. DVWA SQL-injection 附python脚本

    SQL-Injection low等级 首先我们将dvwa等级调到low 如图 接下来选择SQL Injection,并在提交框中输入正常值1,查看返回结果 接下来检测是否存在注入,分别输入 1' a ...

  5. django_apscheduler 0.4.0删除了name字段

    使用django_apscheduler时默认使用了最新版本,为0.4.2版本,但是在这个版本中,使用migrate 生成定时任务模型时没有了name字段,导致之前写的定时任务不能执行. 翻了下 dj ...

  6. 摄像头Sensor 图像格式

    以0V7725为例: 顺便介绍一下0V7725的主要管脚,管脚定义能体现功能,体现使用方法.

  7. 实验1:Mininet源码安装和可视化拓扑工具

    一.实验目的 掌握 Mininet 的源码安装方法和 miniedit 可视化拓扑生成工具. 二.实验任务 使用源码安装 Mininet 的 2.3.0d6 版本,并使用可视化拓扑工具生成一个最简拓扑 ...

  8. matlab中nargin函数输入参数数目

    来源:https://ww2.mathworks.cn/help/matlab/ref/nargin.html?searchHighlight=nargin&s_tid=doc_srchtit ...

  9. JDK 中的栈竟然是这样实现的?

    前面的文章<动图演示:手撸堆栈的两种实现方法!>我们用数组和链表来实现了自定义的栈结构,那在 JDK 中官方是如何实现栈的呢?接下来我们一起来看. 这正式开始之前,先给大家再解释一下「堆栈 ...

  10. 成理信安协会反序列化01-利用fastcoll实现md5碰撞

    虽然是反序列化的题目,但主要考点在利用fastcoll实现md5碰撞. 直接上源码 <?php show_source(__FILE__); class CDUTSEC { public $va ...