维吉尼亚密码解密c语言(维吉尼亚密码C语言)

2023-02-12 19:48:20 摩斯密码知识 思思

解密使用维吉尼亚密码加密得到的密文FFFLBCVFX,其中密钥K=ZORRO

明文:是看的懂的语言文字

密文:是看不懂的语言文字

密钥:是把看的懂的语言文字转换成看不懂的语言文字

明文:BOSE

密钥:YZ

密文:ZNQD

维吉尼亚密码

      维吉尼亚密码是以法国外交官、密码学家布莱斯·德·维吉尼亚的名字命名的,不过不是他本人发明的。

【加密原理】

      维吉尼亚密码是在凯撒密码的基础上产生的一种加密方法,它将凯撒密码的全部25种位移排序为一张表,与原字母序列共同组成26行26列的密码表。

      除了密码表,还必须有一个密钥。密钥由字母组成,最少一个字母,最多可与明文字母数相等。如果密钥只有1个字母,相当于就是凯撒密码。举个例子:

明文:I Love You

密钥:OK

      首先,密钥长度需要与明文长度相同,如果少于明文长度,则重复拼接直到长度相等。本例中,明文长度为8个字母(非字母忽略),密钥补全为“OKOKOKOK”。

      然后根据密码表进行加密。明文第一个字母是“I”,密钥第一个字母是“O”,在表格中找到“I”列与“O”行的相交点,字母“W”就是密文的第一个字母。同理,“L”列与“K”行交点字母是“V”。“O”列与“O”行交点字母是“C”……以此类推,得到密文: W VCFS ICE。

【解密原理】

密文:PWZRNZBZ EA NQKBUHN LNB

密钥:wind

      首先把密钥重复拼接到和密文长度相同,上例中密文为20位字母,密钥拼接后为:windwindwindwindwind。

      密文P对应密钥W,在密码表中找出W行为P的列,沿着这一列向上找到最上面的字母是T。以此类推,得到明文:tomorrow is another day。

第三代加密法--维吉尼亚加密法

        加密法的需求在军事上及政治上的显现极为旺盛,也迫使它快速地向前发展。传统的移位及替代法虽然使用方便,但可以采用统计的方式进行破解,安全性还有待加强。

        所以后期就发展出一种新的加密方法,即维吉尼亚加密法。这种方法的出发点是,对于相同的字母或数字,加密后的密文可能不同,这就没法从统计的角度解密。

        基本的加密方法,可以参考下图。

        这张图中, 第一行代表原文的数字或字符,每一列代表加密采用第几套替代方案,每一横行的字符对应该列的字母加密后的密文 。是不是够复杂哈,如果采用这样的方式手工加密解密,写一封邮件估计要崩溃死了。。。。

        而且这套加密方法使用中还存在一些问题,就是需要把 整个加密图传给解密方 ,没有该图做指导,解密的人也是一脸懵逼。。。。

        但方法是死的,人是活的,人最可贵的一点就是遇到问题会想各种解决方法。所以这个问题如何解呢?关键在于一个密钥(key),比如以“yes”为密钥,加密时第一个字母采用"y"(即第25套替代方案)加密,将原文字母向后移动25位;第二个字母采用“e”(即第5套方案)加密,将原文字母向后移动5位;第三个字母采用"s"(即第19套方案)加密,将原文字母向后移动19位;依次循环加密。

        比如加密“hello”,加密结果就如下,加密后的密文为“FIDJS”,两个字母“l”分别对应D和J,就没法用统计法找出破绽了。    

        但该方法加密解密超费劲,人工处理很容易出错,所以发明了200年还未被广泛使用,直到能够采用机器进行处理之后,才被人翻出来使用。

       

密码那些事儿|(十)“钥匙”打开维吉尼亚的锁

在说维吉尼亚加密法的破解方法之前,有必要来回顾一下它的加密原理。

维吉尼亚加密法是由26套密码组成的表,我们默认要用多套密码给原文加密的时候,具体操作中密文的每个字母由哪套密码来加密,是由钥匙规定的。钥匙最初都是一个正常的单词,原文很长,钥匙最初很短,为了让原文和钥匙一一对应,就反复使用钥匙。比如钥匙是boy,只有3个字母,我们可以boyboyboy这样一直循环下去,和原文中每个字母一一对应。

我们先来看一个例子,在这个例子里,原文是“the sun and the man in the moon”,钥匙是KING,用维吉尼亚加密法加密之后,密码文是一串看起来没什么规律的字母。我们把钥匙、原文和密文的内容依次记录下来。

原文的内容中,有3个定冠词the,变成密文后,the变成了两种样子,第一种是DPR,第二和第三种是BUK。第一个我们不管,关键点就在于——

第二个和第三个竟然加密成了相同的密文。

为什么会出现这种情况,这是巧合吗?

不是的。我们可以看钥匙单词KING,它由4个字母组成。我们再看密文中,后两个代表the的BUK,间隔了8个字母,间隔距离正好是钥匙长度的2倍。也就是说,正好在KING这个钥匙循环到整数倍的时候,如果也正好赶上出现了同样的原文,那巧合就出现了——原文就会被加密成相同的密文。

