密码学AES算法用程序实现
输入:
从key.txt文件中读取密钥。文件中的密钥是ASCII码,长度大于16个字符,格式为:
XXXXXXXXXXXXXXXXXXXXXXXXX
比如:abcdefg1234567890
实验内容:
把读入的数据按AES密钥扩展的要求,按密钥长度为128比特的情况进行扩展。
输出:
输出到KeyExp.txt文件的尾部,不能直接覆盖原有内容,先输出自己的学号姓名,然后是W[0]-W[3],W[42]-W[43],每个分组一行,十六进制表示,格式为:
(空行)
学号:XXXXXXXXX,姓名:XXX
W[X]:XXXXXXXXXXXXXXXX
W[X]:XXXXXXXXXXXXXXXX
W[X]:XXXXXXXXXXXXXXXX
W[X]:XXXXXXXXXXXXXXXX
W[X]:XXXXXXXXXXXXXXXX
W[X]:XXXXXXXXXXXXXXXX
代码如下:
#include<stdio.h>
void b_h(unsigned char from[][4],unsigned char go[][4],int num);
void y_h(unsigned char from1[][4],unsigned char from2[][4],int num1);
void main()
{
unsigned char w[44][4];
char str[]="0123456789abcdef";
unsigned char number[]="2009123074";
unsigned char T[10][4];
unsigned char name[]="张三";
int i,j;
FILE * fp;
fp=fopen("key.txt","r");//初始密钥文件
if(fp==NULL)
{
printf("cannot find file\n");
exit(0);
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
fscanf(fp,"%c",&w[i][j]);
}
}
for(i=4;i<44;i++)//密钥扩展
{
if(i%4!=0)
{
y_h(w,w,i);
}
else
{
b_h(w,T,i);
y_h(w,T,i);
}
}
fp=fopen("KeyExp.txt","a");//打开结果文件
if(fp==NULL)
{
printf("cannot find file\n");
exit(0);
}
fprintf(fp,"\n学号:%s,姓名:%s\n",number,name);
for(i=0;i<4;i++)
{
fprintf(fp,"w[%d]:",i);
for(j=0;j<4;j++)
{
fprintf(fp,"%x",w[i][j]);
}
fprintf(fp,"\n");
}
for(i=42;i<44;i++)
{
fprintf(fp,"w[%d]:",i);
for(j=0;j<4;j++)
{
fprintf(fp,"%x",w[i][j]);
}
fprintf(fp,"\n");
}
fclose(fp);
}
void b_h(unsigned char from[][4],unsigned char go[][4],int num)
{
int ch[4];
int ch2[4];
int s[16][16]={
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2,
AES 加密算法中的密钥扩展C程序_计算机软件及应用_IT/计算机_专业资料。AES 加密...{ case 0:cm='0';break; case 1:cm='1';break; case 2:cm='2';...
AES算法实验报告_化学_自然科学_专业资料。实验报告 姓名:XXXXXXX 学号:XXXXXXXXXX...1.3 密钥扩展 AES 算法利用外部输入密钥 K(密钥串的字数为 Nk),通过密钥的...
通过 FPGA 仿真实现,实验结果表明,该方法既能保证密 钥扩展算法的安全性,亦能...1 传统 AES 的密钥扩展算法分析 AES 的密钥扩展算法又称密钥编排方案,由密钥的...
实验1 AES算法分析及其IP核体系结构设计_计算机硬件及网络_IT/计算机_专业资料。...输入密钥扩展的整个过程可以用下面的程序段描述: KeyExpansion(byte key[4*NK]...
5. 保存并提交这次实验的代码, 命名为 aes.cpp 和 rsa.cpp, 然后放在一个...2) 密钥扩展 KeyExpansion // Keyexpansion 函数生成 Nb(Nr+1)个轮密钥 round...
AES密钥扩充算法改进与随机性测试研究_互联网_IT/...1.1信息安全的概念信息安全的概念经历了漫长的历史...并分析了该改进方案具有 的特点,并用实验数据,对比...
实验六 对称密码基本加密实验-IDEA、AES 【实验目的】理解对称密码体制和分组密码...,35;轮密钥 为 rki,i=0,1,?,31;其中 MKi、Ki、rki 均为 32 比特;则...
[实验内容] 1. 分析 AES 算法、RSA 算法和 RC4 算法的原理与测试过程。 2....2.2 算法实现 以加密函数为例,如下所示,首先对密钥进行预处理密钥扩展,然后明...
AES算法轮密钥与种子密钥之间的关系研究_计算机硬件及网络_IT/计算机_专业资料。...实验1-AES密钥扩展 2页 2下载券 相关密钥Square攻击AES-... 暂无评价 6页 ...
二、实验任务 1、复习 AES 原理; 2、用 C/C++ 编写 AES 算法并调试通过; ...AES 加密解密过程中,每一轮都需要一个与输入分组具有相同长度的扩展密钥 W[i]...

我要评论