现代密码学实验(题目代码).doc

合集下载

(完整版)北邮版《现代密码学》习题答案.doc

(完整版)北邮版《现代密码学》习题答案.doc

《现代密码学习题》答案第一章1、1949 年,( A )发表题为《保密系统的通信理论》的文章,为密码系统建立了理论基础,从此密码学成了一门科学。

A、Shannon B 、Diffie C、Hellman D 、Shamir2、一个密码系统至少由明文、密文、加密算法、解密算法和密钥 5 部分组成,而其安全性是由( D)决定的。

A、加密算法B、解密算法C、加解密算法D、密钥3、计算和估计出破译密码系统的计算量下限,利用已有的最好方法破译它的所需要的代价超出了破译者的破译能力(如时间、空间、资金等资源),那么该密码系统的安全性是( B )。

A 无条件安全 B计算安全 C可证明安全 D实际安全4、根据密码分析者所掌握的分析资料的不通,密码分析一般可分为 4 类:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击,其中破译难度最大的是( D )。

A、唯密文攻击 B 、已知明文攻击 C 、选择明文攻击D、选择密文攻击5、1976 年,和在密码学的新方向一文中提出了公开密钥密码的思想,从而开创了现代密码学的新领域。

6、密码学的发展过程中,两个质的飞跃分别指1949年香农发表的保密系统的通信理论和公钥密码思想。

7、密码学是研究信息寄信息系统安全的科学,密码学又分为密码编码学和密码分析学。

8、一个保密系统一般是明文、密文、密钥、加密算法、解密算法5部分组成的。

对9、密码体制是指实现加密和解密功能的密码方案,从使用密钥策略上,可分为称和非对称。

10、对称密码体制又称为秘密密钥密码体制,它包括分组密码和序列密码。

第二章1、字母频率分析法对( B )算法最有效。

A、置换密码 B 、单表代换密码C、多表代换密码D、序列密码2、(D)算法抵抗频率分析攻击能力最强,而对已知明文攻击最弱。

A 仿射密码 B维吉利亚密码C轮转密码 D希尔密码3、重合指数法对( C)算法的破解最有效。

A 置换密码 B单表代换密码C多表代换密码 D序列密码4、维吉利亚密码是古典密码体制比较有代表性的一种密码,其密码体制采用的是(C )。

现代密码学实验报告

现代密码学实验报告

现代密码学实验报告学生姓名学号专业班级指导教师学院完成时间实验一对称密码算法实验[实验目的]1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。

2.掌握DES、AES、RC4的算法流程和实现方法。

[实验内容]1. 分析DES、AES、RC4、SHA的实现过程。

2. 用程序设计语言将算法过程编程实现。

3. 完成字符串数据的加密运算和解密运算输入明文:Idolikethisbook输入密钥:cryption[实验步骤]一、DES算法1、DES算法及原理DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。

明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

2、DES算法加解密过程(1) DES算法加密过程如下:a.初始置换。

DES的第一阶段包括64位分组的置换,改变每个分组中位的顺序。

术语置换使用其严格的数学意义;只改变了顺序。

这64位数据现在被分成两半:L0(左半部分)和R0(右半部分)。

下标0说明是原始的数据。

在DES算法第二阶段的每次循环后,这些下标加1。

b.循环移位(16次)一种根据密钥,并且依赖于表格的算法。

这种操作通常被称为数据移位。

这个算法要重复16次,但由于每次移位都使用密钥的不同子分组,因此每次移位的操作各不相同。

密钥的子分组由另一组表格和表格的移位算法来确定。

在每次循环以后,L(左半部分)和R(右半部分)的下标依次加一。

第16次循环的结果被称为预输出。

c.逆置换DES的最后一个阶段包括64位分组的置换,改变每个分组中位的顺序,这与第1阶段的操作类似。

这次置换的输出结果就是密文。

(2)解密过程DES的解密过程和加密过程相同,只是在解密过程中将子密钥的使用顺序颠倒。

现代密码学实验(题目+代码)

