DES加解密原理及C++代码描述

这篇博客详细介绍了DES加密算法的原理,包括加密流程、S-盒代替和编程思路。博主通过C++实现了一个DES加密函数,适用于密码学学习者参考。
摘要由CSDN通过智能技术生成

    这学期开了密码学的课程,接触到了DES加密,因此在这里写下博客,记录自己的学习过程。    

加密

    DES是一种对称密码算法,其明文长度为64bit(若明文长度大于64bit,则需对明文进行分组;小于64bit的部分则要进行填充),密钥长度为56bit。对于输入的56bit密钥,会先进行密钥扩展(填充奇偶校验位,此时密钥为64bit),随后对64bit密钥进行PC-1置换将其变为56bit,随后进行16轮循环,根据循环次数分别对置换后所得的前28bit密钥和后28bit密钥左移循环一定的位数,且在每一轮循环后对两部分密钥合并后进行PC-2置换,每一轮循环后所得结果即为该轮生成的子密钥Ki(0<=i<=16),其中Ki为48bit.

    对于输入的64bit明文,先经过初始IP置换后将所得的前32bit作为左部分L0,后32bit作为右部分R0,随后进行16轮循环。在第1-15轮循环中Li = R(i-1) ,Ri = Li-1^f(Ri-1,Ki);第16轮循环中比较特殊:L16 =L15^f(R15,K16),R16 = R15.。随后,将L16和R16(共64bit)合并,进行IP逆置换,即可得到DES加密后的密文。

    其中函数f(Ri-1,Ki)描述如下:对每一个右密钥Ri-1进行扩展变换E,再将所得结果和每一轮生成的子密钥Ki进行异或运算;最后,进行S-盒代替和P-盒置换。

S-盒代替

    将48bit数据分成6bit的八组,输入8个S-盒即可得到4bit*8的输出。

    注:E表拓展,IP置换,IP逆置换,S-盒以及P-盒、PC-1、PC-2均有固定的置换方式,具体附后:

const static char IP_Table[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 };


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


static const char E_Table[48] = {    //扩展变换E
32,1,2,3,4,5,4,5,6,7,8,9,8,9,
10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,
21,20,21,22,23,24,25,24,25,26,27,28,29,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值