密码学课设 SPN增强 Hust

题目如图

在这里插入图片描述

个人见解

这题就如字面意思,就是SPN加密的加强版。加强的方式无非就是改变密钥长度,改变S盒的加密方式,增加加密轮数等等…

因为这次加密的明文很长,所以我一次加密64位,S盒和P盒的内容也要随之改变了。

我的主要改变方法就是S盒的加密方法改变,由书上的s[16]改成了s[16][16]置换,其实还可以改进一下,就是让每一轮加密的S[16][16]内容都不相同,但是已经可以过系统的检测了就懒得再改了。

P盒由16长度变为了32长度。

这题有一个坑就是他给的TIPS,不能用ECB工作模式,所以要用CBC工作模式加密。

ECB:
在这里插入图片描述

CBC:
在这里插入图片描述

说白了就是,CBC每次明文加密之前,都要和上一组加密完成后的密文异或一下再继续假面,而ECB没有这个步骤。而第一组加密的明文没有上一组密文可以异或,所以需要我们随机生成一个y0去进行这个操作。

代码 C语言

#include 
#include 
#include 
#include #define true 1
#define false 0
#define nr 8
#define tu (1<<21)unsigned long long Key[9];/*与初始spn相比,增加了轮数,增加了分组长度,增加了秘钥长度,使用了AES的S盒子*/
/*分组长度为64*/
unsigned short S[16][16] = {
};//S盒子内容就自己填吧,反正随机的
unsigned short P[32] = {
};//P盒子内容就自己填吧,反正随机的unsigned long long S_Box(unsigned long long In)
{unsigned long long Out = 0;unsigned long long M[16];M[0] = (In & 0xF000000000000000) >> 60;M[1] = (In & 0x0F00000000000000) >> 56;M[2] = (In & 0x00F0000000000000) >> 52;M[3] = (In & 0x000F000000000000) >> 48;M[4] = (In & 0x0000F00000000000) >> 44;M[5] = (In & 0x00000F0000000000) >> 40;M[6] = (


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部