现代密码学实验(题目+代码)
for(int i = 0; i < byte_length; i++) {
unsigned char temp = (unsigned char)0; for(int j=0; j< 8; j++) {
temp = temp | ( (next_state & (unsigned char)128) >> j );
(ciphertext)、加密密钥(encryption key)、解密密钥(decryption key)、加密算法(encryption algorithm)、解密算法(decryption algorithm)等。
二、实验内容 1)用 C\C++语言实现仿射变换(Affine)加/解密算法;2)用 C\C++语言实现统计 26
if((a<1||a>25)||(b<0||b>25)) cout<<"a,b 的输入范围有错!"<<endl;
else if(gcd(a)==0) cout<<"密钥 a 有误,与 26 不互素"<<endl; else { if(z==0)////加密算法 { ifstream in("a.txt"); ofstream out("b.txt"); vector<int> s; for(char x;in>>x; ) s.push_back(int(x)); for(int i=0;i<s.size();++i) { s[i]=(a*(s[i]-97)+b)%26; out<<char(s[i]+97)<<' '; }out<<endl;cout<<"加密成功!明文请见“b.txt”"<<endl; } else////解密算法 { ifstream in("b.txt"); ofstream out("a.txt"); vector<int> s; for(char x;in>>x; ) s.push_back(int(x)); for(int i=0;i<s.size();++i) { s[i]=inv(a)*(s[i]-97-b+26)%26; out<<char(s[i]+97)<<' '; }out<<endl;cout<<"解密成功!密文请见“a.txt”"<<endl;

现代密码学-RC4校验 实验报告

现代密码学-RC4校验 实验报告

现代密码学实验报告院系:理学院班级:信安二班姓名:学号:前言密码学(Cryptology)是研究秘密通信的原理和破译秘密信息的方法的一门学科。

密码学的基本技术就是对数据进行一组可逆的数学变换,使未授权者不能理解它的真实含义。

密码学包括密码编码学(Cryptography)和密码分析学(Cryptanalyst)两个既对立又统一的主要分支学科。

研究密码变化的规律并用之于编制密码以保护信息安全的科学,称为密码编码学。

研究密码变化的规律并用之于密码以获取信息情报的科学,称为密码分析学,也叫密码破译学。

密码学在信息安全中占有非常重要的地位,能够为信息安全提供关键理论与技术。

密码学是一门古老而深奥的学问,按其发展进程,经历了古典密码和现代密码学两个阶段。

现代密码学(Modern Cryptology)通常被归类为理论数学的一个分支学科,主要以可靠的数学方法和理论为基础,为保证信息的机密性、完整性、可认证性、可控性、不可抵赖性等提供关键理论与技术。

RC4密码算法算法实现实验目的:理解流密码的概念及相关结构; 理解并能够编写基本的流密码体制; 熟练应用C/C++编程实现RC4密码算法体制。

实验内容:编程实现RC4加/解密算法。

实验原理:RC4算法是一种序列密码体制或称流密码体制,其加密密钥和解密密钥相同RC4的密钥长度可变,但为了确保哪去安全强度,目前RC4至少使用128位的密钥。

用1~256个字节(8~2048位)的可变长度密钥初始化一个256个字节的状态向量S,S的元素记为S[0],S[1],…,S[255],从始至终置换后的S包含从0到255的所有8位数。

对于加密和解密,字节K是从S的255个元素中按一种系统化的方式选出的一个元素生成的。

每生成一个K的值,S中的元素个体就被重新置换一次。

实验代码:Encrypt.h文件:#ifndef _ENCRYPT_RC4_#define _ENCRYPT_RC4_#include <string.h>#define BOX_LEN 256intGetKey(const unsigned char* pass, intpass_len, unsigned char *out);int RC4(const unsigned char* data, intdata_len, const unsigned char* key, intkey_len, unsigned char* out, int* out_len);static void swap_byte(unsigned char* a, unsigned char* b);char* Encrypt(const char* szSource, const char* szPassWord); // 加密,返回加密结果char* Decrypt(const char* szSource, const char* szPassWord); // 解密,返回解密结果char* ByteToHex(const unsigned char* vByte, constintvLen); // 把字节码pbBuffer转为十六进制字符串,方便传输unsigned char* HexToByte(const char* szHex); // 把十六进制字符串转为字节码pbBuffer,解码#endif // #ifndef _ENCRYPT_RC4_Encrypt.cpp文件:#include "Encrypt.h"char* Encrypt(const char* szSource, const char* szPassWord) // 加密,返回加密结果{if(szSource == NULL || szPassWord == NULL) return NULL;unsigned char* ret = new unsigned char[strlen(szSource)];intret_len = 0;if(RC4((unsigned char*)szSource,strlen(szSource),(unsigned char*)szPassWord,strlen(szPassWord),ret,&ret_len) == NULL)return NULL;char* ret2 = ByteToHex(ret, ret_len);delete[] ret;return ret2;}char* Decrypt(const char* szSource, const char* szPassWord) // 解密,返回解密结果{if(szSource == NULL || (strlen(szSource)%2 != 0) || szPassWord == NULL) return NULL;unsigned char* src = HexToByte(szSource);unsigned char* ret = new unsigned char[strlen(szSource) / 2 + 1];intret_len = 0;memset(ret, strlen(szSource) / 2 + 1,0);if(RC4(src, strlen(szSource) / 2, (unsigned char*)szPassWord, strlen(szPassWord), ret, &ret_len) == NULL)return NULL;ret[ret_len] = '/0';return (char*)ret;}int RC4(const unsigned char* data, intdata_len, const unsigned char* key, intkey_len, unsigned char* out, int* out_len){if (data == NULL || key == NULL || out == NULL)return NULL;unsigned char* mBox = new unsigned char[BOX_LEN];if(GetKey(key, key_len, mBox) == NULL)return NULL;inti=0;int x=0;int y=0;for(int k = 0; k <data_len; k++){x = (x + 1) % BOX_LEN;y = (mBox[x] + y) % BOX_LEN;swap_byte(&mBox[x], &mBox[y]);out[k] = data[k] ^ mBox[(mBox[x] + mBox[y]) % BOX_LEN];}*out_len = data_len;delete[] mBox;return -1;}intGetKey(const unsigned char* pass, intpass_len, unsigned char* out) {if(pass == NULL || out == NULL)return NULL;inti;for(i = 0; i< BOX_LEN; i++)out[i] = i;int j = 0;for(i = 0; i< BOX_LEN; i++){j = (pass[i % pass_len] + out[i] + j) % BOX_LEN;swap_byte(&out[i], &out[j]);}return -1;}static void swap_byte(unsigned char* a, unsigned char* b){unsigned char swapByte;swapByte = *a;*a = *b;*b = swapByte;}// 把字节码转为十六进制码,一个字节两个十六进制,内部为字符串分配空间char* ByteToHex(const unsigned char* vByte, constintvLen){if(!vByte)return NULL;char* tmp = new char[vLen * 2 + 1]; // 一个字节两个十六进制码,最后要多一个'/0'int tmp2;for (inti=0;i<vLen;i++){tmp2 = (int)(vByte[i])/16;tmp[i*2] = (char)(tmp2+((tmp2>9)?'A'-10:'0'));tmp2 = (int)(vByte[i])%16;tmp[i*2+1] = (char)(tmp2+((tmp2>9)?'A'-10:'0'));}tmp[vLen * 2] = '/0';return tmp;}// 把十六进制字符串,转为字节码,每两个十六进制字符作为一个字节unsigned char* HexToByte(const char* szHex){if(!szHex)return NULL;intiLen = strlen(szHex);if (iLen<=0 || 0!=iLen%2)return NULL;unsigned char* pbBuf = new unsigned char[iLen/2]; // 数据缓冲区int tmp1, tmp2;for (inti=0;i<iLen/2;i++){tmp1 = (int)szHex[i*2] - (((int)szHex[i*2]>='A')?'A'-10:'0');if(tmp1>=16)return NULL;tmp2 = (int)szHex[i*2+1] - (((int)szHex[i*2+1]>='A')?'A'-10:'0');if(tmp2>=16)return NULL;pbBuf[i] = (tmp1*16+tmp2);}return pbBuf;}main.cpp文件#include <iostream>#include <string>#include <stdio.h>#include "Encrypt.h"intmain(){inti;std::cout<< "请选择你要进行的操作:1 .加密 2.解密" <<std::endl;std::cin>>i;if (i == 1){char source[100];char pass[100];char *result = NULL;std::cout<< "请输入明文:";std::cin>> source; std::cout<<std::endl;std::cout<< "请输入密钥:";std::cin>> pass;result = Encrypt(source, pass);printf("密文为:%s/n", result);delete[]result;}else if (i == 2){char result[100];char pass[100];char *source = NULL;std::cout<< "请输入密文:";std::cin>> result; std::cout<<std::endl;std::cout<< "请输入密钥:";std::cin>> pass;source = Encrypt(result, pass);printf("明文为:%s/n", source);delete[]source;}elsestd::cout<< "您输入的不合法!" <<std::endl;return 0;}实验结果:。

现代密码算法实验报告(3篇)

现代密码算法实验报告(3篇)

第1篇一、实验目的1. 了解现代密码学的基本原理和数论基础知识;2. 掌握非对称密码体制的著名代表RSA加密算法的工作原理和流程;3. 设计实现一个简单的密钥系统;4. 掌握常用加密算法AES和DES的原理及实现。

二、实验内容1. RSA加密算法实验2. AES加密算法实验3. DES加密算法实验三、实验原理1. RSA加密算法RSA算法是一种非对称加密算法,由罗纳德·李维斯特、阿迪·沙米尔和伦纳德·阿德曼三位密码学家于1977年提出。

其基本原理是选择两个大质数p和q,计算它们的乘积n=pq,并计算欧拉函数φ(n)=(p-1)(q-1)。

选择一个整数e,满足1<e<φ(n)且e与φ(n)互质。

计算e关于φ(n)的模逆元d。

公开密钥为(e,n),私有密钥为(d,n)。

加密过程为C=Me mod n,解密过程为M=Cd mod n。

2. AES加密算法AES(Advanced Encryption Standard)是一种分组加密算法,采用128位分组大小和128、192或256位密钥长度。

AES算法主要分为四个阶段:初始轮、密钥扩展、中间轮和最终轮。

每个轮包括字节替换、行移位、列混淆和轮密钥加。

3. DES加密算法DES(Data Encryption Standard)是一种分组加密算法,采用64位分组大小和56位密钥长度。

DES算法主要分为16轮,每轮包括置换、置换-置换、S盒替换和密钥加。

四、实验步骤及内容1. RSA加密算法实验(1)选择两个大质数p和q,计算n=pq和φ(n)=(p-1)(q-1);(2)选择一个整数e,满足1<e<φ(n)且e与φ(n)互质,计算e关于φ(n)的模逆元d;(3)生成公开密钥(e,n)和私有密钥(d,n);(4)用公钥对明文进行加密,用私钥对密文进行解密。

2. AES加密算法实验(1)选择一个128、192或256位密钥;(2)初始化初始轮密钥;(3)进行16轮加密操作,包括字节替换、行移位、列混淆和轮密钥加;(4)输出加密后的密文。

《现代密码学》实验教学大纲

《现代密码学》实验教学大纲

《现代密码学》实验教学大纲适用专业: 信息安全 课程性质: 必做课程编号: 0602003120 实验学时: 8课程总学时: 48 开课学期: 第5学期开课单位: 计算机工程教学实验中心一、实验目的与要求本课程实验教学的目的是使学生通过软件编程掌握(1)实现古典密码学中的多表代换加密(Vigenere加密)的密文进行破译的基本方法;(2)掌握DES加密算法、AES加密算法,能够在实际的应用系统或安全系统中实现;(3)掌握公钥密码体制模型、RSA算法、ECC算法、基于RSA和ECC的数字签名机制;能够在实际应用中利用公钥密码算法及签名机制实现加解密、数字签名、公钥基础设施平台的能力。

实验要求学生掌握Vigenere加密的密文采用重合指数法进行破解的方法;掌握DES、AES分组加密算法;掌握RSA算法加解密及其数字签名机制;椭圆曲线加解密算法及其数字签名机制的设计与实现。

掌握软件代码的调试方法,对程序运行的正确性进行反复测试,完成实验报告。

二、实验内容与学时分配序号实验项目实验内容学时实验类别开出要求1 多表代换Vigenere加解密算法及密钥破解算法的实现1.使用Vigenere加密算法在字符集{a...z}上的密钥、明文消息的编码、加密算法的编程实现,明文消息存储在文本文件plain.txt中;(2)利用密钥对密文进行解密算法的编程实现;(3)唯密文攻击:给出一段Vigenere加密后的密文cipher.txt,要求破解得到加密密钥key,利用key进行解密得到明文文件plain.txt,验证破解是否成功。

2 设计性必做2 AES加密、解密算法的实现(1)绘制AES-128算法流程图;(2)建立一个明文文本文件plain.txt, 从中读取16个字节(字符)作为AES加密的一个分组(block);(3)设置的一个AES加密算法的KEY=128bits(16个字节或4个字);(4)编程实现对一个分组16个字符的AES加密,得到密文;(5)对步骤(4)得到的密文,2 验证性必做编程利用密钥key进行解密,并验证AES加解密程序的正确性。

现代密码学代码实现

现代密码学代码实现现代密码学是一门研究如何保护信息安全的学科,它涵盖了许多不同的密码算法和协议。

在实际应用中,我们可以使用编程语言来实现这些密码算法和协议。

下面我将从几个常见的现代密码学算法和协议的实现角度来回答你的问题。

1. 对称加密算法:对称加密算法使用相同的密钥进行加密和解密。

常见的对称加密算法包括AES、DES和3DES。

在代码实现中,你需要引入相应的密码库或者模块,然后使用库中提供的函数或方法来进行加密和解密操作。

例如,在Python中,你可以使用`cryptography`库来实现AES加密算法,通过调用库中的函数来进行加密和解密操作。

2. 非对称加密算法:非对称加密算法使用一对密钥,分别是公钥和私钥。

常见的非对称加密算法包括RSA和ECC。

在代码实现中,你需要生成密钥对,并使用公钥进行加密,私钥进行解密。

同样,你需要引入相应的密码库或者模块,然后使用库中提供的函数或方法来进行加密和解密操作。

例如,在Java中,你可以使用`java.security`包来实现RSA算法,通过调用包中的类和方法来进行加密和解密操作。

3. 哈希函数:哈希函数是一种将任意长度的输入映射为固定长度输出的函数。

常见的哈希函数包括MD5、SHA-1和SHA-256。

在代码实现中,你需要引入相应的密码库或者模块,然后使用库中提供的函数或方法来计算哈希值。

例如,在C++中,你可以使用`openssl`库来实现SHA-256哈希函数,通过调用库中的函数来计算哈希值。

4. 数字签名:数字签名是一种用于验证消息完整性和身份认证的技术。

常见的数字签名算法包括RSA和ECDSA。

在代码实现中,你需要生成密钥对,并使用私钥进行签名,使用公钥进行验证。

同样,你需要引入相应的密码库或者模块,然后使用库中提供的函数或方法来进行签名和验证操作。

例如,在C#中,你可以使用`System.Security.Cryptography`命名空间来实现RSA数字签名算法,通过调用命名空间中的类和方法来进行签名和验证操作。

现代密码学 蔡东升

0000实验设计报告课程名称现代密码学课题名称LFSR软件实现专业网络工程班级1202学号201203120234姓名蔡东升指导教师冯剑2014年11 月1日一.实验目的实现简单的线性反馈移位寄存器(LFSR)二.实验内容实验时间2学时,用C\C++语言实现LFSR,并上机调试和运行。

设GF(2)上的4级LFSR的反馈函数为f(a1,a2,a3,a4)=a1⊕a2,试以软件方式实现该移位寄存器。

记录输入输出数据,观察输入状态为(a1a2a3a4)=(0100)、(a1a2a3a4)=(1000)的输出序列和周期。

三.实验要求(1)写出源程序,并编译运行(2)详细记录程序调试及运行结果(3)写出算法流程图,程序计算结果四.软件流程图五.实验结果与分析实现LFSR的C代码初始状态为(0 1 0 0)时对应的输出序列(下图)可以看出周期为15初始状态为(1 0 0 0)时对应的输出序列(下图)可以看出周期为15六.实验源代码#include<stdio.h>#include<stdlib.h>#include<string.h>main(){int a,b,c,d,k,t;printf("请输入初始状态a1 a2 a3 a4");scanf("%d%d%d%d",&a,&b,&c,&d);for(k=1;k<60;k++){t=(a+b)%2;printf("%d",a);a=b;b=c;c=d;d=t;}getchar();}七.心得体会。

本次实验,其目的是用软件实现简单的线性移位寄存器LFSR,源代码并不难。

我定义了abcd四个整型数据来充当存储器通过交替赋值来实现移位的功能。

然后当我观察线性移位寄存器的输出序列时,我发现不论初始数据如何变化,它的周期总是固定的15,更改线性函数时,周期便发生了变化。

现代密码学-古典密码-实验报告

现代密码学实验报告院系:理学院班级:信安二班姓名:学号:前言密码学(Cryptology)是研究秘密通信的原理和破译秘密信息的方法的一门学科。

密码学的基本技术就是对数据进行一组可逆的数学变换,使未授权者不能理解它的真实含义。

密码学包括密码编码学(Cryptography)和密码分析学(Cryptanalyst)两个既对立又统一的主要分支学科。

研究密码变化的规律并用之于编制密码以保护信息安全的科学,称为密码编码学。

研究密码变化的规律并用之于密码以获取信息情报的科学,称为密码分析学,也叫密码破译学。

密码学在信息安全中占有非常重要的地位,能够为信息安全提供关键理论与技术。

密码学是一门古老而深奥的学问,按其发展进程,经历了古典密码和现代密码学两个阶段。

现代密码学(Modern Cryptology)通常被归类为理论数学的一个分支学科,主要以可靠的数学方法和理论为基础,为保证信息的机密性、完整性、可认证性、可控性、不可抵赖性等提供关键理论与技术。

古典密码算法实验在密码编码体制中有两种基本也是古老的编码体制一直沿用至今,它们是代替密码和置换密码,其历史悠久并且是现代密码体制的基本组成部分,在密码学中占有重要地位。

古典密码是密码学发展的一个阶段,也是近代密码学产生的渊源,一般把Shannon 在1949 年发表“保密系统的通信理论”之前的时期称为古典密码时期。

尽管古典密码大多比较简单,一般可用手工或机械方式实现,且都可用统计分析方法破译,目前已很少采用。

但是,古典密码所采用的代替技术和置换技术仍然是现代分组密码算法设计的基础,了解它们的设计原理,有助于理解、设计和分析现代密码。

一、实验目的通过编程实现经典的代替密码算法和置换密码,包括移位密码、维吉尼亚密码、周期置换密码、列置换密码,加深对代替技术的了解,为现代分组密码实验奠定基础。

二、实验原理代替(Substitution)是古典密码中基本的处理技巧,就是将明文字母由其他字母表中的字母替换的一种方法。

密码学实验报告(AES,RSA)

华北电力大学实验报告||实验名称现代密码学课程设计课程名称现代密码学||专业班级:学生姓名:学号:成绩:指导教师:实验日期:[综合实验一] AES-128加密算法实现 一、实验目的及要求(1)用C++实现;(2)具有16字节的加密演示;(3)完成4种工作模式下的文件加密与解密:ECB, CBC, CFB,OFB.二、所用仪器、设备计算机、Visual C++软件。

三. 实验原理3.1、设计综述AES 中的操作均是以字节作为基础的,用到的变量也都是以字节为基础。

State 可以用4×4的矩阵表示。

AES 算法结构对加密和解密的操作,算法由轮密钥开始,并用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表2所示)。

