- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验一:希尔密码
实验一:希尔密码(Hill Cipher)的实现
姓名
韦能龙
班级
2011
学号实验目的
通过实验,使学生对古典密码学有充分的认识;学会正确使用编程语言(C、Mathematica、Maple等)实现希尔密码,验证课堂中所学的古典密码算法;为学习现代密码算法及其应用奠定基础。
实验内容及要求
1、学生自己随机选取一个55矩阵,判断是否可以作为密钥
2、利用所选密钥,对给定的5元明文信息进行加解密
3、对加密得到的密文进行解密,验证结果的正确性
实验结果(可续页)(包括实验代码、实验结果)
1、
如下是我的程序运行时的界面:
我的程序设定的是让电脑随机生成1到100的整数,随机生成的矩阵不一定能成为秘钥,因为能成为加密秘钥的充分必要条件是gcd(det K,26)=1,如图:
尝试成功后决定用下面矩阵为秘钥矩阵:
我写的程序能提供加密解密功能,并且还可以更改秘钥,如下图:
输入1 加密,输入2解密,如下图:
由上图可知,明文和密文经加密和解密后前后相同,说明程序运行正确。
2、实验代码如下:
#includeiostream
#includestring
#includectime
#includecstdlib
using namespace std;
const int M=5;
//这个函数用来求公约数
int gcd(int a,int b)
{
if(a%b==0)return b;
return gcd(b,a%b);
}
//下面是加密或者解密函数。
string encryption_or_decryption(int a1,int a2 ,string s1,int a[M][M])
{
string s2;
int Plaintext[M];//明文数组
int ciphertext[M]={0};//密文数组
for(int i=0;iM;i++)
{
Plaintext[i] = s1[i] - a1;
}
for(int i=0;iM;i++)
{
for(int j=0;jM;j++)
{
ciphertext[i]+=Plaintext[j]*a[i][j];
}
ciphertext[i]%=26;
if(ciphertext[i]0)ciphertext[i]+=26;
char dd = ciphertext[i] + a2;
s2.push_back(dd);
}
return s2;
}
//下面这个函数是用来计算行列式的。
int DET(int n ,int c [M][M])
{
if(n==2)return c[0][0]*c[1][1]-c[0][1]*c[1][0];
int i_1,j_1,d; //d为数组b的行
int b[M][M]; //用于存放余子式
int p=0,q=0;
int sum=0;
for(i_1=0;i_1n;i_1++)
{
for(d=0;dn-1;d++)
{
if(di_1) p=0;
else p=1;
for(j_1=0;j_1n-1;j_1++)
{
b[d][j_1]=c[d+p][j_1+1];
}
}
if(i_1%2==0) q=1;
else q=-1;
sum=sum+c[i_1][0]*q*DET(n-1,b);
}
return sum;
}
void show()
{
cout ***********************************************************endl;
cout ***********************************************************endl;
cout ****************** 欢迎使用加解密系统 ***************endl;
cout **************请根据提示输入秘钥、明文和密文***************endl;
cout ***********************************************************endl;
cout ***********************************************************endl;
cout按
文档评论(0)