密码学——DES加密

DES加密算法

首先,我们讲一下分组密码,顾名思义就是将明文消息分成组来进行加密,也就是说,加密器每次只能处理特定长度的一组数据,这里的"一组数据"就被称之为分组。我们也将每一个分组的比特数就称为分组长度。

我们设想一下,现在有一篇论文想要加密,我们将自己代入分组密码那个时代,计算机算力还不强,很多时候需要人工计算的时候,当我想加密一篇论文,有一种相当稳妥的做法,用毫无规律的密钥对明文进行为加密(实际上就是乱,越混乱越不会被看出来,解密凯撒的一种做法是统计字符数量进行猜测,这也是乱可以解决的),假设这个论文有十万个字,那我可以用十万个毫无规律随机的字母进行凯撒加密,实际效果应该相当好,但加密解密都挺麻烦特别是解密(当然我们不考虑运输密文和密钥会产生的情况),于是又为了简化这样恶心人的解密,同时又不失去混乱的特性,有了分组密码(当然,主要也是那时候加密机还不是电脑,造出来就不好修改了,又不好造太长了),分组密码实际上就是分成等长度的很多组,每个组加密的方式形式都一样。

下面我们讨论再des中一组密码(64bit)的加密

(1)初始置换IP(Initial Permutation)

    

 

 ip表有8*8=64

当输入明文X后,利用IP置换对明文进行换位处理,得到64bit密文组。我们设其为X'

对X'分成左右两个部分,即分别为32+32或者如表为4*8+4*8(即前四行+后四行)

左边记为L0,右边记为R0

(2)生成子密钥

我们在输入明文时还要输入密钥,长度也为64bit(一切都是为了足够的混乱,64bit中用32bit也会存在规律)

PC_1表置换

 

 PC_1置换实际上是为了去掉密钥K的8的奇偶校验码,并对剩下的56位进行打乱,实际上我们可以分两步进行。

奇偶校验码每八位在第八位上,也就是8,16,24,32,40,48,56,64位

可以发现在PC_1置换中没有这些位置的数字。

最后我们可以得到56位K'

同样,我们将其分为C0和D0,每个是28bit

PS:删除奇偶校验码的原因:我也不确定是否是这个原因,但至少有一点可能吧,明文是不重复的,要进行分组,但是密钥是针对每一组都一样的,奇偶校验码的存在会让密钥”规律“,我们为了安全,不能让密钥存在一丁点规律。(拙见,不必在意)

创建16个Cn和Dn

对于C0和D0进行移位,

 

 进行移位后得到C1到C16,,D1到D16

得到子密钥16个K

16个k分别作用在16个转轮机上,

 

 

先有Kn=PC_2(CnDn),CnDn代表着将Dn排在Cn后,即简单的字符串相加(56bit)

PC_2只有8*6=48,也就是有8个位置会没有被选上。不过密钥没有选上倒也无所谓,对信息没有损耗

n有1~16,则有16个K

即16个转轮机

(3)轮函数

转轮机就不介绍了

我们着重谈一下F函数

F函数

1.扩展置换(E盒)

 

 我们有一个E盒,最开始我们将明文分为L0和R0,接下来就需要使用了

R进入E盒,进行扩展,由32位转为48位

可以发现E盒的中间8*4部分是顺序的,左右各多出来两列,这两列是与相邻的格子里的数字有顺序关系,

2.密钥加

E扩展输出的48位数据与48位子密钥进行逐位异或运算,输出48bit

3.代换盒(S盒)

s盒有8个,里面的数字没有规律,每个盒有4*16个数字,对其进行的是查表运算

48bit分为6*8

每六个数字进入一个盒子中

其中第1,6个数字组成一个二进制两位数,可以作为十进制的0~3共四个数,查行数

其中第2,3,4,5个数字组成二进制四位数,可以作为十进制的0~15的某个数,用来查列数

可以查到八个数

这八个数可以分别转为二进制,一个数是4bit,则有4*8=32,相比原来的48位,又进行了压缩

 

 

4.置换运算(P盒)

 

 以上4个运算,每次都要运算,一共计算16次

 

(4)逆初始置换

 

posted @   逆世混沌  阅读(131)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 【.NET】调用本地 Deepseek 模型
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 狂迪 卢广仲
狂迪 - 卢广仲
00:00 / 00:00
An audio error has occurred.

作词 : 卢广仲/討海人/黄少雍

作曲 : 卢广仲

在我眼前消失不见

今天的什么都不对

楼下的店听见熟悉的音乐

谁离开我谁爱着我

剩下一半的小火锅

别乱牵拖直到你出现

满天星光月亮出来了

神魂颠倒这是真的吗

管不住我自己的步伐

戒不掉你致命的魔法

谁教我蜿蜒的弹跳

谁教我崎岖的舞蹈

我爱你你知不知道

OH Dónde estás Bongria

想要见面有点抱歉

下午才跟你晚上约

请放轻松看着公园的落叶

摇摇晃晃我的形状

一边海洋一边天堂

你拉着我这一步叫做永远

满天星光月亮出来了

神魂颠倒这是真的吗

管不住我自己的步伐

戒不掉你致命的魔法

谁教我蜿蜒的弹跳

谁教我崎岖的舞蹈

我爱你你知不知道

OH Dónde estás Bongria

我丢掉太多的不必要

朝着有你的方向跑

跑到你眼前逗你笑

听到电影里的配乐响起

全场只为了等你说一句

说欸你要不要跟我一起

去教堂

Yes I do希望你也一样

先说好一起永保安康

每一天蜿蜒的弹跳

每一天崎岖的舞蹈

我爱你你知不知道 OH

如果爱我让我看见你

的脚