AES 算法的主循环State 矩阵执行1 r N 轮迭代运算,每轮都包括所有 4个阶段的代换,分别是在规范中被称为 SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和AddRoundKey ,(由于外部输入的加密密钥K 长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加密和解密密钥。

最后执行只包括 3个阶段 (省略 MixColumns 变换)的最后一轮运算。

表2 AES 参数比特。

3.2、字节代替(SubBytes )AES 定义了一个S 盒,State 中每个字节按照如下方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,然后取出S 盒中对应行和列的元素作为输出。

例如,十六进制数{84}。

对应S 盒的行是8列是4,S 盒中该位置对应的值是{5F}。

S 盒是一个由16x16字节组成的矩阵,包含了8位值所能表达的256种可能的变换。

S 盒按照以下方式构造:(1) 逐行按照升序排列的字节值初始化S 盒。

第一行是{00},{01},{02},…,{OF};第二行是{10},{l1},…,{1F}等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

****大学
学生实验报告
实验课程名称现代密码学
学院** 年级** 专业班*********
学生姓名******* 学号********
开课时间200- 至200- 学年第二学期
(2)仿射变换加/解密程序对一段较长的英文文章进行加密
下面是文本内容:
实验项目
名称
实验二、流密码(认识LFSR及流
密码)
成绩
一、实验目的
通过实现简单的线性反馈移位寄存器(LFSR),理解LFSR的工作原理、本原多项式重要意义。

二、实验内容
1)利用C\C++语言实现LFSR(其中LFSR已给定);2)通过不同初始状态生成相应的序列,并观察他们的周期有什么特点;3)利用生成的序列对文本进行加/解密(按对应位作模2加运算)。

