希尔密码.docx

上传人:b****2 文档编号:18571908 上传时间:2023-08-19 格式:DOCX 页数:45 大小:43.50KB
下载 相关 举报
希尔密码.docx_第1页
第1页 / 共45页
希尔密码.docx_第2页
第2页 / 共45页
希尔密码.docx_第3页
第3页 / 共45页
希尔密码.docx_第4页
第4页 / 共45页
希尔密码.docx_第5页
第5页 / 共45页
希尔密码.docx_第6页
第6页 / 共45页
希尔密码.docx_第7页
第7页 / 共45页
希尔密码.docx_第8页
第8页 / 共45页
希尔密码.docx_第9页
第9页 / 共45页
希尔密码.docx_第10页
第10页 / 共45页
希尔密码.docx_第11页
第11页 / 共45页
希尔密码.docx_第12页
第12页 / 共45页
希尔密码.docx_第13页
第13页 / 共45页
希尔密码.docx_第14页
第14页 / 共45页
希尔密码.docx_第15页
第15页 / 共45页
希尔密码.docx_第16页
第16页 / 共45页
希尔密码.docx_第17页
第17页 / 共45页
希尔密码.docx_第18页
第18页 / 共45页
希尔密码.docx_第19页
第19页 / 共45页
希尔密码.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

希尔密码.docx

《希尔密码.docx》由会员分享,可在线阅读,更多相关《希尔密码.docx(45页珍藏版)》请在冰点文库上搜索。

希尔密码.docx

希尔密码

希尔密码(HillCipher)简介:

希尔密码是基于矩阵的线性变换,希尔密码相对于前面介绍的移位密码以及放射密码而言,其最大的好处就是隐藏了字符的频率信息,使得传统的通过字频来破译密文的方法失效.

安全性:

希尔密码不是足够安全的,如今已被证实,关于希尔密码的破解不在本文范围内,有兴趣的朋友可以研读相关书籍以了解相关破译方法.

希尔密码所需要掌握的前置知识:

1)线性代数基础知识.

2)初等数论基础知识.

坦白来说,大部分密码学都要用到线性代数以及初等数论中的知识,所以我希望大家可以自行找来相关书籍完成基础知识的学习,所以关于什么是矩阵,什么是单位矩阵我不打算细讲.在希尔密码中,具体的话,会涉及到矩阵的运算,及其初等变化等.

约定:

1)希尔密码常使用Z26字母表,在此贴中,我们也以Z26最为字母表进行讲解.在附带源码中有两种字母表选择.

2)大家都知道最小的质数是2,1既不是质数也不是合数.在此我们定义1对任何质数的模逆为其本身.

因为对于任意质数n,有:

1*1%n=1的.也应该是很好理解的.

相关概念:

线性代数中的逆矩阵:

在线性代数中,大家都知道,对于一个n阶矩阵M,如果存在一个n阶矩阵N,使得M*N=E(其中:

E为n阶单位矩阵),则称矩阵N为矩阵M的逆矩阵,并记为M^-1.

比如2阶矩阵M=[3,6],则很容易得知其逆矩阵:

[2,7]

M^-1=[7/9,-2/3]

[-2/9,1/3].

关于这个逆矩阵是如何计算出的,通常的有两种方法:

一是使用伴随矩阵,通过计算行列式得到.所用公式为:

M^-1=M^*/D.(其中M^*为M的伴随矩阵,D为M的行列式的值)

二是通过增广矩阵,在M右侧附加一个n阶单位矩阵,再通过初等变换将增广矩阵的左侧变换为一个n阶单位矩阵,这时右侧便是所求的逆矩阵.

希尔密码原理:

加密者在对明文加密前会选择一个加密秘匙,这个秘匙最终会以一个m矩阵的形式参与到加密算法中的.在加密者选定了加密秘匙后,m便得到了确定,

这时,加密者将明文按m个字母一组的形式分成多组,最后一组不足m个字母的按特定的方式补齐.这样就形成了很多组由m个字母组成的单个向量,然后

对每一个m阶向量,我们用它去乘以确定好了的秘匙.

如下为其中的一个分组A向量加密后变为B向量的过程:

[A1,A2,A3...Am]*M=[B1,B2,B3...Bm].

我们将所有相乘后的向量连在一起,便得到了密文.这便是希尔密码的加密.

加密是非常简单的,我们接下来来看一下解密部分,解密部分要比加密部分稍微复杂一点点.

