仿射密码加解密算法,仿射密码计算题例题

  仿射密码加解密算法,仿射密码计算题例题

  仿射密码的原理仿射密码的加密函数是e(x )=(AXB)) modm)。这里

  x表示用明文编码得到的数字A和M是编码系统的字母。解码函数为d(x )=a1-XB )modm,其中a-1是Zm群中a相乘的逆。

  以e(x )=) 5x8) mod26函数为例。加密字符串是仿射密码,其中26个字母直接用作编码系统。

  其对应的加密结果为IHHWVCSWFRCP。对于解码过程,正常的解码器有A和b,由于a1可以计算为21,所以其解码函数为d(x )=21) x8) mod26)。解码过程如下

  它的特点是只有26个字符。

  首先可以看出,仿射密码具有最常见的特征,因为对于任意两个不同的字符,最终的密文都会不同。如果密文长度足够长,可以通过频率分析求解。

  接下来,考虑如何攻击密码。当a=1时,可以知道仿射加密是常见的草。一般来说,当我们使用仿射密码时,它的字符集使用字母,通常只有26个字符。另外,考虑到26以下的26互质的个数为(26 )=12)) 13 )=12以及B的偏移量,可以共享的密钥空间大小为1226=312。

  一般来说,这种密码只有在至少部分清楚的情况下才能被攻击。我来简单分析一下。

  该密码由两个参数控制。如果知道其中一个参数,就可以很容易地枚举另一个参数得到答案。

  但是,假设您知道已经采用的字符集。这里它被设置为26个字符。还有一种解密方法。如果你知道两个加密的字符y1和y2,你可以解密它们。我们也知道

  Y1=(ax1b)(模26)。

  y2=(ax2b ) (mod26))

  将两个表达式相减得到YYY2=A (X1X2) (MOD26)

  这里,如果y1和y2知道密文对应的两个不同的字符x1和x2,就很容易得到A,进而得到b。

  这里以TWCTF 2016的super_express为例介绍一下例子。只需查看给定的源代码。

  Import key= * * * * *责难* * * * * flag= twctf {* * * * * *责难* * * * } n=len()key[n:2 * n](:c=(ord(a

  c1=a1c b1

  c2=a2c1 b2

  =a1a2c a2b1c b2

  =kc d

  根据第2行的导出,其实cn也是这种形式,可以看成cn=xc y .而且,因为密钥总是一样的,你会发现其实是仿射密码。

  此外,由于标题还显示了密文和部分密文对应的明文,因此很容易被已知的明文攻击方法攻击。使用代码如下

  importgmpykey= * * * * *审查* * * * * * * * * * flag= tw CTF { * * * * * * * * } n )encrypted=[int]2)plain delta=ord(flag[1]-ord)flag[0](cipher dalte=encrypted(1)-encrypted)a=gmpy . invert))251)cipher dalte % 1b=(encrypted[0]-a * ord(flag[0]))251 a _ inv=gmpy . invert)a,251 ) result=

  tw CTF 2016-super _ express git:(大师)python exploit . pytw CTF { fast _ than _ frd dy!() ) ) ) )。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: