① 下面密文是用模26下的仿射密码加密的gzyyf,明文以he开头,试解密消息
hellk.仿射密码公式是:密文=明文剩于密钥1加密钥2然后和与26取余,即e(x)=(ax+b)mod26. 从提示he开头,代入即g=(ha+b)mon26,z=(ea+b)mod26,可求得a=11. b=7.,从而得出其它结果。注:公式中,a表示密钥1,且与26互质,即取值是1.3.5.7...23.25共13个,b是密钥2,取值范围是0-25.0-25对应英文字母a-z. 所以h=7,e=4,其它类推。还有,结果不应该是hello? 算出来是hellk.
② 仿射密码怎样实现选择明文攻击,唯密文攻击,已知明文攻击
密码学的知识,不太了解,帮你找了下
http://book.csdn.net/bookfiles/884/10088427852.shtml
往下一点就找到了,网页有点乱~~
6. 仿射密码
把加法密码和乘法密码联合起来,就得到了所谓的仿射密码(affine cipher)—— 两种密码与一对密钥的组合。乘法密码使用第一个密钥,加法密码使用第二个密钥。如图3-11所示,仿射密码其实就是被先后使用的两种密码。我们本来可以提出一种有关加密和解密的复杂运算,如C = (P ′ k1 + k2) mod 26和P = ((C - k2) ′ k1-1) mod 26。然而,我们用临时结果(T)表示两种单独的运算,以表明无论什么时候使用密码组合,均需确保在行的另一端要有一个逆,该逆在加密和解密过程中使用的顺序是相反的。如果加法是加密过程中的最终运算,那么减法就是解密过程中的初始运算。
在仿射密码中,明文P和密文C的关系是
图3-11 仿射密码
例3.9
仿射密码使用密钥对,在该密钥对中第一密钥来自集合Z26*,第二密钥来自集合Z26。密钥域的长度是26 ′ 12 = 312。
例3.10
运用仿射密码对带有密钥对(7, 2)的信息“hello”进行解密。
解答
对乘法密钥使用7,对加法密钥使用2,就会得到“ZEBBW”。
例3.11
在模26中,用仿射密码对具有密钥对(7, 2)的信息“ZEBBW”进行解密。
解答
把- 2 o 24 (mod 26)的加法逆加在接收的密文中。然后,再用结果乘以7–1 o 15 (mod 26)的乘法逆,就求出了明文字符。因为2在集合Z26中有一个加法逆,7在集合Z26*中有一个乘法逆,明文正好就是我们在例3.10中所用的。
③ 仿射加密法的举例
设仿射加密函数是 ,由上表知:11-1mod(26)=19,所以相应的仿射解密函数是 。
若加密明文是sorcery,首先把明文每个字母转换为数字18,14,17,2,4,17,24。然后对明文进行加密,得密文为welcylk。
④ 仿射加密c语言,以下程序能运行,但出不了结果,求更改。不改形式。!!
#include<iostream>//仿射加密,输入sorcery-->输出welcylk
usingnamespacestd;
#include<string.h>
voidFsJiami(chars[99])
{
inti;inta[99];char*p;
p=s;
while(*p!='