编写Hill密码程序Word下载.docx

上传人:b****3 文档编号:16392605 上传时间:2022-11-23 格式:DOCX 页数:9 大小:50.12KB
下载 相关 举报
编写Hill密码程序Word下载.docx_第1页
第1页 / 共9页
编写Hill密码程序Word下载.docx_第2页
第2页 / 共9页
编写Hill密码程序Word下载.docx_第3页
第3页 / 共9页
编写Hill密码程序Word下载.docx_第4页
第4页 / 共9页
编写Hill密码程序Word下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

编写Hill密码程序Word下载.docx

《编写Hill密码程序Word下载.docx》由会员分享,可在线阅读,更多相关《编写Hill密码程序Word下载.docx(9页珍藏版)》请在冰豆网上搜索。

编写Hill密码程序Word下载.docx

usingSystem.Linq;

usingSystem.Text;

namespaceHill

{

classProgram

{

publicstaticintSeekInverseNumber(inta,intb)

inti=1,InverseNumber,k=2;

int[,]SeekArray=newint[100,4];

SeekArray[0,0]=a;

SeekArray[0,1]=1;

SeekArray[0,2]=0;

SeekArray[1,0]=b;

SeekArray[1,1]=0;

SeekArray[1,2]=1;

SeekArray[1,3]=(int)(a/b);

i=2;

while(SeekArray[i,0]!

=1)

try

SeekArray[i,0]=SeekArray[i-2,0]%SeekArray[i-1,0];

}

catch(DivideByZeroExceptiondze)

Console.WriteLine(dze.StackTrace);

if(SeekArray[i,0]==0)

for(intnotexist=0;

notexist<

10;

notexist++)

Console.WriteLine("

所求的逆元不存在"

);

break;

SeekArray[i,1]=SeekArray[i-2,1]-SeekArray[i-1,1]*SeekArray[i-1,3];

SeekArray[i,2]=SeekArray[i-2,2]-SeekArray[i-1,2]*SeekArray[i-1,3];

SeekArray[i,3]=(int)(SeekArray[i-1,0]/SeekArray[i,0]);

if(SeekArray[i,0]!

i++;

k++;

if(SeekArray[k,2]>

=0)

InverseNumber=SeekArray[k,2];

else

InverseNumber=SeekArray[k,2]+a;

returnInverseNumber;

publicstaticvoidswap(inta,intb)

inttemp;

temp=a;

a=b;

b=temp;

publicstaticvoidHillCipher(int[,]EnArray,char[]EnChar)

inti=0,j=0;

intlen=EnChar.Length;

int[]EnIntArray=newint[len];

//待加密的数字串,由字符转换而来

int[,]InverseArray=newint[2,2];

//逆矩阵

InverseArray=newint[,]{{1,0},{0,1}};

int[]DoEnInt;

//加密后的数字串

DoEnInt=newint[EnChar.Length];

char[]DoEnChar;

//加密后的字符串

DoEnChar=newchar[EnChar.Length];

int[]DoDeInt;

//解密后的数字串

DoDeInt=newint[EnChar.Length];

char[]DoDeChar;

//解密后的字符串

DoDeChar=newchar[EnChar.Length];

需要加密的字符串是:

"

+newstring(EnChar));

for(i=0;

i<

len;

i++)

EnIntArray[i]=(EnChar[i]+13)%26;

////////////////////Hill加密///////////////////////////////////////////////////////////////

len-1;

i+=2)

DoEnInt[i]=(EnIntArray[i]*EnArray[0,0]+EnIntArray[i+1]*EnArray[1,0])%26;

DoEnInt[i+1]=(EnIntArray[i]*EnArray[0,1]+EnIntArray[i+1]*EnArray[1,1])%26;

if(DoEnInt[i]<

0)

DoEnInt[i]+=26;

DoEnChar[i]=Convert.ToChar(DoEnInt[i]+65);

Console.Write("

加密后的字符是:

"

Console.Write(newstring(DoEnChar));

Console.WriteLine();

if(EnArray[0,0]==0&

&

EnArray[1,0]==0)

加密矩阵错误!

elseif(EnArray[0,0]==0)

swap(EnArray[0,0],EnArray[1,0]);

swap(EnArray[0,1],EnArray[1,1]);

调整矩阵完成!

intm1=SeekInverseNumber(26,EnArray[0,0]);

2;

EnArray[0,i]=(EnArray[0,i]*m1)%26;

InverseArray[0,i]=(InverseArray[0,i]*m1)%26;

intm2=-EnArray[1,0];

EnArray[1,i]=EnArray[0,i]*m2+EnArray[1,i];

InverseArray[1,i]=InverseArray[0,i]*m2+InverseArray[1,i];

intm3=SeekInverseNumber(26,EnArray[1,1]);

EnArray[1,i]=(EnArray[1,i]*m3)%26;

InverseArray[1,i]=(InverseArray[1,i]*m3)%26;

intm4=-EnArray[0,1];

EnArray[0,i]=EnArray[1,i]*m4+EnArray[0,i];

InverseArray[0,i]=InverseArray[1,i]*m4+InverseArray[0,i];

for(j=0;

j<

j++)

if(InverseArray[i,j]<

InverseArray[i,j]+=26;

Console.Write(InverseArray[i,j]+"

解密后的字符是:

/////////////////////////////Hill解密////////////////////////////////////////////////////////

DoDeInt[i]=(DoEnInt[i]*InverseArray[0,0]+DoEnInt[i+1]*InverseArray[1,0])%26;

DoDeInt[i+1]=(DoEnInt[i]*InverseArray[0,1]+DoEnInt[i+1]*InverseArray[1,1])%26;

if(DoDeInt[i]<

DoDeInt[i]+=26;

DoDeChar[i]=Convert.ToChar(DoDeInt[i]+65);

Console.Write(newstring(DoDeChar));

staticvoidMain(string[]args)

Console.WriteLine((-162)%26);

int[,]EnArray=newint[2,2];

EnArray=newint[,]{{3,6},{2,7}};

stringstr="

;

Console.WriteLine(str);

char[]EnChar=str.ToUpper().ToCharArray();

HillCipher(EnArray,EnChar);

}

结果:

心得:

实现这个程序还是有一点困难的,个人感觉比用matlab复杂多了,也花了我不少功夫,但是确实对于Hilln密码体系有了自己的认识。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1