根据这个规律,我们就能确定钥匙的长度。

比如有这样一段密文:

DYDUXRMH TV NQD QN DYDUXRMH ARTJGW NQD

其中,两个 DYDUXRMH 的出现相隔了15个字母。因此,可以假定钥匙的长度是15的约数,即长度为15、5或3。而两个 NQD 则相距20个字母,意味着钥匙长度应为20、10、5、4或2。取两者的交集,则可以基本确定钥匙长度为5。

这一步,就是破解维吉尼亚加密法的关键一步。

接下来,我们已经知道钥匙的长度是5了,那就意味着在原文中第1、第6、第11、第16……,这些字母单独挑出来放在一组叫作A组。A组可是由维吉尼亚密码表中,同一行移位的字母加密得到的结果。我们再把第2、第7、第12、第17……,这些字母挑出来放在一起称作B组,它们又是用另一行移位字母加密得到的。

我们把这些按组别归纳起来:

A组:第1、第6、第11、第16……

B组:第2、第7、第12、第17……

C组:第3、第8、第13、第18……

D组:第4、第9、第14、第19……

F组:第5、第10、第15、第20……

这就相当于,将原来的密文分解成了五组新的密文,每一组都是由维尼尼亚加密法中的单独一行加密而成,也即单套密码加密。

单套密码加密怎么破解?我们之前介绍过的——频率分析法。

所以,我们来总结一下维吉尼亚加密法的步骤:

第一步,是从密文中找出拼写完全相同的字母串;

第二步,计算出钥匙的长度;

第三步,将密文分析成若干组(与钥匙长度对应);

第四步,分别对每组密文用频率分析法破解。

在20世纪之前,人们一直以为这套方法是普鲁士少校卡西斯基在1863年发明的,所以一直以来这套破解法叫作“卡西斯基试验法”。但是后来更多的资料公布,发现剑桥大学的英国科学家巴贝奇在9年前就已经写下了解法,这位巴贝奇也是后世认为的计算机创造者之一。

发明者受委屈,这既是密码学领域的特点,又是密码学研究者躲不过的委屈。

不论是剑桥大学的巴贝奇,还是普鲁士军官卡西斯基,虽然他们破解了维吉尼亚密码法,但他们在世的时候,始终都不知道自己其实已经在密码学上引起了一场革命。

往期文章:

密码那些事儿|(九)维吉尼亚登场

密码那些事儿|(八)玛丽女王被密码改变的人生

密码那些事儿|(七)以频率之矛,攻移位之盾

密码那些事儿|(六)中外古时候的移位加密

密码那些事儿|(五)换个位置,面目全非

密码那些事儿|(四)隐藏的消息

密码那些事儿|(三)“风语者”——从未被破解的密码

密码那些事儿|(二)密码学发展的七个阶段

密码那些事儿|(一)无所不在的密码

本人是官方授权会员推广专员,点击 会员专属通道 成为会员,您将会获得钻奖励及诸多权益!

《钻奖励调整公告》

维吉尼亚密码解密c语言(维吉尼亚密码C语言) 第1张

关于维吉尼亚密码的。这个问题

你所说的“这个维吉尼亚密码”指的是哪个维吉尼亚密码?

好吧,我知道了,是百度百科的(答你这题还得有点联想能力……)

“TO BE OR NOT TO BE THAT IS THE QUESTION

当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R”

额,上面不是说了吗用"RELATIONS"作为密钥那么明文第一个字母T对应的密钥就是R。你要想问"RELATIONS"这个密钥砸来的?我告诉你,想来的,这个密钥你想用啥单词就用啥单词,越生僻的单词越好,选完密钥后加密,但密钥长度不够,那么就重复使用,如下:

密钥:RELAT IONSR ELATI ONSRE LATIO NSREL

明文:TOBEO RNOTT OBETH ATIST HEQUE STION

密文:KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY

给你个维吉尼亚密码加密解密用的程序,使用后就能更好理解:

(别告诉我这是个只上一次的小号……我的采纳率被这种号害惨了……)

设密钥字是LOVE,使用维吉尼亚密码加密明文串是JACKOZOO,求密文。

维吉尼亚(Vigenère)密码是一种周期多表代换密码, 由1858年法国密码学家维吉尼亚提出

维吉尼亚密码常常使用英文单词作为密钥字,密钥则是密钥字的重复

维吉尼亚密码加密过程简述如下:

--写下明文,表示为数字形式;

--在明文之上重复写下密钥字,也表示为数字形式;

--加密相对应的明文:给定一个密钥字母k和一个明文字母m,那么密文字母则是(m+k)mod 26计算结果所对应的字母

在明文下面重复写密钥字,组成密钥。

明文M: JACKOZOO

密钥K: LOVELOVE

将明文和密钥转化为数字

明文M=(9,0,2,10,14,25,14,14)

密钥K=(11,14,21,4,11,14,21,4)

对每个明文数字和对应的密钥数字,使用ci=(mi+ki )mod 26加密

得到密文数字为

C=(20,14,23,14,25,13,9,18)

于是密文为:

UOXOZNJS