维吉尼亚密码是一种(维吉尼亚密码是一种什么语言)

2023-02-28 2:17:22 密码用途 思思

比较维吉尼亚密码与移位密码的区别

难易程度不同。移位密码就是对26个字母进行移位操作,可以移动任意位数,这样就实现了对明文的加密,移位操作简单易行,因此,加密解密比较简单。Vigenere密码是由法国密码学家BlaisedeVigenere于1858年提出的一种代换密码,它是多表代换密码的典型代表。

维吉尼亚密码是一种(维吉尼亚密码是一种什么语言) 第1张

看到一篇破译密码的文章,不明白文中提到的“维密”和“密匙”是什么。。

“维密”和“密匙” 都是密码学里的术语

“维密” 全称为:维吉尼亚密码

“密匙”解释起来比较复杂,,,密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的数据。。

详细内容可参考 百度百科里有关 维吉尼亚密码的介绍

使用维吉尼亚密码时,就要用到 密钥。。。知道密文后,还需要知道密钥,才能对照密码表去破解。。。

一般来说,写密码的人会把密钥告诉你

但也有不给出密钥的,,,这时候你就得自己去找出密钥,,,难度大大增加了,,,有n多种组合,,,要一一尝试,逐一排除

去看几个例子吧,不懂的话我再补充。。。。

古典密码包括两大类

1.古典密码编码方法归根结底主要有两种,即替换密码和置换密码。

(1)一种是将明文字符替换成一些其他的字符,形成密文,称“替换密码”。其本质:不变的是字符的位置,变化的是字符。

(2)一种是将原有的明文字符的顺序打乱,形成密文,称“(位)置(变)换密码”。其本质:不变的是字符本身,变化的是位置。

2.替换密码:

(1)凯撒密码

基本思路:将明文中的字符移动一定的位数(k)来实现加密和解密,也就是明文中的所有字符都在字符表上进行k偏移,形成密文。

(2) 乘法密码:

基本思路:使用采样的方式进行加密,将明文字符串的每个字符,每隔k位算出字符并排列起来形成密文。

(3)仿射密码:

基本思路:明文中所有字符按照(ax + b)mod 26进行计算,得到密文。

(4)维吉尼亚密码:

基本思路:使用字符串作为密钥,并把密钥与明文进行对应,依次重复密钥,直至与明文的长度相同。

3.置换密码:

(1)栅栏密码

基本思路:先将明文中的字符分成N个一组,再将每组的第1个字符组合,每组的第2个字符组合,依次类推,直到第N个字符组合,最后再将所有字符全部连接起来,形成密文。这里N称为栏。

维吉尼亚密码

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

【加密原理】

      维吉尼亚密码是在凯撒密码的基础上产生的一种加密方法,它将凯撒密码的全部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。

维吉尼亚密码(Vigenere)(一)

维吉尼亚密码的原理与凯撒密码类似,其实是凯撒的一种强化和变形,通过使加密相同明文的秘钥不同,来掩盖字符的频率。

但也不是找不到字符频率,我们可以发现,将用"h"字符加密的明文取出之后,就变成了普通的凯撒加密,这是可以通过字符频率分析来破解的。

用到的数学公式:重合指数

1.破解秘钥长度N。

2.将密文分成N组,逐个破解秘钥。

其中fi为每个字符在英文当中的频率。fi^2则表示连续取出两个相连的字符,它们相同的概率。英文中对26种情况求和的统计结果约为0.065。

Ni/N为密文中某个字符占密文的比例,假设秘钥长度为key_len,如果key_len组密文中的重合指数IC1也都与0.065接近,那么就可以推测key_len是秘钥长度了。

当秘钥长度key_len知道以后,我们将密文分成key_len个组,计算每个分组的IC2。

举个栗子:如果第一个分组都是用b字符进行加密,那么a字符的频率会转移到b字符上,c字符的频率会转移到d字符上......我们也做这种相应的转移,让b字符在密文的频率(N1/L)和a字符在英文的频率f0相乘,当然这只是其中一种猜测。我们将这26种字符可能都列出来,最接近IC的一定是用b字符加密的那一组。