(最新版)密码学实验报告 下载本文

内容发布更新时间 : 2024/11/17 6:19:00星期一 下面是文章的全部内容请认真阅读。

} } main() {

char string[100];

int x,y; }

printf(\输入\gets(string);

printf(\请输入密钥\scanf(\printf(\密文:%s\\n\fun(string,x,y);

printf(\明文:%s\\n\

密码加密: #include

void change(char old[],char new1[][5]) { int i,j,t;

char temp[20][5]; t=strlen(old);

for(i=t;i<(5-t%5)+t;i++) //将一维数组old每5个分成一组 不足5位的用X补充

old[i]='x';

for(i=t+(5-t%5);i<100;i++)

old[i]='\\0';

for(i=0;i<20;i++) //将一维数组old转换成一个20*5的二维数组

temp

for(j=0;j<5;j++) temp[i][j]=old[5*i+j];

for(i=0;i<20;i++) //密文字母交换顺序 {

new1[i][0]=temp[i][1]; new1[i][1]=temp[i][4]; new1[i][2]=temp[i][3]; new1[i][3]=temp[i][0]; new1[i][4]=temp[i][2]; } } main() {

char old[100],new1[20][5]; gets(old); change(old,new1); printf(\}

密码解密

#include

void change(char old[],char new1[][5]) { int i,j,t; char temp[20][5]; t=strlen(old);

for(i=0;i<20;i++) //将一维数组old转换成一个

20*5的二维数组temp

for(j=0;j<5;j++) temp[i][j]=old[5*i+j];

for(i=0;i<20;i++) //密文字母交换顺序 {

new1[i][1]=temp[i][0]; new1[i][4]=temp[i][1]; new1[i][3]=temp[i][2]; new1[i][0]=temp[i][3]; new1[i][2]=temp[i][4]; } } main() {

char old[100],new1[20][5]; gets(old); change(old,new1); printf(\}

实验二 序列密码

实验学时:2学时 实验类型:验证 实验要求:必修 一、实验目的

编程实现序列密码RC4的加密方法。 二、实验内容

序列密码RC4。 三、实验原理、方法和手段

RC4首先进行S表的初始化: (1);

(2)用密钥填充另一个256字节的数组K,如果密钥长度小于256字节,则依次重复填充,直至填满这个数组。

(3)J=0;

(4)对于I=0到255,重复以下步骤 ①;

② 交换和。

RC4对下面(1)~(5)循环后,得出密钥流的一个字节z。 (1); (2) (3) (4)交换和; (5); (6).

四、实验组织运行要求

本实验采用集中授课形式,每个同学独立完成上述实验要求。 五、实验条件

每人一台计算机独立完成实验,有如下条件: (1)硬件:微机;

(2)软件:VC++6.0、VC++.Net 2005。 六、实验步骤

(1)将各函数编写完成;

(2)在主函数中调用各函数,实现加密和解密。 七、实验报告

实验报告主要包括实验目的、实验内容、实验原理、源程序及结果。 线性移位寄存器:

#include #include

char InputKey[4]; //输入的4位密钥字符

int InitKey[32]; //密钥转化成的32位0或1的序列

int Bit[8]; //明文中单个字符的位序列(通过for使Bit数组改变,逐一表示各个字符) int LFSRKey[32];

char Out[2]; //每个字符加密后通过2位16进制表示

char Info[1000]; //需要加密的明文,最多1000位,当然可以修改该值使之更大

int tempInfo[1000]; //明文字符对应的Ascii值 int InfoLength; //实际明文长度 char Cipher[2000]; //密文 // (,0 )

void KeyToBit(); // 把初始密钥转化成位序列 void LFSR(); // LFSR序列加密

void Output16(); // 把二进制转化为16进制 void InfoToBit(int j); // 把输入的明文转化成位序列 main() {

int i,j ; char ans ; while ( 1 ) {

printf(\*****\\n\\n\

printf(\输入四个字符作为初始密钥,老师要求:good