上面我们提到了矩阵的逆矩阵.大家可能会想,既然明文A向量乘以秘匙M矩阵就得到了密文B向量,那么我们将B向量乘以M的逆矩阵,不就可以得到A了吗?

大家的想法不错,但是请注意:

我们上面的那个例子矩阵[3,6]的逆矩阵为[7/9,-2/3],发现了吧,我们如果硬是去按常规方法计算M的逆矩阵的话,你得到的

[2,7][-2/9,1/3]

很可能是一个含有分式的矩阵.这显然是不符合要求的.(为什么?

__asm

{

cmpyou,"想知道为什么"

jnz@F

]

有的人会说,就算有分式又怎么样?

虽然分式在计算机中以浮点数体现,但我还是让B乘以这个浮点数表示的M^1,然后对结果进行

四舍五入,不久OK了?

不错这样是可以达到效果.但是!

有以下几个缺点:

1):

平白无辜的扯到了浮点运算,还要进行四舍五入,降低了算法效率使其看起来相当愚蠢.

2):

解密秘匙体现的局限性,其实是这个意思:

假如现在为二战时期,我们需要派一位特工在盟军的两个司令部之间传达密钥.而且

规定密钥只能以A~Z这26个字母的形式体现.也即你的秘匙只能是字母构成的,接受方得到秘匙后按照Z26表对应将A当作0,B当作1,

...Z当作25来翻译,然后解密.这种情况下,上面的分式就不好表示了.当然在真实情况下,密钥是怎么个传输法,那还要区别对待.

于是,我们想对于一个矩阵能否有另外一种的逆使得其各元素皆为Z26范围中的元素同时可以顺利地完成解密了?

当然有.

方法一:

最小公倍数法

这种方法是在前面的矩阵逆的基础上来做文章的.如下.

我们接着上面那个带分式的M^-1来说,大家观察一下,很容易知道,其中的分母9其实为原矩阵M的行列式值:

9=3*7-2*6;

那我们将M^-1乘以9,不就可以消掉分母了吗?

呵呵.不行的.

我们要想消掉分母,肯定得乘以一个数,那到底要乘以多少了.这里因为我们是Z26的字母表.我们要保证乘以一个数之后,原来的明文字母所增大的部分一定得是26的整数倍.也即如下

第一步:

设a为明文中的一个字母.x为需要对当前的M^-1乘以的倍数.t为任意整数.

ax=a+26t.恒成立.==>>t=a(x-1)/26.

要想t为整数,则x=26p+1.p>=1.这里我们一般取p=1即可.因此x=27.(及字母表个数加一)

第二步:

要消掉分母,我们必须乘以分母D(M)的倍数.其中D(M)为M的行列式值.

得结果:

所求x=最小公倍数(27,D(M)).

具体到上例中,x=最小公倍数(27,9)=27.

我们将上面的M^-1乘以27得到:

[21,-18]

[-6,9]

到了这一步,我们得到了含负数的希尔逆矩阵.(注意:

从这里开始我们区别对待两种逆矩阵).

而负数还是不能用Z26中的字母表示,怎么办?

没关系,对于负数我们加上26即可.因为我们加上的是26,

所以对于最终的取模是没有影响的.因此我们得到:

希尔逆矩阵M^-1=[21,8]

[20,9]

方法二:

纯整数初等变化法(这个名字和上面那个最小公倍数法都是我自己想出来的名字,可能不好听.呵呵.)

这一种方法的思想就是元素的模逆.因为我们这里是Z26,我们不关心元素的实际大小,只关心它对26取模后的数值.

因此,在对原矩阵M求逆时,我们先将M变为增广矩阵A,再对A的每一列进行循环,在第j列中,从第j行开始,每个元素

遍历,依次检查是否对26存在模逆.否的话,检查下一个,是的话,乘以其模逆,于是该元素结果得1,再得到其行数为i,

将此行与第j行互换(目的就是为了形成对角线的n个1),然后对余下的行,用此行乘以余下行的第j个元素的值去依次减余下的行,

这样就使得当前第j列的n-1个0得以生成.如果某列一直检查下去都没有元素存在模逆的话,则该矩阵M不存在希尔逆矩阵.

文字有时还是不如代码好说话,看代码吧:

