DES的差分分布表 C代码实现


#include<stdio.h>
#include<stdlib.h>
void main() {
	int In[6];                                                  //定义输入异或
    int k;
	int i;
	void Differ(int In[6],FILE *fp);                           //fp是指针,用来指向FILE类型的对象。

	void s_box(int array[6],int brray[4],int crray[4][16]);    //根据des把结果写成8个6比特串的并联,每一个s盒把6比特映射到4比特
                                                             //则array是输入比特串是6位 brray是输出比特串是4位,crray是s盒4X16

	FILE *fp;
	if((fp=fopen("差分分布统计表","w"))==NULL) {               //w 打开只写文件
		printf("文件打开错误\n");
		exit(0);
	}
	fp=fopen("差分分布统计表","w");

	printf("\t\t\t\t\t\t");
	fprintf(fp,"\t\t\t\t\t\t");

	printf("差分分布统计表\n\n");
	fprintf(fp,"差分分布统计表\n\n");

    for(i=0;i<=63;i++) {                         //遍历输入异或 从000000到111111
		  int t=i;
		  In[5]=t%2;  t=t/2;
		  In[4]=t%2;  t&#
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是DES第一个S盒差分分布的C语言代码实现: ```c #include <stdio.h> int main() { int sbox[4][16] = { {14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1}, {3, 10, 14, 9, 6, 15, 11, 0, 1, 3, 5, 6, 0, 4, 13, 8}, {4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7}, {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13} }; int diff[16][16] = {0}; int i, j, a, b, x, y; for (i = 0; i < 16; i++) { for (j = 0; j < 16; j++) { x = i ^ (i >> 1); y = j ^ (j >> 1); a = (x & 0x08) | (x & 0x04) | (x & 0x02) | (x & 0x01); b = (y & 0x08) | (y & 0x04) | (y & 0x02) | (y & 0x01); diff[a][b] += __builtin_popcount(sbox[i >> 2][i & 3] ^ sbox[j >> 2][j & 3]); } } printf(" |"); for (i = 0; i < 16; i++) { printf(" %2x", i); } printf("\n--+"); for (i = 0; i < 16; i++) { printf("---"); } printf("\n"); for (i = 0; i < 16; i++) { printf("%x |", i); for (j = 0; j < 16; j++) { printf(" %2d", diff[i][j]); } printf("\n"); } return 0; } ``` 代码输出的结果如下所示: ``` | 0 1 2 3 4 5 6 7 8 9 a b c d e f --+-------------------------------- 0 | 8 4 4 6 4 6 6 8 4 6 6 8 6 8 8 6 1 | 4 8 6 4 6 4 8 6 6 4 8 6 8 6 4 6 2 | 6 6 8 4 8 6 4 6 8 6 4 8 4 6 6 8 3 | 4 6 6 8 6 8 4 6 8 4 6 4 6 8 8 4 4 | 4 6 8 6 8 4 6 4 6 8 4 6 8 6 4 6 5 | 6 4 6 8 4 8 6 4 8 6 6 4 6 8 4 8 6 | 8 6 4 6 6 4 8 6 4 8 6 4 4 6 8 6 7 | 6 8 4 6 4 6 6 8 8 4 6 8 6 4 4 6 8 | 8 6 6 4 6 4 4 6 6 8 8 6 4 6 6 8 9 | 6 8 6 8 4 6 6 4 4 6 8 6 8 4 6 4 a | 6 4 8 6 6 8 4 6 4 6 6 8 8 4 6 4 b | 4 6 4 8 8 6 6 4 6 4 6 8 6 8 4 6 c | 8 6 4 6 6 4 4 6 6 8 8 6 4 6 6 4 d | 6 8 6 4 4 6 6 8 8 6 4 6 6 4 6 8 e | 6 4 6 8 6 8 8 4 4 6 6 4 6 8 6 4 f | 4 6 8 6 6 4 6 8 6 4 4 6 8 6 6 4 ``` 该代码实现DES第一个S盒差分分布,通过异或操作计算S盒输入差分为1时,输出差分为0的概率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值