首页 > 其他分享 >维吉尼亚密码

维吉尼亚密码

时间:2024-03-26 15:46:42浏览次数:36  
标签:字母 维吉尼亚 明文 密码 密钥 密文

在一个凯撒密码中,字母表中的每一字母都会作一定的偏移,例如偏移量为3时,A就转换为了D、B转换为了E……而维吉尼亚密码则是由一些偏移量不同的恺撒密码组成。

 

为了生成密码,需要使用表格法。这一表格(如图1所示)包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。 例如,假设明文为: ATTACKATDAWN 选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为: LEMONLEMONLE 对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到: 明文:ATTACKATDAWN密钥:LEMONLEMONLE密文:LXFOPVEFRNHR 解密的过程则与加密相反。例如:根据密钥第一个字母L所对应的L行字母表,发现密文第一个字母L位于A列,因而明文第一个字母为A。密钥第二个字母E对应E行字母表,而密文第二个字母X位于此行T列,因而明文第二个字母为T。以此类推便可得到明文。 用数字0-25代替字母A-Z,维吉尼亚密码的加密文法可以写成同余的形式:

 

解密方法则能写成:

 

  对包括维吉尼亚密码在内的所有多表密码的破译都是以字母频率为基础的,但直接的频率分析却并不适用。例如,如果P是密文中出现次数最多的字母,则P很有可能对应E(前提是明文的语言为英语)。原因在于E是英语中使用频率最高的字母。然而,由于在维吉尼亚密码中,E可以被加密成不同的密文,因而简单的频率分析在这里并没有用。 破译维吉尼亚密码的关键在于它的密钥是循环重复的。如果我们知道了密钥的长度,那密文就可以被看作是交织在一起的凯撒密码,而其中每一个都可以单独破解。使用卡西斯基试验和弗里德曼试验来得到密钥的长度。  

卡西斯基试验

弗里德里希·卡西斯基于1863年首先发表了完整的维吉尼亚密码的破译方法,称为卡西斯基试验(Kasiski examination)。早先的一些破译都是基于对于明文的认识、或者使用可识别的词语作为密钥。而卡西斯基的方法则没有这些限制。然而,在此之前,已经有人意识到了这一方法。1854年,查尔斯·巴贝奇受到斯维提斯(John Hall Brock Thwaites)在《艺术协会杂志》(Journal of the Society of the Arts)上声称发明了“新密码”的激励,从而破译了维吉尼亚密码。巴贝奇发现斯维提斯的密码只不过是维吉尼亚密码的一个变种而已,而斯维提斯则向其挑战,让他尝试破译用两个不同长度的密钥加密的密文。巴贝奇成功地进行了破译,得到的明文是丁尼生所写的诗《罪恶的想象》(The Vision of Sin),使用的密钥则是丁尼生妻子的名字Emily(艾米莉)。巴贝奇从未对他的方法进行过解释 。在对巴贝奇生前笔记的研究中发现,早在1846年巴贝奇就使用了这一方法,与后来卡西斯基发表的方法相同。 卡西斯基试验是基于类似the这样的常用单词有可能被同样的密钥字母进行加密,从而在密文中重复出现。例如,明文中不同的CRYPTO可能被密钥ABCDEF加密成不同的密文: 密钥:ABCDEF AB CDEFA BCD EFABCDEFABCD 明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY 密文:CSASXT IT UKSWT GQU GWYQVRKWAQJB 此时明文中重复的元素在密文中并不重复。然而,如果密钥相同的话,结果可能便为(使用密钥ABCD): 密钥:ABCDAB CD ABCDA BCD ABCDABCDABCD 明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY 密文:CSASTP KV SIQUT GQU CSASTPIUAQJB 此时卡西斯基试验就能产生效果。对于更长的段落此方法更为有效,因为通常密文中重复的片段会更多。如通过下面的密文就能破译出密钥的长度: 密文:DYDUXRMHTVDVNQDQNWDYDUXRMHARTJGWNQD 其中,两个DYDUXRMH的出现相隔了18个字母。因此,可以假定密钥的长度是18的约数,即长度为18、9、6、3或2。而两个NQD则相距20个字母,意味着密钥长度应为20、10、5、4或2。取两者的交集,则可以基本确定密钥长度为2。  

弗里德曼试验

弗里德曼试验由威廉·F·弗里德曼(William F. Friedman)于1920年代发明。他使用了重合指数(index of coincidence)来描述密文字母频率的不匀性,从而破译密码。

 

指目标语言中两个任意字母相同的概率(英文中为0.067),

 

指字母表中这种情况出现的概率(英文中为1/26=0.0385),从而密钥长度可以估计为:

 

其中,观察概率为

 

其中,c是指字母表的长度(英文为26),N指文本的长度,n1到nc是指密文的字母频率,为整数。 此方法只是一种估计,会随着文本长度的增加而更为精确。在实践中,会尝试接近此估计的多个密钥长度。一种更好的方法是将密文写成矩阵形式,其中列数与假定的密钥长度一致,将每一列的重合指数单独计算,并求得平均重合指数。对于所有可能的密钥长度,平均重合指数最高的最有可能是真正的密钥长度。这样的试验可以作为卡西斯基试验的补充。 [3]  

频率分析