(这次的希尔密码辅助软件,我使用的是C#.我嫌用C弄一些框框太麻烦,所以选择了简单的C#,弄一些框框是为了看中间过程.

同时,也能布置大家一个作业:

即读懂附件中的C#代码,用C或C++重写之.呵呵,我想未装.NETFramework的非Vista朋友

如果为了使用附件中的bin的话,还是得自己用其他语言重写一边的吧

//检查元素a是否对n存在模逆

代码:

publicboolCheckReverse(inta)

{

intn=(int)zt;

intp=2;

while(p*p

{

if(a%p==n%p&&0==a%p)

{

returnfalse;

}

p++;

}

//whenaequalswith1,it'salsoreversiable

returntrue;

}

//得到元素a对n的模逆

代码:

publicintGetReverse(inta)

{

intn=(int)zt;

intq,p,t;

intx=0,y=1,z;

q=n;

p=a;

z=(int)q/p;

while(1!

=p&&1!

=q)

{

t=p;

p=q%p;

q=t;

t=y;

y=x-y*z;

x=t;

z=(int)q/p;

}

y=y%n;

if(y<0)

{

y+=n;

}

//whenaequalswith1,itreturn1.

returny;

}

//使用纯整数初等变换法计算M的希尔逆矩阵.

代码:

publicboolCalc_M_1()

{

int[,]A=newint[nRank,nRank*2];

int[]T=newint[nRank*2];

inti,j,k;

//constructthe[M|E]matrixA

for(i=0;i

{

for(j=0;j

{

if(j

{

A[i,j]=nMatrix[i,j];

}

else

{

if(nRank==j-i)

{

A[i,j]=1;

}

else

{

A[i,j]=0;

}

}

}

}

//begintometamorphoseA

inta_1=0;

for(j=0;j

{

//step1:

getonereversiableelement

for(i=j;i

{

if(CheckReverse(A[i,j]))

{

a_1=GetReverse(A[i,j]);

for(k=0;k

{

A[i,k]*=a_1;

A[i,k]%=(int)zt;

T[k]=A[i,k];

A[i,k]=A[j,k];

A[j,k]=T[k];

}

gotostep2;

}

if(nRank-1==i)//lastelementofthecolumn,stillnooneisreversiable

{

returnfalse;

}

}

step2:

//createthen-1zerosofthecolumn

for(i=0;i

{

if(i!

=j)

{

intt=A[i,j];//firstelementofRowi.

for(k=0;k

{

A[i,k]-=t*A[j,k];

A[i,k]%=(int)zt;

if(A[i,k]<0)

{

A[i,k]+=(int)zt;

}

}

}

}

}

//constructM_1

for(i=0;i

{

for(j=0;j

{

nDeMatrix[i,j]=A[i,j+nRank];

}

}

returntrue;

}

效果图:

我们来截几张图看看:

n阶希尔逆矩阵的计算:

加密测试:

(注意明文中的3个O分别变为了O,S,A.很好地隐藏了字频信息.)

教你如何用WORD文档(2012-06-27192246)转载▼

标签:

杂谈

1.问:

WORD里边怎样设置每页不同的页眉?

如何使不同的章节显示的页眉不同?

答:

分节,每节可以设置不同的页眉。

文件――页面设置――版式――页眉和页脚――首页不同。

2.问:

请问word中怎样让每一章用不同的页眉?

怎么我现在只能用一个页眉,一改就全部改了?

答:

在插入分隔符里,选插入分节符,可以选连续的那个,然后下一页改页眉前,按一下“同前”钮,再做的改动就不影响前面的了。

简言之,分节符使得它们独立了。

这个工具栏上的“同前”按钮就显示在工具栏上,不过是图标的形式,把光标移到上面就显示出”同前“两个字来。

3.问:

如何合并两个WORD文档,不同的页眉需要先写两个文件,然后合并,如何做?

答:

页眉设置中,选择奇偶页不同与前不同等选项。

4.问:

WORD编辑页眉设置,如何实现奇偶页不同比如:

单页浙江大学学位论文,这一个容易设;双页:

(每章标题),这一个有什么技巧啊?

答:

插入节分隔符,与前节设置相同去掉,再设置奇偶页不同。

5.问:

怎样使WORD文档只有第一页没有页眉,页脚?

答:

页面设置-页眉和页脚,选首页不同,然后选中首页页眉中的小箭头,格式-边框和底纹,选择无,这个只要在“视图”――“页眉页脚”,其中的页面设置里,不要整个文档,就可以看到一个“同前”的标志,不选,前后的设置情况就不同了。

6.问:

如何从第三页起设置页眉?

答:

在第二页末插入分节符,在第三页的页眉格式中去掉同前节,如果第一、二页还有页眉,把它设置成正文就可以了

●在新建文档中,菜单―视图―页脚―插入页码―页码格式―起始页码为0,确定;●菜单―文件―页面设置―版式―首页不同,确定;●将光标放到第一页末,菜单―文件―页面设置―版式―首页不同―应用于插入点之后,确定。

第2步与第三步差别在于第2步应用于整篇文档,第3步应用于插入点之后。

这样,做两次首页不同以后,页码从第三页开始从1编号,完成。

7.问:

WORD页眉自动出现一根直线,请问怎么处理?

答:

格式从“页眉”改为“清除格式”,就在“格式”快捷工具栏最左边;选中页眉文字和箭头,格式-边框和底纹-设置选无。

8.问:

页眉一般是---------,上面写上题目或者其它,想做的是把这根线变为双线,WORD中修改页眉的那根线怎么改成双线的

答:

按以下步骤操作去做:

●选中页眉的文字,包括最后面的箭头●格式-边框和底纹●选线性为双线的●在预览里,点击左下小方块,预览的图形会出现双线●确定▲上面和下面自己可以设置,点击在预览周围的四个小方块,页眉线就可以在不同的位置。

9.问:

Word中的脚注如何删除?

把正文相应的符号删除,内容可以删除,但最后那个格式还在,应该怎么办?

答:

步骤如下:

1、切换到普通视图,菜单中“视图”――“脚注”,这时最下方出现了尾注的编辑栏。

2、在尾注的下拉菜单中选择“尾注分隔符”,这时那条短横线出现了,选中它,删除。

3、再在下拉菜单中选择“尾注延续分隔符”,这是那条长横线出现了,选中它,删除。

4、切换回到页面视图。

尾注和脚注应该都是一样的。

10.问:

Word里面有没有自动断词得功能常常有得单词太长了,如果能设置下自动断词就好了

答:

在工具―语言―断字―自动断字,勾上,word还是很强大的。

11.问:

如何将word文档里的繁体字改为简化字?

答:

工具―语言―中文简繁转换。

12.问:

怎样微调WORD表格线?

WORD表格上下竖线不能对齐,用鼠标拖动其中一条线,可是一拖就跑老远,想微调表格竖线让上下对齐,请问该怎么办?

答:

选定上下两个单元格,然后指定其宽度就可以对齐了,再怎么拉都行pressAlt,打开绘图,其中有个调整坐标线,单击,将其中水平间距与垂直间距都调到最小值即可。

打开绘图,然后在左下脚的绘图网格里设置,把水平和垂直间距设置得最小。

13.问:

怎样微调word表格线?

我的word表格上下竖线不能对齐,用鼠标拖动其中一条线,可是一拖就跑老远,我想微调表格竖线让上下对齐,请问该怎么办?

答:

可以如下操作:

●按住ctl键还是shift,你haveatry●doubleclicktheline,tryit)●打开绘图,设置一下网格(在左下角)。

使水平和垂直都为最小,试一把!

●pressAlt

14.问:

怎么把word文档里已经有的分页符去掉?

答:

先在工具――选项――视图――格式标记,选中全部,然后就能够看到分页符,delete就ok了。

15.问:

Word中下标的大小可以改的吗

答:

格式―字体

16.问:

Word里怎么自动生成目录啊

答:

用“格式样式和格式”编辑文章中的小标题,然后插入-索引和目录

17.问:

Word的文档结构图能否整个复制论文要写目录了,不想再照着文档结构图输入一遍,有办法复制粘贴过来吗?

答:

可以自动生成的,插入索引目录。

18.问:

做目录的时候有什么办法时右边的页码对齐?

比如:

1.1标题..........11.2标题...............2

答:

画表格,然后把页码都放到一个格子里靠右或居中,然后让表格的线条消隐就可以了,打印出来就很整齐。

19.问:

怎样在word中将所有大写字母转为小写?

比如一句全大写的转为全小写的答:

格式-更改大小写-小写

20.问:

在存盘的时候,出现了问题,症状如下:

磁盘已满或打开文件过多,不能保存,另开新窗口重存也不管用。

如何解决?

答:

把word文档全选,然后复制,然后关掉word,电脑提示你粘贴板上有东西,要不要用于别的程序,选是,然后,再重

新打开word,然后粘贴,然后,保存。

21.问:

WORD中的表格一复制粘贴到PPT中就散掉了,怎么把WORD里面的表格原样粘贴到PPT中?

答:

1)比较好的方法是:

先把表格单独存为一WORD文件,然后插入--对象,选由文件创建,然后选中上面的WORD文件,确定;2)还可以先把表格copy到excel中,然后copy到PPT中,这个也是比较好的办法;3)可以先做成文本框,再粘贴过去;4)复制粘贴,但是在PPT中不能粘在文本框里面;5)拷屏,做成图片,再弄到PPT里面。

22.问:

有没有办法将PPT的文字拷入WORD里面?

答:

另存就可以了。

只要以.rtf格式另存即可

23.问:

word中图片的分栏如何处理?

假如有:

12图34这样的结构,我想实现:

13图(要横跨两栏)24但是,试了半天总是:

12图34怎么办呀?

help!

答:

设置图片格式――版式――高级――文字环绕――环绕方式选上下型――图片位置――对齐方式选居中――度量依据选页面,要先改文字环绕,然后才能改图片位置

24.问:

用word写东西时字距老是变动,有时候自动隔得很开,有时候进入下一行的时侯,上一行的字距又自动变大了,这是为什么?

怎么纠正啊?

答:

是因为自动对齐的功能,格式――段落――对齐方式可以选。

还有允许断字的功能如果check上,就不会出现你说的情况了。

25.问:

在使用WORD的样式之后,如标题1、标题2之类的,在这些样式前面总会出现一个黑黑的方块,虽然打印的时候看不到,但看着总是不舒服,有没有办法让它不要显示呢?

答:

“视图”--“显示段落标志”,把前面的勾去掉。

其实这个很有用,可以便于知道哪个是标题段落

26.问:

文章第一页下面要写作者联系方式等。

通常格式是一条短划线,下面是联系方式,基金支持等。

这样的格式怎么做出来?

就是注明页脚吗?

答:

插入――脚注和尾注

27.问:

文字双栏,而有一张图片特别大,想通栏显示,应该怎么操作?

答:

可以选择的内容,按双栏排。

选择其他内容,按单栏排。

28.问:

Word里面如何不显示回车换行符?

答:

把视图-显示段落标记的勾去掉或工具-选项-视图-段落标记

29.问:

有没有方法把WORD里的软回车一下子替换掉?

识别出来的文字全带着软回车,能把他们一次全删掉吗?

答:

查找+替换,按CTRL+H;软回车好象是^l,在特殊字符里有

30.问:

在WORD里的框框里怎么打勾?

答:

画个文本框,文本框里写一个钩,然后拖过去;或者先在WORD里插入符号“√”,然后选中“√”,到-》格式-》中文版式-》带圈字符-》选“□”

31.问:

还是不行,这样拷过去的框框字体是windings的,而原来的是宋体的,两者有很大的区别。

答:

根据模板新建专业型,里面有框,双击后打勾,copy就ok

32.问:

Word中怎么在一个英文字母上打对号?

答:

透明方式插入图片对象,内容是一个√

33.问:

WORD里怎么显示修订文档的状态?

文档修订后,改后标记很多,但是在菜单里没有“显示修订最终状态”等,怎么调出来?

答:

工具-自定义-命令-类别(工具)-命令(修订)-把“修订”等拖到工具栏上

34.问:

怎样把许多分开的word文档合并成一个文档。

我的论文是按照章节分开写的,但现在图书馆要提交电子版的学位论文,是一个文档的,我找了很多选项但好象不能合并,选择插入文件功能,可以加入内容,但文档中的页眉却插不进去,有谁有高见?

答:

acrobat6可以直接把多个文档打印成一个pdf文档。

可以提交pdf格式的论文,先一个一个word文档转换为pdf格式的,然后在pdf文档菜单的文件菜单中,选上作为pdf格式打开,追加上就可。

35.问:

Word里面要写方程式怎么办啊?

答:

插入-对象-公式编辑器equation,如果没有公式编辑器Equation,要自己从光盘中安装,或者安装Mathtype公式编辑器按右键把它拖出来--插入--命令--自定义--工具应该是倒过来

36.问:

想在WORD里面表示矩阵,怎样才能画出那个很大的矩阵括号?

答:

装公式编辑器mathtype好了~:

37.问:

Word的公式编辑器怎么安装?

答:

工具-自定义-插入-公式编辑器,把它拖到工具条上即可;或者安装OFFICE后,再次安装,选增加功能吧,会有提示的

38.问:

Word2000下调用公式编辑器的快捷键

答:

点击菜单[工具]-[自定义],点击对话框下方[键盘],在[类别]里选择[插入],在命令里选择[InsertEquatio

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2