首页
社区
课程
招聘
[原创]密码学入门系列(四) 之 维吉尼亚密码(古典)
发表于: 2009-5-23 19:32 17506

[原创]密码学入门系列(四) 之 维吉尼亚密码(古典)

2009-5-23 19:32
17506

【文章标题】: 密码学入门系列(四) 之 维吉尼亚密码(古典)
【文章作者】: jackozoo
【作者邮箱】: jackozoo@163.com
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  系列声明: 见一.
  
  维吉尼亚密码(Vige nere Cipher)简介:
  大家熟知, 早前的单一的凯撒密码保密性能是十分的差的, 因此人们在单一的凯撒密码的基础上扩展出了多表密码, 称之为维吉尼亚密码. 它是由16世纪法国亨利三世王朝的不莱塞-维吉尼亚发明的. 关于维吉尼亚的密码的历史我这里就不做多的介绍了, 有兴趣的朋友可以在互联网上搜索相关文献查看.
  维吉尼亚密码的特定是将26个凯撒密码表(也即我们常用的Z26)合成一个表.
  
  如下:
  
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
  C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
  D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
  E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
  F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
  G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
  H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
  I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
  J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
  K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
  L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
  M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
  N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
  O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
  P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
  Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
  R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
  S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
  T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
  U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
  V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
  W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
  X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
  Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
  Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
  
  
  这样我们就从传统的单表替换扩展到了多表替换了.  
  
  引入一个概念:秘匙
  
  在前面的凯撒移位密码和仿射密码中, 我们同样引入了秘匙的概念, 不过那里的秘匙只是一个或两个数字. 而在这里的秘匙是一个更为广义上的秘匙.
  它是一个串. 不在局限于一个或两个整数.
  
维吉尼亚密码的原理:
  
  比如明文为JACKOZOO, 秘匙为LOVE, 则我们的密文是这样得到的:
  
  
  J对应的密文我们查秘匙为L, 则在第L行中, 找到与第一行中的J对应的字母为 U.
  A对应的密文我们查秘匙为O, 则在第O行中, 找到与第一行中的A对应的字母为 O.
  C对应的密文我们查秘匙为V, 则在第V行中, 找到与第一行中的C对应的字母为 X.
  K对应的密文我们查秘匙为E, 则在第E行中, 找到与第一行中的K对应的字母为 O.
  O对应的密文我们查秘匙为L, 则在第L行中, 找到与第一行中的O对应的字母为 Z. (如果秘匙不够了,我们就循环使用秘匙, LOVELOVELO ... )
  Z对应的密文我们查秘匙为O, 则在第O行中, 找到与第一行中的Z对应的字母为 N.
  O对应的密文我们查秘匙为V, 则在第V行中, 找到与第一行中的O对应的字母为 J.
  O对应的密文我们查秘匙为E, 则在第E行中, 找到与第一行中的O对应的字母为 S.
  
由此得到JACKOZOO在以LOVE作为秘匙的情况下, 其密文为: UOXOZNJS.
  
  
  我们看到维吉尼亚密码也很好地隐藏了字频信息.
  但是这里不得不提的是, 维吉尼亚密码(Vigenere Cipher)相对于希尔密码(Hill Cipher)来说, 其对字频信息的隐藏还不够彻底.
  这也导致了在19世纪50年代, 英国人查尔斯-巴贝奇对其的破解. 其实其破解的基本思想如下:
  比如在密文中, 经常出现了同一个子串(比如UPK), 而且每个字串之间的距离都是3的整数倍. 那么解密者就很容易推测出秘匙的长度为3. 其原因也是十分简单的:
  当秘匙在重复了N次之后, 其还是用第一个字母去加密UPK相应的明文. 尤其是对THE, YOU, WHAT 这类高频词汇当使用了弱秘匙的话,更容易遭受破解. 关于维吉
  尼亚密码的具体破解工作, 不在本文范围之内, 有兴趣的朋友可以自行研究.
  
  
  以上介绍的是维吉尼亚密码的加密, 解密的话, 直接找出相应行在第一行中对应的字母即可.
  
  
  通过对维吉尼亚密码原理的学习, 我们不难发现用计算机语言写出维吉尼亚的算法也是很简单的一件事情.
  
  加密:
  
  


  			nMLen = strlen(szM);
  			nKLen = strlen(szK);
  
  			for (i=0;i<nMLen;i++)
  			{
  				szL[i] = ((szM[i]-'A') + (szK[i%nKLen]-'A')) % 26 + 'A';  			                
  			}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 97697
活跃值: (200819)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
Support.
2009-5-23 19:43
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
3
暂时现在这里占个位.
2009-5-23 20:27
0
雪    币: 392
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错,支持下。
2009-5-25 09:40
0
雪    币: 392
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
加密代码的改写,不用扩张密钥长度。解密代码也可类似改写。


nMLen = strlen(szM);
nKLen = strlen(szK);

for (i=0; i<nMLen; i++)
{
    szL[i] = ((szM[i]-'A') + (szK[i%nKLen]-'A')) % 26 + 'A';
}

2009-5-25 10:08
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
6
thank u.
整个系列中, 代码都是按照文章的讲解来编写的, 没怎么考虑效率和风格, 各位还请见谅.
感谢nicetom的改进.
2009-5-25 10:26
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
7
To jackozoo 大大~
關於 nicetom 大大的改良~~那個部分可以增列進去 ~ 也就是說~可以有兩個 source code ~
一個為 original version, 一個是 imrpoved version.
到時您的文檔裏要分開來。
這樣,讀者才知道是哪一個地方被 improve 了。
2009-5-25 18:08
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
8
已在帖子和附带源码中更新, 谢谢.
2009-5-26 14:25
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
对Vigenere加密法的分析,在1920年美国密码学大师William Friedman提出了一致性索引(Index of Coincidence,IC)的概念,用它可以测试多码加密法。这也是最早使用数学统计方法的分析工具之一。IC能暗示出多码加密法的密钥长度。

公式不太好打印出来,感兴趣的朋友上网去看看。
2009-6-9 00:07
0
雪    币: 303
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
简单 意懂 支持啊。
2009-6-10 22:59
0
雪    币: 193
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习中!支持!
2009-6-14 20:40
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
非常不错的入门教程
2009-6-15 12:29
0
雪    币: 1907
活跃值: (6004)
能力值: ( LV7,RANK:116 )
在线值:
发帖
回帖
粉丝
13
加解密的式子写成一样的了,嘻嘻嘻,但是附件里的是对的
2019-7-22 20:34
0
游客
登录 | 注册 方可回帖
返回
//