Vigenere密码
的Vigenere密码加密消息的方法是使用一系列不同的凯撒密码根据特定关键字的字母。Vigenère密码比单个凯撒密码更强大,也更难破解。
内容
简介
一个 本世纪的法国外交官布莱斯·德Vigenère创造了一个非常简单的密码,对于任何无意的一方来说都有一定的难度。即使已知的密钥来自于一种特定的语言,也有太多可能的密钥用于暴力破解。它不能被简单的词模式攻击所打破替换密码.人们认为它一直没有被打破,直到被认为是计算机之父的查尔斯·巴贝奇打破了它 世纪。
Vigenère密文是一个凯撒移位和一个关键字的组合。关键字的长度决定了应用于明文的不同加密的数量。例如,如果关键字的长度为4个字符,则明文被划分为4个潜文本,并根据关键字中相应字母的值对每个潜文本应用单独的Caesar移位。密码是多字母的,这意味着一个字符可以用不同的方式加密——例如,一个潜台词中的“a”可以被编码为“T”,而在另一个潜台词中,它可以被编码为“P”。这种干扰频率分析,一种通过查看最常见的字符并将它们映射到(非加密的)语言中最常见的字符来破解代码的方法。
Vigenère替换基于上表。Vigenère cipher使用这个表和一个关键字来加密消息。
所有26个可能的凯撒密码都表示在表中(每行一个),因为每行显示的字母表比上一行多移动一个字母。关键字母显示在每一行的开头。这一行的其余部分显示了字母A到Z(以移位的顺序)。虽然显示了26行键,但编码器将只使用键字符串中有多少惟一字母的行(不同的字母)。
表的第一行中的字母表示消息中的字母。要对消息进行编码,请查找以要编码的字母开头的列,查找它与映射到消息中字母的关键字字母所在行的交点位置。交点处的字母将是该消息字母被编码为的字母。
假设我们希望加密明文消息
太阳和月亮上的人
,
使用关键字王
.首先在明文信息上方写上关键字,必要时可以重复多次。要使用上表导出密文,对于明文中的每个字母,找到对应关键字字母所给出的行与明文字母本身所给出的列的交点,以选出密文字母。
关键字:金格金金格金明文:太阳和月亮上的人密文:DPR YEV NTN BUK WIA OX BUK WWBT
要解密文本,请在关键字字母所在行找到密码字母,然后查看密码字母的列。
要解密文本:
关键词:金gki NGK ING金gk ING KING密文:DPR YEV NTN BUK WIA OX BUK WWBT明文:太阳和月亮上的人
加密以下消息:
密码学超级酷
,
使用关键字数学
.关键词:mathmathma THMATHMAT明文:密码学是超级酷密文:ORRWFOZYMPAF US LBBEK JAOE要解密文本:
关键词:mathmathma THMATHMAT密文:ORRWFOZYMPAF US LBBEK JAOE明文:密码学超级酷
在这里是一个在线Vigenère密码,您可以使用它来生成您自己的编码消息并检查您的答案。
密码分析
Vigenère密码的优点是,由于密码通过不同的移位轮换,它不容易受到频率分析的影响,因此,相同的明文字母不会总是被加密为相同的密文字母。例如,我们假设“e”是英语单词中最常见的字母。使用频率分析的密码破解者可能认为编码消息中最常见的字母很可能对应“e”。但是,由于Vigenère密码以不同的方式对同一个字母进行编码,这取决于关键字,“e”可以被编码为许多不同的字母,从而打破了频率分析背后的假设。因此,他们被许多人认为是牢不可破的300年。
Vigenère密码很难用蛮力破解,因为消息中的每个字母都可能被编码为 信件。因为消息的编码取决于所使用的关键字,所以给定的消息可以用 的方式, 是关键字的长度。例如,如果我们只知道一条消息是由7个字母组成的单词编码的,那么它可以被编码为 十亿的方式![1]
Vigenère密码的主要弱点是其密钥的重复性。如果密码分析师正确地猜测了密钥的长度,那么密文就可以被视为交织在一起的凯撒密码,这些密码单独来说很容易被破解。例如,在上面的密文中,明文的
在消息中出现两次,在这两种情况下,它都与关键字的前两个字母完美地对齐。因此,它产生相同的密文鼓
.
密文中的重复指示明文中的重复,这些重复之间的空格提示关键字的长度。
事实上,任何使用Vigènere密码加密的消息都会产生许多这样的重复实例。虽然不是每一个重复实例都是相同明文加密的结果,但许多重复实例都是,这为破解密码提供了基础。这种分析方法被称为Kasiski考试.
实现Vigenere密码
下面是在Python中实现Vigenère密码的一种方法。[2]
12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
参考文献
- Sweigart,。VIGENERE密码.检索于2016年5月22日https://inventwithpython.com/hacking/chapter19.html
- 伍利,J。Python中的Vigenère密码.检索自2016年5月13日http://jamesdotcom.com/?p=258