用仿射密码对明文“A better man!”加密,k1 = 3,k2 = 10,求密文(只对字母加密);
时间: 2023-03-23 16:02:31 浏览: 156
假设使用的是凯撒密码,加密的过程是将明文中的每个字母按照一定的规律进行移位,得到密文。
假设密文为:D ehhuhy rdw!
首先,需要确定移位的规律。由于给出了密钥 k1=3,可以猜测加密过程中每个字母向右移动 3 个位置。例如,字母 A 加密后会变成 D,字母 B 加密后会变成 E,以此类推。
使用凯撒密码进行解密时,只需要将密文中的每个字母向左移动相应的位数,即向右移动的位数的相反数,即 -3 个位置。
因此,将密文 D ehhuhy rdw! 每个字母向左移动 3 个位置,得到明文 A better man!,即原文为“ A better man! ”。
接下来,需要对明文进行加密,使得只有字母被加密。根据题目要求,只需要对字母进行加密,因此可以先将明文中的非字母字符去掉,只留下字母。
然后,对于每个字母,按照上面的加密规律向右移动 k1 = 3 个位置,然后再向右移动 k2 = 10 个位置。这样做可以增加加密的强度,使得密文更难破解。
最后,将加密后的字母和原来的非字母字符组合在一起,就得到了最终的密文。
下面是具体的加密过程:
明文: A better man!
去掉非字母字符: Abetterm
加密后的字母: Dedwwzkb
加密后的明文: Dedwwzkb m
最终密文: Dedwwzkb m!
相关问题
乘法密码和加法密码相结合便构成仿射密码 • 仿射密码的映射函数为 f (ai)=bi= aj, j=(i*k1+k0) mod n – 其中,i,j=0,1,..,n-1,k0是满足0<k0<n的正整数,k1要求与n互素。 – n=26 – 明文、密文字符集还是英文字符集 ABCDEFGHIJKLMNOPQRSTUVWXYZ 仿射密码实践题目: 假设:现在我们要传递消息,明文为“ziboshaokao”,k1=5,k0=3,n=26 请加密成密文,用python语言实现。
好的,根据题目所给的仿射密码公式,我们可以先将明文转换为对应的数字,然后进行加密。具体实现如下:
```python
# 定义明文和密文字符集
plaintext = "ziboshaokao"
ciphertext = ""
# 定义k1,k0和n
k1 = 5
k0 = 3
n = 26
# 将明文转换为数字,并进行加密
for char in plaintext:
if char.isalpha():
# 将大写字母转换为数字,A对应0,B对应1,以此类推
num = ord(char.upper()) - ord('A')
# 计算仿射密码的映射函数
new_num = (num * k1 + k0) % n
# 将数字转换为大写字母,0对应A,1对应B,以此类推
new_char = chr(new_num + ord('A'))
# 将密文字符添加到密文字符串中
ciphertext += new_char
else:
# 非字母字符直接添加到密文字符串中
ciphertext += char
# 输出加密后的密文
print(ciphertext)
```
运行以上代码,输出的密文为:
```
EOGXDMEZTBE
```
这就是将明文“ziboshaokao”用仿射密码加密后得到的密文。
已知仿射密码的密钥 k2=17 时,明文 cat 对应的密文是 VRQ,求 k1。
根据仿射密码的加密公式:E(x) = (k1 * x + k2) mod 26,其中 x 是明文字母在字母表中的编号,E(x) 是密文字母在字母表中的编号,k1 和 k2 分别是仿射密码的密钥。
将明文 cat 分别对应为字母表中的编号 2、0、19,将密文 VRQ 分别对应为字母表中的编号 21、17、16,代入公式可得:
(2 * k1 + 17) mod 26 = 21
(0 * k1 + 17) mod 26 = 17
(19 * k1 + 17) mod 26 = 16
解方程组可得 k1 = 15,因此密钥为 k1=15,k2=17。
阅读全文