其中的LFSR为:
三、实验步骤
#include<iostream>
#include<vector>
#include<cmath>
#include<fstream>
using namespace std;
void main()
{
///下面是密钥的产生/////////////
int a[31]={1,1,0,0,1};
for(int k=5;k<31;++k)
a[k]=(a[k-2]+a[k-5])%2;
cout<<"密钥如下:"<<endl;
for(int jj=0;jj<31;++jj)
cout<<a[jj]<<' ';
else
i=i+8;
s.push_back((int(c))^sum);
}
for(int kk=0;kk<s.size();++kk) {
out<<char(s[kk]);
}
}
////////////
}
else
cout<<"操作无效!"<<endl;
}
四、实验结果及分析
在“in.txt”中输入如下内容:
实验结果如下:
得到密文“out.txt”如下:
for(int j=0;cypher[j]!='\0';j++)
{
cyph[j]=cypher[j]^b[j];
cout<<cyph[j];
}
cout<<endl;
for(int k=0;k<j;k++)
{
cypher[k]=cyph[k]^b[k];
cout<<cypher[k];
}
cout<<endl;
}
int main(int argc, char* argv[])
{
unsigned char buf[10],buf1[10],buf2[10],b[100],c[100];
// 函数f 初始状态152
lfsr_output_byte(5,(unsigned char)144,(unsigned char)152, buf, 10);
lfsr_output_byte(5,(unsigned char)44,(unsigned char)152, buf1, 10);
lfsr_output_byte(5,(unsigned char)24,(unsigned char)152, buf2, 10);
Geffe(buf,buf1,buf2,b);
c[0]=0;
JK(buf,buf1,c);
cout<<endl;
cout<<"Geffe operate:"<<endl;
cypt(b);
cout<<endl;
cout<<"J-K operate:"<<endl;
cypt(c);
return 0;
}
四、实验结果及分析
if(pDest == NULL)
{
break;
}
else
{
int iPos = (int)(pDest - szLast7Chars + 1);
if(iPos != 7 - i)
{
break;
}
else
{
szLast7Chars[6-i]='\0';
continue;
}
}
}
memcpy(szFPlaintextAnyLength + strlen(szFPlaintextAnyLength) - 7,szLast7Chars,7); }
#include <stdio.h>
#include "yxyDES.h"
int main()
{
yxyDES* my_des = new yxyDES();
char temp[32] = {0};
my_des->InitializeKey("12345678");
printf("key is : 12345678 \n");
my_des->EncryptAnyLength("yxyDES_test");
printf("set plaintext : yxyDES_test \n");
printf("after encrypt : %s \n",my_des->GetCiphertextAnyLength());
printf("now,decrypting...\n");
string test_ciphertext = my_des->GetCiphertextAnyLength();
my_des->DecryptAnyLength(test_ciphertext);
printf("after decrypt : %s \n",my_des->GetPlaintextAnyLength());
return 0;
}
四、实验结果及分析
a[i]=quickindex1(c[i],e,n);
cout<<a[i]<<" ";
}
cout<<endl<<"解密:";
//解密过程
for(int j=0;a[j]!='\0';j++)
{
b[j]=quickindex1(a[j],d,n);
cout<<b[j]<<" ";
}
cout<<endl;
}
四、实验结果及分析。

相关文档
最新文档