DES加密解密(C++实现)

这篇博客详细介绍了DES加密解密的过程,包括初置换、拓展置换、S盒操作等步骤,以及加密和解密时密钥的不同使用。同时,还阐述了密钥生成的步骤,从64位密钥到58位T,再到16轮的扩展和循环左移。
摘要由CSDN通过智能技术生成

这是我们信安协会很早布置的作业,前几天终于写完了,嘿嘿O(∩_∩)O~


其实DES加密很简单,流程如下


1.对64位明文进行初置换,结果为A

2.将A分为两部分,左32位记为L,右32位记为R

3.对R进行拓展置换,得到X(48位)

4.将第I轮的密钥与X异或,得到Y(48位)

5.将Y穿入S盒,得到Z(32位)

6.将Z与L异或,结果传入L中

7.交换R和L

8.再次重复2~7,共计16次

9.将L和R整合,并将结果做末置换,加密完成


解密的流程其实是一样的额,只不过密钥不一样

假设加密时第i轮用的密钥Ki,那么解密时第i轮用的密钥是K(17-i)


下面说一下密钥生成的过程:


首先,我们一开始输入的密钥为X(64位)

1.将密钥X做密钥置换,取出其中58位记为T(58位)

2.取T左边28位为L,T右边28位为R

3.分别对R,L作循环左移

4.再对其做扩展运算,得到K[i]

6.重复3~4,共16次


这样大概也就说清楚了


#include<stdio.h>
#include<iostream>
#include<string.h>

#define BIT bool

using namespace std;

BIT K[16][48];

int 
    //初置换 
    IP[64] = {
    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},
    //末置换 
    FP[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},
    //密钥置换 
    KP[56] = {
    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 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值