一旦能够确定密钥的长度,密文就能重新写成多列,列数与密钥长度对应。这样每一列其实就是一个凯撒密码,而此密码的密钥(偏移量)则对应于维吉尼亚密码密钥的相应字母。与破译凯撒密码类似的方法,就能将密文破译。 柯克霍夫方法作为卡西斯基试验的改进,由奥古斯特·柯克霍夫(Auguste Kerckhoffs)提出。它将每一列的字母频率与转换后的明文频率相对应而得出每一列的密钥字母。一旦密钥中每一个字母都能确定,就能很简单地破译密文,从而得到明文。如果维吉尼亚字母表表格本身是杂乱而非按通常字母表顺序的话,那柯克霍夫方法就会无效,但卡西斯基试验和重复指数对于决定密钥长度仍旧是有效的。  
/**
 * @description 维吉尼亚加密算法
 * @param {string} str 明文
 * @param {string} key 秘钥
 * @return {Boolean}
 */
const encrypt = function (str, key) {
  const strArr = [];
  const keyArr = [];
  const res = [];
  for (let i = 0; i < str.length; i++) {
    strArr.push(str[i].charCodeAt() - 65);
  }
  for (let i = 0; i < key.length; i++) {
    keyArr.push(key[i].charCodeAt() - 65);
  }
  for (let i = 0; i < strArr.length; i++) {
    res.push(
      String.fromCharCode(((strArr[i] + keyArr[i % key.length]) % 26) + 65)
    );
  }
  return res.join("");
};
console.log(encrypt("ATTACKATDAWN", "LEMONLEMONLE"));

 

标签:字母,维吉尼亚,明文,密码,密钥,密文
From: https://www.cnblogs.com/luckyuns/p/18096806

相关文章

  • 密码引擎
    解压源代码tarxzvf openssl-3.2.1.tar.gz进入源代码目录:cdopenssl-3.2.1编译安装:./configuremakesudomakeinstallWindows中编译openssl......
  • 移动宽带光猫—获取超级管理员密码教程
    设备名称:吉比特无源光纤接入用户端设备(GPONONU)设备类型:中国移动智能家庭网关类型八设备型号:H5-8默认终端配置地址:192.168.1.1默认终端配置账号:user默认终端配置密码:************ 第一步、先用普通用户登录http://192.168.1.1输入账号:user输入密码:*******......
  • fedora cloud image设置密码方法
    上网下了个fedoracloudimage的qcow2文件,起来虚机后没法登陆,也没有默认密码,后来发现是给云服务用的,要用cloud-init来初始化密码,本机上可以建个iso来初始化1.Createafilecalled"meta-data"withthecontentsinstance-id:iid-local01;local-hostname:fed21;2.Create......
  • C语言:洛谷题目分享(4)小书童--凯撒密码和笨小猴
    目录1.前言2.俩道题目1.小书童--凯撒密码1.题目背景2.题目描述3.输入格式4.输出格式5.题解2.笨小猴1.题目描述2.输入格式3.输出格式4.题解3.小结1.前言哈喽大家好啊,今天我继续为大家分享洛谷题单的俩道题目,请大家多多支持喔~2.俩道题目1.小书童--凯撒密码......
  • 前端实现用户名密码国家注册(Eclipse Jee软件)
    <!DOCTYPEhtml><html><head><metacharset="UTF-8"><scriptsrc="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><title>注册页面</title></head><body> <lab......
  • 应用密码学——分组密码
    DES算法描述明文分组为64位,初始密钥64位,有效密钥56位,输出密文64位,16轮迭代的分组对称密码算法。由置换、替换、异或、循环移位组成。流程图加密过程密钥生成64位初始密钥先进行一个PC-1置换,目的是根据置换表去掉8位奇偶校验位,并打乱剩下的56位有效密钥的顺序。将这56位分......
  • 忘记gitlab代码仓库登录密码,如何找回?
    一、密码要求必须是管理员或者自管理的Gitlab实例密码长度限制:Minimum:8charactersMaximum:128characters避免使用弱密码:例如gitlab、人名 二、密码找回方式2.1使用UI【适用普通账号】使用root账号,登录后,进入到管理中心。 搜索到用户后,点击编辑按钮 编辑态......
  • 信息安全技术第2章——密码技术
    2.1密码学基础2.1.1密码学历史及密码系统组成密码系统的四个基本部分组成明文:要被发送的原文消息密码算法:由加密和解密的数学算法组成密文:明文经过加密算法加密之后得到的结果密钥:在加密和解密过程中使用的一系列比特串​​​​​​​2.1.2密码的作用实现信息的保密性......
  • C#上位机登录界面设计-账号注册、密码修改功能(三)
        C#上位机登录界面设计-界面跳转(二)是讲述的如何登入主界面,下一步是修改账号、密码及注册新的账号、密码。C#上位机登录界面设计-界面设计(一)C#上位机登录界面设计-界面跳转(二)一、窗体设计1、添加修改密码窗体    右键点击右侧解决方案下面的项目名,弹出......
  • Windows密码重置工具 有几款
    Windows密码重置工具:PCUnlocker:PCUnlocker是一款功能强大的Windows密码重置工具,可以帮助用户重置本地Windows密码或Microsoft账户密码。它支持Windows11/10/8/7/Vista/XP/2019/2016/2012/2008/2003/2000等操作系统。PCUnlocker是一款专业的Windows密码重置工具,它允许用户......