DES算法实现(密码学第四次实验作业)

DES算法是一种典型的Feistel结构的分组密码算法,它的明文分组长度为64bit,密钥分组长度为64bit,其中有8bit是奇偶校验,所以有效密钥长度为56bit。DES算法的加密和解密采用同一过程,安全性依赖有效密钥。

DES算法加密过程

大致过程 : IP初始置换——16轮迭代变换——IP逆置换

 

1.需要输入的数据:

KEY:8字节密钥(64bit)

MIN:8字节明文(64bit)

相关介绍:

字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。

字符是指计算机中使用的文字和符号,比如1  2  3  A  B  C  a  b  c  ~ ! ·  # 等等。

在不同编码中字符和字节的对应关系不同,

ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

在加密过程中,是以64bit的形式进行变换的,即64位的二进制序列,所以要将输入的密钥和明文转化为64位二进制序列的形式

如:'a' 的ASCII值为97,将97转变为8位的二进制序列为  01100001

 

2 . IP初始置换:

将64位明文序列按下表进行置换(位置变换)

int IP_T[64] =    //IP置换矩阵
{
    58, 50, 42, 34, 26, 18, 10, 2, 
    60, 52, 44, 36, 28, 20, 12, 4,
    62, 54, 46, 38, 30, 22, 14, 6, 
    64, 56, 48, 40, 32, 24, 16, 8,
    57, 49, 41, 33, 25, 17,  9, 1, 
    59, 51, 43, 35, 27, 19, 11, 3,
    61, 53, 45, 37, 29, 21, 13, 5, 
    63, 55, 47, 39, 31, 23, 15, 7
};

将置换后的数据 分成  L0(32bit),R0(32bit)两部分

 

3 . 16轮迭代变换

迭代过程:

 

如图所示: 下一轮的左半部分就是上一轮的右半部分,下一轮的右半部分 先由 上一轮右半部分与轮密钥Ki进行F函数变换,再与上一轮的左半部分异或得到,即如下列公式:

       Li = Ri-1

       Ri = Li-1  ⊕ F(Ri-1 , Ki)

   

3.1 轮密钥生成 

1 . 64位秘钥降至56位秘钥,将密钥排成 8*8 的矩阵,每一行的第八位将作为奇偶校验位被忽略,于是形成了初始的56位的密钥

再通过置换表置换 PC-1(表中不含8,16,24,32,40,48,56,64这八个数),如下:

57,49,41,33,25,17,9,1,
58,50,42,34,26,18,10,2,
59,51,43,35,27,19,11,3,
60,52,44,36,63,55,47,39,
31,23,15,7,62,54,46,38,
30,22,14,6,61,53,45,37,
29,21,13,5,28,20,12,4

2.再将得到的56位密钥分成C0和D0,前28位为C0,后28位为D0

      按循环左移表循环左移:

1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16
1  1  2  2  2  2  2  2  1  2   2   2   2   2   2   1

将循环左移后的Ci,Di合并,得到56位,再通过置换表PC-2,变为48位,即为轮密钥Ki:

                                                                  PC-2

void PC_2(int input[56], int output[48])//PC_2
{
    for (int i = 0; i<48; i++)
        output[i] = input[PC2_T[i] - 1];
}

 

3.2  E盒扩展置换

将原来的明文数据的右半部分R从32位扩展成为48位,在两边扩展了两列 如下表进行扩展置换:

int E_T[48] =  //扩展矩阵
{
    32, 1,  2,  3,  4,  5
  • 16
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值