当前位置: 首页 > news >正文

DES算法总结

DES算法总结

题目中的M即为明文,K为初始密钥。

要求L1和R1

1.将M写成二进制的形式

M一共包含16个十六进制位,写成二进制一行肯定写不下,

所以我们分8行写,每一行只对应两个十六进制位。

2.对二进制M进行初始IP变换

这就是个换位变换,具体查阅教材31 表2.4 是个8x8矩阵。

索引是从1开始的。

ip变换表跟我们的二进制矩阵的形式是类似的,都是8x8矩阵。

第一个数58,意思就是将明文中的第58个二进制位放到该位置来。

第二个数50,意思就是将明文中的第50个二进制位放到该位置来。

这样一来,我们就得到了一个新的二进制矩阵。这就是初始变换后的明文

我们记为x0

x_0 = L_0R_0

所以这个二进制矩阵的前半部分(即上半部分)就是L_0

下半部分就是R_0

3.迭代运算

L_1 = R_0

这样L1就求出来了。

R_1 = L_0 \bigoplus f(R_{0},k_1)

L0已知,R0已知 ,现在就是k1未知。但是我们知道初始密钥k

下面我们要根据密钥生成算法求出k1才行。

4. 将初始密钥K写成二进制的形式

跟M一样,我们也将k写成8x8的二进制矩阵形式,主要是为了便于后续的运算。

5.换位选择1得56位密钥

初始密钥K一共64位,现在我们要将他变成56位。

具体查教材34页 表2.11

换位选择1的表一共56位,是8x7的矩阵。

第一个元素57的意思是:将初始密钥二进制串的第56位放到这个位置。

第二个元素49的意思是:将初始密钥二进制传的第49位放到这个位置。

看这个表是在是太累了,你直接按照这个顺序从初始密钥二进制矩阵中抄就好了。

先从左下角开始抄,每行抄8位,抄完之后就抄了28位了,这就是C(0)

然后再从右下角开始抄,接着之前的28位写,每行8位。这就是D(0)

接下来的操作就是分别对C(0)和D(0)进行操作了。

这样就得到了一个7行,8列的矩阵。

6.分别对C(0)和D(0)进行左移位

C(1) = \lambda \sigma (1) C(0)

D(1) = \lambda \sigma (1) D(0)

\lambda\sigma(i)是个移动位置的函数

查教材34页表2.1可知(不用查了)\lambda\sigma(1) = 1

所以分别将C(0)和C(1)向左移动一位就可以了。

C(0)循环左移得到C(1)

D(0)循环左移得到D(1)

C(1)和D(1)拼接起来,接着做下面的操作

7.对拼接之后的C(1)D(1)进行换位选择2得到k1

查教材34页表2.13,换位选择2的表是8x6的矩阵,所以我们最终的k1也是8x6的。

换位选择2没有什么规律,一个一个慢慢抄吧,

结果就是K1,

8.根据第3步的迭代运算

R_1 = L_0 \bigoplus f(R_{0},k_1)

需要计算f(R_0,k_1)

R_0是8x4 = 32位的,k_1是8x6= 48位的。

8.1 先对R_0进行扩展得E(R_0)

查阅32页表2.6

原来的R_0不动,直接在两边扩展。

左边扩展一位,右边扩展一位。

得到一个8x6的矩阵E(R_0)。和k1相同

8.2 将E(R_0)和k1异或

两个矩阵做异或你会吧。

得到一个8x6的矩阵。

8.3 进行S盒代替

查阅32页表2.7

每一行对应一个s盒子

第1行对应s(1)

第2行对应s(2)

每一行从6位变成了4位。

所以得到一个8x4的矩阵

8.4 经过一个换位变换

查阅教材33页表2.8

注意这个表是先看左半边,再看右半边。

注意第2行开头的29是第5位。

表示新二进制位的第5位是原来二进制串的第29位


至此就得到了f(R_{0},k_1)

L0是个4x8的矩阵。所以我们要做异或的话需要将刚刚得到的8x4

矩阵也写成4x8矩阵,两行并成一行就好了,OK!得到的就是R1

R_1 = L_0 \bigoplus f(R_{0},k_1)

相关文章:

  • 基于C 的libvirt 接口调用
  • python基础知识~元组,range和字典
  • 【ios】UITableView中的uitablviewcell在64位下显示重叠问题
  • Python生物学 Python for Bioinformatics 2nd - 2018.pdf
  • 服务发现系统consul-health check
  • 数据类型与运算符小结(JAVA)
  • redis的复制
  • 人工智能 + 物联网 = 智慧物联网
  • extjs Date的使用
  • rocketmq-producer
  • 谈谈javascript语法里一些难点问题(一)
  • 火箭还是飞机?——DevOps 的两种模式
  • linux下smb打印服务器部署过程(对windows终端)
  • 从JEditorPane入手,分析其中的MVC模式
  • mmc控制台,访问不了目标主机
  • Android Studio:GIT提交项目到远程仓库
  • Android交互
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Python连接Oracle
  • SegmentFault 2015 Top Rank
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Vue官网教程学习过程中值得记录的一些事情
  • 复杂数据处理
  • 好的网址,关于.net 4.0 ,vs 2010
  • 开发基于以太坊智能合约的DApp
  • 来,膜拜下android roadmap,强大的执行力
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 正则学习笔记
  • python最赚钱的4个方向,你最心动的是哪个?
  • 函数计算新功能-----支持C#函数
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #控制台大学课堂点名问题_课堂随机点名
  • #在 README.md 中生成项目目录结构
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net Signalr 使用笔记
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET4.0并行计算技术基础(1)
  • .net经典笔试题
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ C++ ] 继承
  • [AAuto]给百宝箱增加娱乐功能
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [ARM]ldr 和 adr 伪指令的区别
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [BZOJ] 2044: 三维导弹拦截