初始置换IP

表格的使用方法: 将输入的64bit的明文从1开始标号,依次放入到IP初始置换表中数字对应的位置。填充完毕后,按照行优先的顺序从第1行开始依次读取获得输出。

16轮轮结构

整体结构

因为这16轮的操作都是一样的,所以这里我们只介绍第一轮的操作

  1. 将上一步经过初始置换IP后的64bit的结果平分为两部分(每部分32bit),分别记为\(L_0\) 和 \(R_0\)

  2. 对\(R_0\)进行一次F函数的变换并与\(L_0\)进行异或,结果作为\(R_1\),\(R_0\)作为\(L_1\)

    即:

    $ L_i = R_{i-1}$

    \(R_i = L_{i-1} \oplus F(R_{i-1}, K_i)\)

  3. 进行下一轮

F函数

F函数是对\(R_i\)进行操作这一前提条件之后不再重复

  1. E盒扩展

    同初始置换IP的步骤相同,按照顺序将输入的\(32bit\)依次放入对应的位置,仍按照行优先输出,输出结果为\(48bit\)

  2. E盒扩展结果与48bit的轮子密钥进行异或

  3. S盒代替压缩

    将\(48bit\)分为\(8\)组,每组\(6bit\),依次编号为\(B_1,B_2,...B_8\)

    一共有\(8\)个S盒,依次编号为\(S_1,S_2,...S_8\)

    \(B_i\)对应着使用\(S_i\)

    考虑\(B_1\),\(B_1 = b_1b_2b_3b_4b_5b_6\),我们定义\(r = 2*b_1+b_6, c = 2^3b_2+2^2b_3+2b_4 + b5\)(即将二进制转化为十进制),我们去\(S_1\)盒中找到\(r\)行\(c\)列对应的十进制数,将其转化为4位二进制即为结果

    参照\(B_1\)的方法,依次转化完余下\(5\)组,最终得到\(32bit\)的输出

  4. p盒置换

    使用下表进行p盒置换,使用方法和IP初始置换相同

逆初始置换

16轮轮结构最后得到64位的输出,使用逆初始置换表将数据进行重新编排,使用方法同IP初始置换

子密钥生成

  1. 置换选择

置换选择PC-1输入64bit的原始密钥,输出56bit

若输入为56bit,则需要在\(8, 16, 24, 32, 40, 48, 56, 64\) bit处分别插入\(0,0,1,0,0,0,1,0\) 变为64bit

使用下表格进行置换选择PC-1,仍然是按照先后顺序将原始序列中的每一位填入下表,表格中缺少8的倍数,从而将输入的64bit变为输出的56bit,读取时仍为行优先。

  1. 循环移位

    将置换选择PC-1之后得到56bit的输出平分为两部分,各为28bit,即为\(C_0\), \(C_1\)

    根据下标判断需要移动多少位

    所谓循环移位是指将\(C_0\), \(C_1\)均看为一个循环的序列,左移1位将最左侧的一位移动到序列的尾部

    eg: 1 0 0 1 -> 0 0 1 1

DES算法流程的更多相关文章

  1. AES算法,DES算法,RSA算法JAVA实现

    1     AES算法 1.1    算法描述 1.1.1      设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...

  2. DES算法详解

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

  3. 基于DES算法加密的防撞库密码系统项目总结

    项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...

  4. MFC 简单实现 DES 算法

    前言 徐旭东老师说过学者就应该对知识抱有敬畏之心,所以我的博客的标题总喜欢加上"简单"二字,就是为了提醒自己,自己所学知识只是皮毛,离真理还远矣. DES 算法 DES算法是密码体 ...

  5. 安全体系(一)—— DES算法详解

    本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(二)——RSA算 ...

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

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

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

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

  8. IDAPython实战项目——DES算法识别

    在CTF的逆向中我们需要的是找到加密的主函数,结合了yara的识别原理,通过对常量数组的引用的查找,一步步递归构建调用树.调用树根部就是可能的密码算法主函数. 由于这种办法需要常量分布于算法的各个步骤 ...

  9. 聊聊密码学中的DES算法

    用心分享,共同成长 没有什么比你每天进步一点点更实在了 本文已经收录至我的github,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/artic ...

  10. 对称加密算法之DES算法

    数据加密标准(data encryption standard): DES是一种分组加密算法,输入的明文为64位,密钥为56位,生成的密文为64位. DES对64位的明文分组进行操作.通过一个初始置换 ...

随机推荐

  1. python 判断一个字符串中是否存在另一个字串中的元素

    如 判断str是否包含str_list中的元素 str = "this is string example....wow!!!" str_list = ['aa','bb','st ...

  2. 03php拉取服务器信息并生成json

    <?php$servername = "服务器";$username = "用户名";$password = "密码";$dbname ...

  3. Python+Django(1)——建立项目

    为项目新建一个目录,将其命名为learning_log,再在终端中切换到这个目录(Python 3): 运行模块venv 来创建一个名为ll_env的虚拟环境:python -m venv ll_en ...

  4. 12.20linux学习第十九天

    今天老刘开始讲第17章 使用iSCSI服务部署网络存储.第18章 使用MariaDB数据库管理系统和第19章 使用PXE+Kickstart无人值守安装服务,内容有点多. 7.1 iSCSI技术介绍 ...

  5. Linux习题

    1.判断/etc/inittab文件是否大于100行,如果大于,则显示"/etc/inittab is a big file."否者显示"/etc/inittab is ...

  6. Mysql 的用户权限等操作管理与设置(创建、授权、修改、查看)

    注:请在 MySql 的客户端操作 1.创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password';//例 CREATE USER 'use ...

  7. github pic test

  8. P2345 [USACO04OPEN] MooFest G

    简单的一个分块处理:优雅的暴力枚举 #include<bits/stdc++.h>using namespace std; typedef long long ll;const int N ...

  9. C++初识指针之一

    新手学习C/C++都跳不过去的地方,就是指针,用的话,确实好用,但是概念比较绕, 指针的通俗说法 1.简单的来说,就是说每一个变量,在电脑内都占一个地方,这个地方用一个16进掉的编号来进行标记,类似于 ...

  10. 记我的第一个UVM项目

    没有天天写博客的习惯,后果就是老是忘记自己的排版风格.为了追求统一还要翻一下之前是怎么写的.这也算是意料之外的发现吧. 说实话,没人教的话从零开始学一个新的东西实在是太难了.即使互联网的存在已经大幅降 ...