仿射密码加解密算法,仿射密码计算题例题
仿射密码的原理仿射密码的加密函数是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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。