09秋数据库课程设计_小结_4

分工已完成,今天可以开始Coding了,距离成功又近了一步。

具体说下S盒的原理:

S盒会将48位的输入重新变为32为,所以P是一个从32位到32位的置换,其具体置换规则如下图所示:


DES算法的核心部分就是S盒,其结构如下图所示:


48位的输入分为8组,每组6位输入到一个小S盒(S(i))中,每个S(i)将8位输入压缩变换为4位,8个S(i)的输出形成32位的S盒输出。
每个S(i)的变换方法为(此处考虑S(1)):设S(1)的输入为b1b2b3b4b5b6,用b1b6对应的10进制数作为行号,用b2b3b4b5对应的10进制数作为列号查找下表,得到的数对应的二进制就是S(1)的输出结果。

现将代码贴下,稚嫩的代码。

// Shorten.cpp : Defines the entry point for the console application.
//

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

using namespace std;

const int nSboxOutput = 32;
const int nBlocklength = 6;

char *arrnS1[][16] = { {"1110","0100","1101","0001","0010","1111","1011","1000","0011","1010","0110","1100","0101","1001","0000","0111"},
{"0000","1111","0111","0100","1110","0010","1101","0001","1010","0110","1100","1011","1001","0101","0011","1000"},
{"0100","0001","1110","1000","1101","0110","0010","1101","1111","1100","1001","0111","0011","1010","0101","0000"},
{"1111","1100","1000","0010","0100","1001","0001","0111","0101","1101","0011","1110","1010","0000","0110","1101"}
};
char *arrnS2[][16] = { {"1111","0001","1000","1110","0110","1011","0011","0100","1001","0111","0010","1101","1100","0000","0101","1010"},
{"0011","1101","0100","0111","1111","0010","1000","1110","1100","0000","0001","1010","0110","1001","1011","0101"},
{"0000","1110","0111","1011","1010","0100","1101","0001","0101","1000","1100","0110","1001","0011","0010","1111"},
{"1101","1000","1010","0001","0011","1111","0100","0010","1011","0110","0111","1100","0000","0101","1110","1001"}
};
char *arrnS3[][16] = { {"1010","0000","1001","1110","0110","0011",

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值