古典密码-vigenre密码

加密

vigenre密码根据包含26张字符对应表的vigenre方阵(见文末图)来实现对字符串的加密,我们将每一行视为一张密码表,其基本加密过程如下:

假设我们需要加密的明文为:hellocipherworld(由于这个表只有小写字母,暂时只加密包含小写字母的明文)

  1. 确定一个由字符组成的密钥,如: cipher(密钥用于确定加密明文的某个字符时使用哪一张密码表)

  2. 加密第一个字符h,使用密钥第一个字符c,查表第h列,第c行字符为j,所以h被加密为j

  3. 加密第二个字符e,使用密钥的第二个字符i,查表第e列,第i行字符为m,所以e被加密为m

    ...

  4. 由于密钥比明文短(当然这是不安全的不过反正这个密码现在也谈不上安全了),我们在加密明文第7个字符(i)时需要循环使用密钥cipher,即查表第i列,第c行字符为k,所以i被加密为k

  5. 按照这个方法即可完成加密,结果为jmasstkxwlvnqzak

解密

解密过程同样是查表

  1. 密文第一个字符为j,密钥第一个字符为c,查第c行中的j字符对应的是第h列,所以明文为

    ...

  2. 密文较密钥长时循环使用密钥完成解密

已知明文破解

大家可以看出加密过程是根据行,列索引查找矩阵中字符的过程,解密过程是根据行索引矩阵中的字符查找列索引的过程,而已知明文破解是根据列索引矩阵中的字符查找行索引的过程,由于vigenre矩阵的对称性,解密过程和已知明文破解过程其实是一样的。

以上具体代码实现(python)参见https://gitee.com/JanuaryJIAN/codes/4k7tvbx6ydf1q9uzws23h77

vigenre.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CTF中那些脑洞大开的编码和加密 0x00 前言 正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问...
    查无此人asdasd阅读 6,130评论 0 19
  • 0x01 目录 常见编码: ASCII编码 Base64/32/16编码 shellcode编码 Quoted-p...
    H0f_9阅读 13,093评论 2 17
  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,785评论 0 6
  • 〇、序言 货币由于其天然属性决定了其与安全不可分割的联系,从最早的金库、保险柜、镖局到后来的ATM机、运钞车;从存...
    怒马2048阅读 39,264评论 4 79
  • 吃午饭时发的信息没被回复,担心对方还像之前一样,会睡到下午才醒,没打电话过去问“到底在不在寝室”。 谁让我从教室出...
    趁早退场阅读 216评论 3 2