设背包密码系统的超递增序列为(3,4,8,17,33)乘数t=17,模数k=67,试对密文25,2,72,92解密
时间: 2024-05-04 20:22:34 浏览: 141
首先,根据超递增序列和乘数t,可以得到加密密钥为:
```
a1 = 3
a2 = 4*t mod k = 68 mod 67 = 1
a3 = 8*t^2 mod k = 2312 mod 67 = 35
a4 = 17*t^3 mod k = 65849 mod 67 = 38
a5 = 33*t^4 mod k = 1213961 mod 67 = 14
```
接下来,我们可以根据解密公式进行解密:
```
m = (c * a1^-1) % k
m = (c * a2^-1) % k
m = (c * a3^-1) % k
m = (c * a4^-1) % k
m = (c * a5^-1) % k
```
其中,c为密文,a^-1表示a在模k意义下的乘法逆元。
对于模数k=67,每个a都可以直接计算出乘法逆元。例如:
```
a1^-1 = 45
a2^-1 = 4
a3^-1 = 2
a4^-1 = 31
a5^-1 = 62
```
因此,我们可以得到解密结果为:
```
m1 = (25 * 45) % 67 = 24
m2 = (2 * 4) % 67 = 8
m3 = (72 * 2) % 67 = 10
m4 = (92 * 31) % 67 = 15
m5 = (14 * 62) % 67 = 8
```
因此,密文25,2,72,92的解密结果为24,8,10,15。注意到解密结果可能不唯一,因此还需要根据具体应用场景进一步判断。
相关问题
设背包密码系统的超递解答题:增序列为(3,4,8,17,33)乘数t=17,模数k=67,试对密文25,2,72,92解密
首先,我们需要将密文转化为对应的数字。根据背包密码系统的加密方法,我们可以得到:
25 = 1\*3 + 1\*4 + 0\*8 + 1\*17 + 1\*33 = 57
2 = 0\*3 + 0\*4 + 1\*8 + 0\*17 + 0\*33 = 8
72 = 1\*3 + 0\*4 + 1\*8 + 1\*17 + 2\*33 = 111
92 = 1\*3 + 1\*4 + 1\*8 + 1\*17 + 2\*33 = 121
接下来,我们需要求解背包密码系统的超递解,也就是找到一个数s,使得t\*s ≡ 1 (mod k)。根据扩展欧几里得算法,可以得到:
67 = 3\*17 + 16
17 = 1\*16 + 1
16 = 16\*1 + 0
因此,gcd(67, 17) = 1,且67和17互质。根据扩展欧几里得算法的结果,我们可以得到:
1 = 17 - 1\*16
1 = 17 - 1\*(67 - 3\*17)
1 = 4\*17 - 1\*67
因此,s = 4,满足t\*s ≡ 1 (mod k)。
最后,我们可以使用超递解来解密密文。对于每个密文c,我们可以计算出其对应的明文m,如下所示:
m = (c\*s) mod k
对于本题中的四个密文,我们可以得到以下解密结果:
57\*4 ≡ 228 ≡ 17 (mod 67)
8\*4 ≡ 32 ≡ 4 (mod 67)
111\*4 ≡ 444 ≡ 25 (mod 67)
121\*4 ≡ 484 ≡ 25 (mod 67)
因此,解密后的明文为17、4、25、25。
设背包密码 A 为(3,4,9,17,35)超递增.,乘数 t=19 k=73 试对 good night 进行加密
首先将明文转化为 ASCII 码,得到:
```
103 111 111 100 32 110 105 103 104 116
```
然后选择一个大于明文总长度的最小背包和,这里选择 49,然后计算出对应的背包公钥:
```
B = [57, 60, 67, 82, 114]
```
接下来计算明文二进制数的超递增背包加密值:
```
C = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
sum = 0
for i in range(len(plaintext)):
value = plaintext[i]
for j in range(8):
C[8*i+j] = value % 2
value //= 2
for j in range(8*i, 8*i+8):
sum += C[j] * A[j-8*i]
if i == len(plaintext) - 1:
C[8*(i+1)] = sum * t % k
else:
C[8*(i+1)] = sum % k
sum = 0
C = [3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
```
最后得到密文:
```
[171, 219, 292, 412, 719, 1095, 1303, 1530, 1720, 1990, 2104, 2354, 2539, 2689, 2865, 3094, 3274, 3472, 3646, 3934, 4216, 4403, 4715, 4982, 5154, 5389, 5558, 5799]
```
因此,加密后的结果为:
```
171 219 292 412 719 1095 1303 1530 1720 1990 2104 2354 2539 2689 2865 3094 3274 3472 3646 3934 4216 4403 4715 4982 5154 5389 5558 5799
```
阅读全文