密码学课设 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 <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#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] = (
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值