0%

BUUCTF 每日打卡 2021-8-25

BUUCTF 每日打卡 2021-8-25

引言

前几天打了祥云杯,成绩还行,四道Crypto解了三道,最后一道懒得解了。线下应该稳了,但是和数学建模国赛冲突了去不了( 昨天把buu第四页刷完了

[NCTF2019]Reverse

加密代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import os
import pyDes


flag = "NCTF{******************************************}"
key = os.urandom(8)

d = pyDes.des(key)
cipher = d.encrypt(flag.encode())

with open('cipher', 'wb') as f:
f.write(cipher)

# Leak: d.Kn[10] == [0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1]

考察des加密算法 加密代码给出了第十个子密钥 根据加密算法,原64位密钥要经过置换得到56位密钥,再经过置换得到48位密钥,然后分段位移,得到16个子密钥 已知其中一个子密钥,要还原第二轮置换前的密钥,总共有\(2^8\)种情况,而继续还原原密钥,总共有\(2^{16}\)种情况,还可以接受 给出两种解法:一、还原原密钥;二、还原全部子密钥 解法一代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import pyDes
from Crypto.Util.number import *
from tqdm import tqdm

pc1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63,
55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4]
pc2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55,
30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32]
step = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]
key10 = [0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1]


def reverse_k(key):
temp = ['' for _ in range(len(pc1))]
for i in range(len(pc1)):
temp[pc1[i] - 1] = key[i]
return temp


def reverse_cd(key):
temp = ['' for _ in range(len(pc1))]
pcd = [] # possible c,d
for i in range(len(pc2)):
temp[pc2[i] - 1] = key[i]
for i in range(2 ** 8):
t = temp.copy()
s = bin(i)[2:].zfill(8)
count = 0
for k in range(len(t)):
if t[k] == '':
t[k] = int(s[count])
count += 1
pcd.append((t[:28], t[28:]))
return pcd


def re_move(s, r):
t = s[-r:] + s[:-r]
return t


def re_key(k0):
temp = ['' for _ in range(64)]
pk = [] # possible key
for i in range(len(pc1)):
temp[pc1[i] - 1] = k0[i]
for i in range(2 ** 8):
t = temp.copy()
s = bin(i)[2:].zfill(8)
count = 0
for k in range(len(t)):
if t[k] == '':
t[k] = int(s[count])
count += 1
pk.append(t)
return pk


possible_cd = reverse_cd(key10)
for r in range(10, -1, -1):
for i in range(len(possible_cd)):
possible_cd[i] = (re_move(possible_cd[i][0], step[r]), re_move(possible_cd[i][1], step[r]))

possible_k = []
for i in range(len(possible_cd)):
possible_k.append(possible_cd[i][0] + possible_cd[i][1])

possible_k0 = []
for i in range(len(possible_k)):
tempk = re_key(possible_k[i])
for k0 in tempk:
possible_k0.append(k0)

with open("attachment\\cipher", "rb") as f:
c = f.read()

set_m = set()
for i in tqdm(range(len(possible_k0))):
key = long_to_bytes(int("".join([str(_) for _ in possible_k0[i]]), 2))
d = pyDes.des(key)
m = d.decrypt(c)
set_m.add(m)
print(set_m)

跑了几分钟,得到结果: 在这里插入图片描述 第二种解法代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import pyDes

key = '********'
d = pyDes.des(key)

pc1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63,
55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4]
pc2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55,
30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32]
step = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]
key10 = [0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1]

def reverse_k(key):
temp = ['' for _ in range(len(pc1))]
for i in range(len(pc1)):
temp[pc1[i]-1] = key[i]
return temp

def reverse_cd(key):
temp = ['' for _ in range(len(pc1))]
pcd = [] # possible c,d
for i in range(len(pc2)):
temp[pc2[i]-1] = key[i]
for i in range(2**8):
t = temp.copy()
s = bin(i)[2:].zfill(8)
count = 0
for k in range(len(t)):
if t[k] == '':
t[k] = int(s[count])
count += 1
pcd.append((t[:28], t[28:]))
return pcd

def re_move(s, r):
t = s[-r:] + s[:-r]
return t

def get_key(k0):
list_key = []
c = k0[:28]
d = k0[28:]
for i in range(len(step)):
c = c[step[i]:] + c[:step[i]]
d = d[step[i]:] + d[:step[i]]
tempk = c+d
temp = ['' for _ in range(len(pc2))]
for j in range(len(pc2)):
temp[j] = tempk[pc2[j]-1]
list_key.append(temp)
return list_key

possible_cd = reverse_cd(key10)
for r in range(10, -1, -1):
for i in range(len(possible_cd)):
possible_cd[i] = (re_move(possible_cd[i][0], step[r]), re_move(possible_cd[i][1], step[r]))

possible_k = []
for i in range(len(possible_cd)):
possible_k.append(possible_cd[i][0] + possible_cd[i][1])

with open("attachment\\cipher", "rb") as f:
c = f.read()

for i in range(len(possible_k)):
list_key = get_key(possible_k[i])
d.Kn = list_key
m = str(d.decrypt(c))
if m.startswith('b\'NCTF'):
print(m)

参考了大佬的解法,其中key只要是八位字符就行 得到结果: 在这里插入图片描述

[祥云杯 2021]Random_RSA

一道送分题 加密代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from Crypto.Util.number import *
import random

flag=r'flag{}'

p=getPrime(512)
q=getPrime(512)
e=0x10001
n=p*q
ct=pow(flag,e,n)
print("n="+ n)
print("ct="+ ct)

dp=r''
seeds = []
for i in range(0,len(dp)):
seeds.append(random.randint(0,10000))

res = []
for i in range(0, len(dp)):
random.seed(seeds[i])
rands = []
for j in range(0,4):
rands.append(random.randint(0,255))

res.append(ord(dp[i]) ^ rands[i%4])
del rands[i%4]
print(str(rands))

print(res)
print(seeds)

# n=81196282992606113591233615204680597645208562279327854026981376917977843644855180528227037752692498558370026353244981467900057157997462760732019372185955846507977456657760125682125104309241802108853618468491463326268016450119817181368743376919334016359137566652069490881871670703767378496685419790016705210391
# ct=61505256223993349534474550877787675500827332878941621261477860880689799960938202020614342208518869582019307850789493701589309453566095881294166336673487909221860641809622524813959284722285069755310890972255545436989082654705098907006694780949725756312169019688455553997031840488852954588581160550377081811151

# [58, 53, 122] [145, 124, 244] [5, 19, 192] [255, 23, 64] [57, 113, 194] [246, 205, 162] [112, 87, 95] [215, 147, 105] [16, 131, 38] [234, 36, 46] [68, 61, 146] [148, 61, 9] [139, 77, 32] [96, 56, 160] [121, 76, 17] [114, 246, 92] [178, 206, 60] [168, 147, 26] [168, 41, 68] [24, 93, 84] [175, 43, 88] [147, 97, 153] [42, 94, 45] [150, 103, 127] [68, 163, 62] [165, 37, 89] [219, 248, 59] [241, 182, 8] [140, 211, 146] [88, 226, 2] [48, 150, 56] [87, 109, 255] [227, 216, 65] [23, 190, 10] [5, 25, 64] [6, 12, 124] [53, 113, 124] [255, 192, 158] [61, 239, 5] [62, 108, 86] [123, 44, 64] [195, 192, 30] [30, 82, 95] [56, 178, 165] [68, 77, 239] [106, 247, 226] [17, 46, 114] [91, 71, 156] [157, 43, 182] [146, 6, 42] [148, 143, 161] [108, 33, 139] [139, 169, 157] [71, 140, 25] [28, 153, 26] [241, 221, 235] [28, 131, 141] [159, 111, 184] [47, 206, 11] [220, 152, 157] [41, 213, 97] [4, 220, 10] [77, 13, 248] [94, 140, 110] [25, 250, 226] [218, 102, 109] [189, 238, 66] [91, 18, 131] [23, 239, 190] [159, 33, 72] [183, 78, 208] [209, 213, 101] [111, 50, 220] [166, 104, 233] [170, 144, 10] [187, 87, 175] [195, 59, 104] [165, 179, 179] [99, 247, 153] [195, 61, 100] [223, 159, 165] [230, 93, 184] [87, 28, 35] [35, 122, 38] [158, 188, 163] [229, 192, 222] [12, 12, 192] [207, 95, 224] [127, 113, 137] [22, 114, 143] [13, 45, 144] [70, 140, 211] [57, 101, 42] [132, 62, 129] [40, 128, 124] [1, 132, 161] [164, 33, 133] [252, 201, 32] [8, 18, 247] [1, 88, 55] [201, 135, 186] [101, 254, 125] [236, 196, 39] [148, 24, 103] [101, 29, 253] [97, 156, 64] [90, 103, 91] [50, 48, 80] [206, 22, 93] [11, 114, 174] [61, 132, 247] [215, 32, 232] [95, 128, 90] [57, 35, 228] [163, 143, 107] [178, 250, 28] [64, 107, 225] [106, 115, 207] [85, 134, 21] [118, 201, 76] [234, 34, 22] [241, 236, 122] [111, 185, 127] [1, 26, 164] [254, 57, 117] [243, 27, 32] [161, 88, 80] [50, 165, 93] [87, 182, 216] [184, 159, 63] [167, 166, 123] [37, 78, 33] [186, 81, 58] [48, 3, 239] [70, 186, 13] [56, 108, 178] [54, 55, 235] [105, 180, 105] [16, 194, 98] [136, 11, 41] [18, 203, 79] [185, 114, 170] [148, 181, 223] [118, 57, 160] [23, 250, 181] [235, 219, 228] [44, 151, 38] [185, 224, 134] [42, 162, 122] [3, 9, 158] [129, 245, 2] [66, 241, 92] [80, 124, 36]
# [55, 5, 183, 192, 103, 32, 211, 116, 102, 120, 118, 54, 120, 145, 185, 254, 77, 144, 70, 54, 193, 73, 64, 0, 79, 244, 190, 23, 215, 187, 53, 176, 27, 138, 42, 89, 158, 254, 159, 133, 78, 11, 155, 163, 145, 248, 14, 179, 23, 226, 220, 201, 5, 71, 241, 195, 75, 191, 237, 108, 141, 141, 185, 76, 7, 113, 191, 48, 135, 139, 100, 83, 212, 242, 21, 143, 255, 164, 146, 119, 173, 255, 140, 193, 173, 2, 224, 205, 68, 10, 77, 180, 24, 23, 196, 205, 108, 28, 243, 80, 140, 4, 98, 76, 217, 70, 208, 202, 78, 177, 124, 10, 168, 165, 223, 105, 157, 152, 48, 152, 51, 133, 190, 202, 136, 204, 44, 33, 58, 4, 196, 219, 71, 150, 68, 162, 175, 218, 173, 19, 201, 100, 100, 85, 201, 24, 59, 186, 46, 130, 147, 219, 22, 81]
# [4827, 9522, 552, 880, 7467, 7742, 9425, 4803, 6146, 4366, 1126, 4707, 1138, 2367, 1081, 5577, 4592, 5897, 4565, 2012, 2700, 1331, 9638, 7741, 50, 824, 8321, 7411, 6145, 1271, 7637, 5481, 8474, 2085, 2421, 590, 7733, 9427, 3278, 5361, 1284, 2280, 7001, 8573, 5494, 7431, 2765, 827, 102, 1419, 6528, 735, 5653, 109, 4158, 5877, 5975, 1527, 3027, 9776, 5263, 5211, 1293, 5976, 7759, 3268, 1893, 6546, 4684, 419, 8334, 7621, 1649, 6840, 2975, 8605, 5714, 2709, 1109, 358, 2858, 6868, 2442, 8431, 8316, 5446, 9356, 2817, 2941, 3177, 7388, 4149, 4634, 4316, 5377, 4327, 1774, 6613, 5728, 1751, 8478, 3132, 4680, 3308, 9769, 8341, 1627, 3501, 1046, 2609, 7190, 5706, 3627, 8867, 2458, 607, 642, 5436, 6355, 6326, 1481, 9887, 205, 5511, 537, 8576, 6376, 3619, 6609, 8473, 2139, 3889, 1309, 9878, 2182, 8572, 9275, 5235, 6989, 6592, 4618, 7883, 5702, 3999, 925, 2419, 7838, 3073, 488, 21, 3280, 9915, 3672, 579]

由于如果random.seed是一定的,那么生成的随机数就是一定的,题目给出了seed,就可以还原dp,进而进行RSA解密 获取dp不能在python3下运行,需要在python2下得到随机数 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# python2
import random

seeds = [4827, 9522, 552, 880, 7467, 7742, 9425, 4803, 6146, 4366, 1126, 4707, 1138, 2367, 1081, 5577, 4592, 5897, 4565, 2012, 2700, 1331, 9638, 7741, 50, 824, 8321, 7411, 6145, 1271, 7637, 5481, 8474, 2085, 2421, 590, 7733, 9427, 3278, 5361, 1284, 2280, 7001, 8573, 5494, 7431, 2765, 827, 102, 1419, 6528, 735, 5653, 109, 4158, 5877, 5975, 1527, 3027, 9776, 5263, 5211, 1293, 5976, 7759, 3268, 1893, 6546, 4684, 419, 8334, 7621, 1649, 6840, 2975, 8605, 5714, 2709, 1109, 358, 2858, 6868, 2442, 8431, 8316, 5446, 9356, 2817, 2941, 3177, 7388, 4149, 4634, 4316, 5377, 4327, 1774, 6613, 5728, 1751, 8478, 3132, 4680, 3308, 9769, 8341, 1627, 3501, 1046, 2609, 7190, 5706, 3627, 8867, 2458, 607, 642, 5436, 6355, 6326, 1481, 9887, 205, 5511, 537, 8576, 6376, 3619, 6609, 8473, 2139, 3889, 1309, 9878, 2182, 8572, 9275, 5235, 6989, 6592, 4618, 7883, 5702, 3999, 925, 2419, 7838, 3073, 488, 21, 3280, 9915, 3672, 579]
res = [55, 5, 183, 192, 103, 32, 211, 116, 102, 120, 118, 54, 120, 145, 185, 254, 77, 144, 70, 54, 193, 73, 64, 0, 79, 244, 190, 23, 215, 187, 53, 176, 27, 138, 42, 89, 158, 254, 159, 133, 78, 11, 155, 163, 145, 248, 14, 179, 23, 226, 220, 201, 5, 71, 241, 195, 75, 191, 237, 108, 141, 141, 185, 76, 7, 113, 191, 48, 135, 139, 100, 83, 212, 242, 21, 143, 255, 164, 146, 119, 173, 255, 140, 193, 173, 2, 224, 205, 68, 10, 77, 180, 24, 23, 196, 205, 108, 28, 243, 80, 140, 4, 98, 76, 217, 70, 208, 202, 78, 177, 124, 10, 168, 165, 223, 105, 157, 152, 48, 152, 51, 133, 190, 202, 136, 204, 44, 33, 58, 4, 196, 219, 71, 150, 68, 162, 175, 218, 173, 19, 201, 100, 100, 85, 201, 24, 59, 186, 46, 130, 147, 219, 22, 81]


def get_rnd(seed, i):
random.seed(seed)
for j in range(i%4+1):
t=0
t = random.randint(0,255)
return t

dp_list = []
for i in range(0, len(res)):
r = get_rnd(seeds[i], i)
dp_list.append(chr(r ^ res[i]))
dp = ''.join(dp_list)
print(dp)

得到dp后,解密代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Crypto.Util.number import *

dp = 5372007426161196154405640504110736659190183194052966723076041266610893158678092845450232508793279585163304918807656946147575280063208168816457346755227057
n = 81196282992606113591233615204680597645208562279327854026981376917977843644855180528227037752692498558370026353244981467900057157997462760732019372185955846507977456657760125682125104309241802108853618468491463326268016450119817181368743376919334016359137566652069490881871670703767378496685419790016705210391
c = 61505256223993349534474550877787675500827332878941621261477860880689799960938202020614342208518869582019307850789493701589309453566095881294166336673487909221860641809622524813959284722285069755310890972255545436989082654705098907006694780949725756312169019688455553997031840488852954588581160550377081811151
e = 0x10001

for k in range(1, e):
p = (e*dp-1) // k +1
q = n // p
if (n - p*q) == 0:
break
print(p, q)
phi = (p-1) * (q-1)
d = inverse(e, phi)
print(d)
m = pow(c, d, n)
print(long_to_bytes(m))

结果为: 在这里插入图片描述

参考我2021-4-5的博客

[祥云杯 2021]myRSA

加密代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# myRSA
from Crypto.Util.number import getPrime,bytes_to_long as b2l
from math import gcd
import hashlib
import random
import socketserver


KEYSIZE = 512
alpha = 2.0314159265358979
WELCOME = 'Welcome to use my better RSA!!!!!!So, what do you want now?'
menu = '1. encry \n2. getflag\n3. exit'
String = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz'

def proof_of_work():
STR = ''.join([String[random.randint(0,len(String)-1)] for _ in range(16) ])
HASH = hashlib.sha256(STR.encode()).hexdigest()
return STR[:4],STR[4:],HASH

def key_gen():
while True:
p,q = getPrime(KEYSIZE),getPrime(KEYSIZE)
e = 0x10001
if gcd(e,(p-1)*(q-1)):
break
key = [getPrime(int(KEYSIZE*alpha)) for _ in range(128)]
return (p,q,e),key

# encrypto
def encry(message,key,p,q,e):
k1,k2 = key[random.randint(0,127)],key[random.randint(0,127)]
x = p**2 * (p + 3*q - 1 ) + q**2 * (q + 3*p - 1)
y = 2*p*q + p + q
z = k1 + k2
c = pow(b2l(message),e,p*q)
return x * c + y * c + z


# get flag
def getflag(flag,key,p,q,e):
return encry(flag,key,p,q,e)



class server(socketserver.BaseRequestHandler):
def _recv(self):
data = self.request.recv(1024)
return data.strip()

def _send(self, msg, newline=True):
if isinstance(msg , bytes):
msg += b'\n'
else:
msg += '\n'
msg = msg.encode()
self.request.sendall(msg)

def handle(self):
START,END,HASH = proof_of_work()
self._send('SHA-256(?+{}) == {}'.format(END,HASH))
RCV = self._recv().decode()
if RCV != START:
return
self._send("I'm a CryptoRookie,so my Crypto system take time, please wait a minute XD!")
(p,q,e),key = key_gen()
flag = open('flag','rb').read()
self._send(WELCOME)
self._send('This is my public key:\nn = {}\ne = {}'.format(str(p*q),str(e)))
for _ in range(16):
self._send(menu)
COI = int(self._recv().decode())
if COI == 1 :
self._send('Give me your message')
message = self._recv()
self._send('Your encry message:')
self._send(str(encry(message,key,p,q,e)))
elif COI == 2:
self._send('This is your favourite:\n')
self._send(str(encry(flag,key,p,q,e)))
elif COI == 3:
self._send('Bye~')
break
class ForkedServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass

if __name__ == "__main__":
HOST, PORT = '0.0.0.0', 10001
server = ForkedServer((HOST, PORT), server)
server.allow_reuse_address = True
server.serve_forever()

可以发现encry函数返回x * c + y * c + z

因为 \[ \begin{cases} x = p^2(p + 3*q - 1 ) + q^2 (q + 3p - 1) \\ y = 2pq + p + q \end{cases} \] 所以 \[ x+y = (p+q)^3-(p+q)^2+(p+q)+4pq \] 就是这个z比较烦人 记c1 = x * c + y * c + z,若\(c>z\)z//c=0,而c = pow(b2l(message),e,p*q),z的位数大约为1040为,所以是有可能的 c是可以由已知量和输入得到,就可以得到\(c1//c=x+y\),又因为\(n=pq\)也是已知的,就可以求出p+q 再利用韦达定理,就可以求出p,q 再得到flag的密文记为cipher,显然\(x+y>>z\),那么\(pow(b2l(message),e,p*q) = cipher //(c1 // c)\),由此可以得到flag 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import gmpy2
from Crypto.Util.number import *


def solve(b, c):
delta = gmpy2.iroot(b ** 2 - 4 * c, 2)[0]
x1 = (-b + delta) // 2
x2 = (-b - delta) // 2
return x1, x2


e = 0x10001
n = 86044172594296565005981490357031086393690968005717632558751820099266937712955656104764926148481742006814962008762565224013526727309394165049475391585813691086579318605817150928507356174171863027444609318587174581013257750758489276548382035440033867862584622073414783381728905481406505090538751241875220689543
m = bytes_to_long(b'flag')
c = pow(m, e, n)
# 服务器加密m
c1 = 482672726015229754915613036806716006076642260129806635426051524951305867403098580641236640277874159777058099444654055464682516150229162002580225554124623154306333139528965987023733377568121925639298787524910202698375293647228038401637348840043300494612114592994114826846739418997534533266331053666232463887440882491050228960132919214838580098869414772269859290768664948574038255885199219322038159396613616792996658615404594703509580827327579118956206202918820143950201813032830136816874334265604159328208874650020018339277387996526090453931201217912035821585104208872100366351457196945495377972961425718858461639374372565538834935914141053333815027571751320345461118171096718260678550575667212452943175306977804907151101578730633736097022968611313440971322150852546509142
t = c1 // c - 4 * n
p_q = gmpy2.iroot(t, 3)[0] + 1
p, q = solve(-p_q, n)
d = inverse(e, (p - 1) * (q - 1))
cipher = 242375233721390544711797814056502142588368542125659392493076590269657007395395554615957947047825288839483362496870772277193776263920982806679981868959587379801661146376355877158142671836120781421583090179828808042399544419205956541782691010485212097165346766679928630729724748740459180468956511120462113455891269884329987792572284845519171629437839833233846524162206826676024390947348628420525643731556530458081311951948001405107771837695546091307301739536425644118583018515406239381640342378708089806543279149881425724091698626996019241120891164181419471342534419375868850422083269945235426471044992783910251881811088273191796277258001830959818754668160281867546144177420152891767537956150711291265433465453821155355180602795944827685791804446625750789925002808065454142
cipher //= (c1 // c)
flag = long_to_bytes(pow(cipher, d, n))
print(flag)

结果为: 在这里插入图片描述

[祥云杯 2021]Guess

加密代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
from Crypto.Util.number import (
bytes_to_long,
getPrime,
long_to_bytes,
getRandomNBitInteger,
)
import random
import hashlib
from math import gcd
import socketserver


KEYSIZE = 512
WELCOME = "welcome to my funny challenge !!! Can you guess right 32 times in a row? "
String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz"

def exgcd(a, b):
if b == 0:
return 1, 0, a
else:
x, y, q = exgcd(b, a % b)
x, y = y, (x - (a // b) * y)
return x, y, q


def invert(a,p):
x, y, q = exgcd(a,p)
if q != 1:
raise Exception("No solution.")
else:
return (x + p) % p

def lcm(a,b):
return a*b // gcd(a,b)

def proof_of_work():
STR = "".join([String[random.randint(0, len(String) - 1)] for _ in range(16)])
HASH = hashlib.sha256(STR.encode()).hexdigest()
return STR[:4], STR[4:], HASH


def keygen():
# part 1
p, q = getPrime(KEYSIZE), getPrime(KEYSIZE)
n = p * q
g = n + 1
LAMBDA = lcm(p - 1, q - 1)

# part 2
_key = open("key", "r").read()
key = []
for i in _key.split("\n"):
for j in i[1:-1].split(" "):
if int(j) not in key:
key.append(int(j))
assert len(key) == 80
assert key[0] == 119 and key[1] == 241 and key[2] == 718 and key[3] == 647
return n, g, LAMBDA, key


def enc(n, g, m):
while 1:
r = random.randint(2, n - 1)
if gcd(r, n) == 1:
break
c = (pow(g, m, n ** 2) * pow(r, n, n ** 2)) % (n ** 2)
return c


def dec(n, g, LAMBDA, c):
L1 = (pow(c, LAMBDA, n ** 2) - 1) // n
L2 = (pow(g, LAMBDA, n ** 2) - 1) // n
m = (invert(L2, n) * L1) % n
return m


class server(socketserver.BaseRequestHandler):
def _recv(self):
data = self.request.recv(1024)
return data.strip()

def _send(self, msg, newline=True):
if isinstance(msg, bytes):
msg += b"\n"
else:
msg += "\n"
msg = msg.encode()
self.request.sendall(msg)

def handle(self):
print("Service start.")
START, END, HASH = proof_of_work()
self._send("SHA-256(?+{}) == {}".format(END, HASH))
RCV = self._recv().decode()
if RCV != START:
return
flag = open("flag", "rb").read()
self._send(WELCOME)
# step 1. KeyGen
for _ in range(32):
self._send("round " + str(_+1))
n, g, LAM, KEY = keygen()
self._send("Step 1 - KeyGen. This is my public key.")
self._send("n = " + str(n))
self._send("g = " + str(g))
# step 2. Phase 1
self._send(
"Step 2 - Phase 1. Now, you can give me one ciphertexts,I will return the corresponding plaintext."
)

self._send("Please give me one decimal ciphertext.")
cipher = int(self._recv().decode())
plaintext = str(dec(n, g, LAM, cipher))
self._send("This is the corresponding plaintext.")
self._send(plaintext)

# step 3. challenge
self._send(
"Step 3 - Challenge. Now, you must give me two decimal plaintexts(m0,m1), I will encry them and return a ciphertext randomly"
)
self._send("Give me m0.")
plaintext1 = int(self._recv().decode())
self._send("Give me m1.")
plaintext2 = int(self._recv().decode())

if (
plaintext1 <= 2
or plaintext2 <= 2
or len(bin(plaintext1)) != len(bin(plaintext2))
):
return
R = 2 * random.randint(0, 39)
I = random.randint(0, 1)
cipher1 = enc(n, g, plaintext1 * plaintext2 * KEY[R])
cipher2 = enc(n, g, plaintext1 * plaintext2 * KEY[R + 1])
self._send("This is a ciphertext.")
self._send(str([cipher1, cipher2][I]))

# step 4. Phase 2

self._send(
"Step 4 - Phase 2. Now, you can give me some ciphertexts,I will return the corresponding plaintext.But you can not give me the ciphertext that I give you in step 3."
)
self._send("Please give me one decimal ciphertext ")
cipher = int(self._recv().decode())
plaintext = str(dec(n, g, LAM, cipher))
if int(plaintext) == plaintext1 * plaintext2 * KEY[R] or int(plaintext) == plaintext1 * plaintext2 * KEY[R+1]:
return
self._send("This is the corresponding plaintext.")
self._send(plaintext)

# step.5 Guess
self._send(
"Step 5 - Guess. You must tell me which ciphertext was I give you in step 3, 0 or 1(m0 -> c0 , m1 -> c1)?"
)
Guess = int(self._recv().decode())

if Guess == I:
self._send("Good! You are right")
else:
self._send("Sorry!")
return
self._send(flag)

class ForkedServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass


if __name__ == "__main__":
HOST, PORT = "0.0.0.0", 10001
server = ForkedServer((HOST, PORT), server)
server.allow_reuse_address = True
server.serve_forever()

题目还给了生成key的sage代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.Util.number import getRandomNBitInteger

while 1:
A = []
key = random_matrix(ZZ, 20, 4, x = 100, y =1000)
for i in range(20):
for j in range(4):
if key[i,j] not in A:
A.append(key[i,j])
if len(A) == 80:
break
hint = Matrix(key * vector([getRandomNBitInteger(1024) for _ in range(4)]) for _ in range(12))
open('key','w').write(str(key))
open('hint','w').write(str(hint))

还有hint

1
2
3
4
5
6
7
8
9
10
11
12
[269865700520122549144762599745168447135899292447636617756605602545212728167797447445787398106779613741477733230173614340453529478006749280203791219240495545320784253247776438152444000193996715061172344898960798274898870276035746116096626771403981985377907323596813517124099024451197742946526103390328807831246256 351825797459362105605308649037214670594688383340169438930434420259269928275998050547973935801446674821508093953928259345972518243250576886209287947085399150853100589302713875591726622523078239591200598436879752732176246887916248939358959982281252327937943016323841545720179709080112518678442049362350981509034718 263649494857153084116592322640026892708704523757635879704627428861744239824087544706911427923497181418081141799670872495368713195091290104184732226016053955456080069924363050718931449355663612295983210728462521014504883613920516962136372253488247300322354664463901602570541318156197056622985692829393446426824638 453400473599186415430546643705275038528777172686002821040599810743439930425207458033941717472852507386860793929840595207225134962986513734506356764693655438618941180687198445634254053696966577360482969943538482461972582638716434085445938134971492342779462032414137699485112547903822163588315191244265946324218228 221827206659930588955100802225668305862545149941640820857015107405314701820405616518433413575662470655465592803570411353938784340140188287733921352831214120360424367473260917811334848500233701311695438235451684226463170984345521338680563403806364662014170986174411732503648583380588103055128943038500134530643916 262203710827134666754393441371926810666786719624203864995763104952378827035382567436334257544099220873788181813028566666315029478997429146874858602787070177245600709015255267085423481719645325028750498589844959751577586557620102816409584289798347398835894955523264261758402589145048117452982723970755642721185948 449549947180605498384084224904383747663117854129634140960197279513891658001908553899154409208608867208695858453347485738326065752599578853421177093646899183717259826566392731977061092066943083219101516409628761436417329565252863717622046112713719560452994438641997826306366514591051557604666293190256180831457338 427882301208025139610114439882502441914598510240693844044902667415035988021658089285061603431657599603331045335448467272333422417626837392018638001129889364932929941669822436427404546395551452209585894226820734770968204014611476942151983657836762789688274393777314450201198374683092768582274185754609711412304708 206110709892941001547312247977630809641839341262123534620411119329846379553052343003462513763026898611550676850103678046155244343919504874675861711356256906122323272209951451243624891037181757295933079679771758786258823164385868611152404813858000740881052355543339622168479080269444970004478675521293416826708518 376172049695479754397279304655900327678015926783104795566699104261135819399512659621342636669298191140461316867639169744791504345311783942430174703887150776382877123936598986072421903671214609751973940119880560010023509512099294872489902196710299820192154670761462699775769831592820505043876853866377139051584700 354989144495191036439184720296945551786270296981167948019894874956969763278354891643393993638515549874937620037229446883785428867336828993393766325205264827014803398207234817979275257572341689686447010646631351076260136309756747006523828716693825921688154934832911308097472833298941167446737019496978821483004142 247657418221571455680808477138957290356931207729656804527032245580960429841816418251851497488948400261671314674513219816337747752077679968835580384381624054897709324089163678294189901105831869992119099572932762170016838924353956530516871378196167792087986296536436978303095420850688527841398649861755287315252914 267323214115576739778291260842843721623810532694699738318490243647729313782577235628052607303271826513284836885625483822163201361517891012567791817503099871180988597553316105403148790626072424557099203065132199859082058328832860860922184801132168393385984454558438841623269013769064186695669122926428112192958058 380213264649117070874301733758703992957052936843733186492527715942930662173593880870634301175054838023249481317633718679161000064110300930539209764959721575720322049712443403460593162873330727228662863503060615472077497723046998024646756953852274720572607225890476747502455930116669002121964715413052946067842934 299711354673898453867309253202762657296007144693008209662952150647212243688991887703988087318065032988637761345182760379040409182402949915825642302147237357969028446441002244872828954397547768452078685431997252342287035745022966033862847782615826742413561561692110959439029229515697207807688051683325604252733440 365249518697738703288761077464962564211784565489625880111214981001160495801883728584481549266513708874054054791287952319568149514368408201453178732248585813844809011050888061672886805741661833747721896023077257558372204817368398292194245959048942083958342665661675547822068884852334483336260109462386159088016564 234545469963164507706928881332558698102265602045874001492102111685872459757456367592469441102854212705510654825387325257074993658404998100908565444353109631283461873240676108320629040289352814544349197599373184745156814420454658805665114789039742029196643533194690810954176812644128288344876173839305663050924382 403528775485460422299177022688931715589694738265629775672770507924611837945109216220772816017023088114143940075372156298028685445638442326378577113339902407365411497947122572348948969051001772973442806880840187883877046852394584867407634101961472289147829591393511113697557028915654508582063486155060434533238994 257705800389350838171655930137607990615821847049495140599547431163884933722120908882943391518805467092890646138176976972348577478608553204931604995997522105267077845561071320509003102531223852713962266895091989335267822143524572493690679315729733459055455391559009207758735308530559987072982151466476819761020810 294949037304356424643319498923044835942305224417122064436278068994313693511819494043317635677951522630682156447848037907726136749360723795280554225964785571884704746898469546462623102938030066073650709553136937483623297572165996272004599095405260872411154410637266055198871382378758905668626258164495032515036494]
[217534291096450557418605644329012201990988348409906457319287678554915925894947301861717541644670085607409235030173401559150664390021730839885707888404987638847406390129353689271928708526356828238643715318740422146095140701498238775116704950720225577726668847683499154400939600609750127635123433777452322777505227 299985741024239594894449078286932412567756086541003255987190288861977092270282614087578628286408345564778408351869829222184480350244263438562642836143147598451076082486921011240502417579240298068263254931979242127830353349341014204856656884947990874174425313394061542099067174524956545137639257473364416433658881 202798307055619603766849973722145880157913653763022075733739076450676579422515351434937835406954615276624274180127714975408416717925158095809144438515576641919168824386041408539675535153571509996509034452563279153551561613043824473011875804430630058828272859506931119823192349545016541214481806449936957017139624 389310826706777274276911050261903604293890010616195108559326393397696368170474525732224622570706077939217279951515243147950244123347990622569516155887612174310555805572560188840523261084250032644888189570384108432003910826060308095892754475947207739390002921110221318616334502800034305012953814034847609706533077 203750320520032087070282509875347793385534115831337719800765070532648634372576282725518814470184053436812961567099199811932106843102270863860541469755649705183607691967165638623921191767126661879649518715669386777465488292371025020507624829918457270108829202803995162934708154191296070026531568338961996208110048 246003199342064966386401037705588240768208614981963140051279769565414972694797823454998131744842783649451891709418306504304402320537094504325507991601767982926463576218944515469429112620016175469150530949871499197711380790599877680084689037713630817667894785846039010935515297139556217795662789191857699713614906 360983300970873646446073533403501696580355055785364410317501020679519582788611415310963465838597845805664649316851808504517843797749518292830980215171622621205159624652891327948407130214972909780527253992062663110647664308404422758392098321995110552691917342836832205721272403286917597580095098651874548339463609 346478159177074963259437964339822461784513243998314962408004959068444112972399676764212593817525806206696987806792468658850901920767278509883896439165614652876786381976760050222499515051926465406141723351617158818091124821399489777244871029721795642578077427229441141826850529088908985846490867396362927716688286 197680206070014699231490316927331366998086142378440815071078703634573654593834598808270372452579194991910383709516802387381321088452153195316819182813413769785059291457162955350173538937816599111850170441571471496544471904660258742954853421171917854504086402083478772023209931012965852218877947283611271526401198 296631043850009203419659983311930573809629678772341749062787393964359893718109467046442662966026499706086545142255043411998881715087081855677529672395960837029306820222658456378090669061498322702114290385701430783075064487069483669145205939951718863800735708637812976394412302231844870056666133219257739430760968 321543282348107948350055502171575639099268924765096431063152442639503890254386857898365425346040085065342164235914627880959686478644492435471757717113325055833119367639694568802973084926518805729154508673861270707498771559300909198595446912306988975584592344283489868303120334700133625162045848988934620901461993 214090528273468022503375776302079468133087404753811502071599284693445210853001990757698700272812877965356697610518134538252580290612007704077116620605771830925281588116014082867148479841483602922262335863005345547476709431441732010439590493281165124884438233913304562549722668416689677460604919567354748221404912 241666077951781283582896942380640928699605206380583388225154069843486416875463645685615141884324888238571267442168839137738716812282064922917118155079159799172960314190949527320951291443101285486457896072320723881914696200889269442594897784837333018264627709588861917290363567254925451931178339176942948212636593 331850523995675825011323308492275338141722763618064691292454731685667611730544613778991298283594068778593758995718897816765236585031069054849658916057090995272321201320112154704829503887391200648415314722913437246891924069059764056730613895739014825034117009201549557661098644931414323511812539461605865379692343 236042766580184732222601164086098414706808846304687002421555113475494060741427248441203801818487899323318243934592488266037957100672575181087996578752812885684103764241382853949521333940929405218935587731190775960794457147897483182129284579880989985743933591845677123125316322317886170268589725788509218609593244 341763544218428372748254816927796249696395728712218602447558457377380952562503982560225546883279147440590074311597484907080666223477792382995535855123480939311167761645054470862443523464710771074985050799640629285011724074725425018257237732707998162820843655444807571674179160109826392342290622155152526257265227 211607090982758438628935080173138052993338669471937123226084916705798928250527009735674248881190048026583991630958714245540055922845019879821774521306316231739876967123533161088937817738447627945879558419645895780706890780008504738673797440094904764128301197968226753538270778926330396046724466687020073201891134 353468035200784514632038910012415545085659045031011250348642569916845051750155661624535765315386371885057641641219421513561327099984118295635648108899510203857714467400528923387597512643281613982061904225310223869094246373173198490515523480092904333746235819322870526818300828738688985039204673835182927431172587 260339807090378011417857571831489576132261101738739504650256968916784012340260947244000429443283502012231205932924952416091793950739605889052631990460184066349381284668933774868501173041464947967135870247973887882126594777586714134883633276152142276219529499956074760484970897654417303880631112629397993011077281 269154968451127052630262641315485325223979622272464224773851984019253984786425576797413014459788229026167475768642869432142187813136915392188127172722630622350674532909602881148423610943725553222015853217843963747964806936405906965108545866027403692463504426889608795440704447734200108398516766743882127710694803]
[230500872306222307001825875101395641532927440021809513056982563510212416782216053058938283419144048246964827940917148509989045775025890583354803921784661868507728439447831997229956377388029242130414466834079339965592501725398532239961930596571634615842073136023681216821553465626632658844365902345054389313038139 319346637404219736680728003286854336892379991065623561574672500255190656571896337914014867841474437221810317994650064511808905834043624736858152276018069018965342749387344156368355256724949932688360634582111559027251177779775031481353035547492513097485684556097279731089085659030106759027672918474091395168578874 234957631420970441820984646090802556610977901703319448395532916876941066380222140695271048078996963810899891187648525594751146463854168125827195189406794729082962547465178629891493490925251634515054139818052338516373584876651147375811090892169629116851879016868842240486293358556113268007647155607145360557344409 411159806520123046533001645015422004388920814325712411496309073869262703780418414111023027132745627711545340807954152104569382960186903503630242932622809451559370654328711458879487536767627170725696263426877646412076755018238087552160366162020763171921060084671235719184157729375796733229337263074628444849871477 218022932188513061167495981218103095470710772702595412801217669828953834875023349287519621389916294297267211310080353911456027126130140894991555523025581619415957884476931871051777921934261031813240799460046825061579942486274420802041606635038675165682174803265989895433473239328041627604173532502504270118932408 260662424805397985005189891104002572797182747874375200867946211546195982434350940517327133205152494880457722492985582879441227154349179431988225448302417473193286389062825781311331536646927719794660730412983817706793885414283832137471479011539923492363834359680840103834325638455689973259863750543596416390338902 395777966895020452594378072036143782334452650322689849378441443018449964592854134951497008147431095151062086583995389375861707727530311071811384419039852105335962813231767516452724156701764849736010488990406448904696156240056278064928471311302859658447912112615653333999841365194430973112898020075246356322538318 386955932162346587771928618272931448626492050753771840404078415136854443611669701947443563013092902011768448379790009607374010612731087587819302699095270552237258793534679735602231407804420807964442201449903352731720280074556201403511201076563286272663561894571104850363510342362707278510533018131873807704981324 208036780828782987737063274188679595121994982276055014197591900582427740596216128991690117163088804991957874317050675936704015001983633888289029673031460139042623788876695621443105631886649749091546878360347864198963943910413848194749494488931188085504922302699187333663114232736863882347490926106029939205561829 341589894651050479531036917174155733919462609215507347999563225035713382382200692091609499042988983238564772822710808307419825844394136850613004933138939583002433506810158689961631012224226297703338922353105047624463884521053809891117049648442342516317976925011623754683296400246452550638112958345237565074757088 361372629819847226513296671769920664145819443478655564486775439909024250835739475565740387353131648256820156267861669177846191892975439256809339192673526480188944086118138055953538700439271466926654910978678496031375725168911205682705597796616305863110064180722285891255177456256167458499046770704113628211768288 231708784588880631526684852667610873117487444554165664801852237683515457377335450178781727108115629923213878999215079127159007887477542653355654992059772536370228678717490415614576940623400997504422073038065278536222799144348090177878546482203961046921805244124417170911606214521134452087278983328048332479212633 257235139565129234499042727583079214642841214582856189527189873119887066629959079586669035344941646476645030009934845390987766930327957701258179898162908733608073211460576776430056800045897025730880969404634773143876871807586943537331692983873858248723886199402160454905126949738368925348623283312517526591695752 356020430268478880524797818835686286994214915370621922409194366447198224524932467208747517052467318622350623632154333760908665605417010030377788773367908353337247902987225177123395582283364248224939607169694882975658160126668840991035137392122637009849659397532430790961051980885405244154585542485553311974099244 254225250527649628082877884339906179422257819290544067818197505372210151119293014878871748558301685102937530147926809655160495972224167209766662254054187244984430794164489184601099442792388825235100048798375939489261780456340936588813171965717660616088598785157593944806423887132425613418200540810576661959014604 355226420187757326809206768274119387711588033115904032980817599953798687173473510216984941316130152592798434552915218895478016917055717113826113088455414899485371296647249196600565096432746955149339273507771306137301727637257330198023976364348847016715217224842002123311454625951897874150820775871818136216576461 226366538116279752656341822501419807657493291510341585427979495028272788181888145418214988559269538107541089142690476649099623146281902619554418525284090015388915576735365210681623206570071194234608076890305304323568065781623166549612150579143967434653271036993387630008944774771317084201577842144142605257711789 379361101594183194320051157256291695648816154681350290397853223411897749826316506158706132709526031473733220390200149819880421461375942473005208510552966132369930357933817031012133436058108644107820964506786414784437708593945666069399045141034094008701434267605910603695829807537241738316501763751855506523452998 260263026117153931157445602762809787609734805322533947091451577078053683780698380697146037341725217760416441196657984950873089029645750683667988322226901441254574619049916654767502708904384073404538891924059487889141553756629885540154548261331382654816699774700463437719775308170915710209849719868076739559826318 294513137327359822445559900278154162338797334209712381785463830587230365249681570469647502193559837345608592517462180241084136617761056542083595083625828665506425175724190844559447492339624510120098445183252772294710137038798667015176053786088400795588661962971811578424998618320047008511247583866184478578499222]
[258097046649332123822467811465439621220162684890056534228529304115290040200831339183348929061370549814142316561397669245981450300412274825770881758742625277704363429039568923983019117782192796304554268618085789445481491288169398524786358166201091375721917261328722878631393591271974237575746452838503203776340487 323044329288962081980829632151293259293609865523333055981116371298402955680942234093697119616443607423097972127453658771700105670546569673109807415402848091721988037413307976624321782955668826739405107274515385681771058021107412452580877024344446019752645997039306429499591991731212695917832990281690960038942948 240098445413308968101412069891968569616875267465189735403222873142327590701843691134680837368527525762864626633416239430636763277941392259833090579384708617684451758698876562803119900504933306185880589743323787880248299935477107899252190995378319576027245196817150474173651719573944797376151421670288860866316700 438185621960104118443780994842317492398718983830421796973463024141398070871425396389071474882364982973379098549919678338866229964100826477343622850012688029967448100549237392542323001036628177205873005350082304820339985171072985884829515533516115135864089002830755156194331342269343223144025674365035266671914291 206785762586073193761321768271456794671074725748102953054599204948390834388621677816953569526584249667830470249591153643775350429559125647872404086805902717860824131270716051714743975954190316065124751942095154732815677180910550803421796032924099505340944196421073151195879303784317812026753268872178148358172455 266120256610108877981179580856176705554261176883719838019405593344703688032714840472278469506217013515514255683261858262573895530125455960683253594664912334647977098873841550823973260407940114500621844089445391281188475895392877389175977426463697992366891940584588929975856788360155822183744364822541347695242314 427259963688540552946031233846018077241925636891322295620011833667322844416049960740180858265808935556337094551082381559798689081480138214474599763458569997136416997854888351533636232880239722119675871537747971869936591271948585774274666201783876674636664311296679926494394311032029934194184169164148601270209697 402824086108237678600789571227311298208591656327241493019992497022814693193086482004568609409480546097763420215218154211029769119028876172015322831482022025202725797741358704537921526865067418849578287266138070178892637025209029280319597652034944633328928112096082851818084918323151669817526778528343345872240253 216359109709894151187123433929738261712433246932432325771423795270069876567890537017873495572909955925317922167648505968404994034737391241490968103251633930176963999729874644055426385836736199904931071232964046711730646854013982173960754135830558545152658153878836263258778499815509629684545770525184693766653397 359042856151353106297876428356375402899244999841049748959342598693583016655354068756633772485810593555224930878989297328611782104374620377109241843193443024295110057342252039317345677602982735010109047515170320213062476638901193545002992255115272954758342889384905170631966739146922761600254821681971945613571652 352647366747544437245522881062960849861007105374967373729350657901838652975995684474837678690265260186588754102587951432596495149847115792503365676276792660450758602589908819976549316180723470002631581023713861723102665347555778303628223301328509425869118098773014385147114902252009211078458530633236852721771023 212151224937878751258117742924576383722116070991864585226692916651928332250330593822297061766117623986818871868187368783282279546041806876701754726135150388559598395560348153970201576790092629346192204387797861892575323470304894156350866944248072075266286036948548164632270595142222430233760909764492678963036266 254245835604575332550494474245088717561049139474720410153376213694029360324093008280672470948671008718595536375431905996906107430118251917548889158314424828685226896019204868895418121257068962845493030374504019491791890312897849263588879358331259199339040074030343876759738805248961684872422441105072286940115265 406962449668446297768884451519868424326614373259530905779848196180884858864677794015603023934919561435478962673551313676612601797048493405639637112652318647250402371051273940300538208789230914297153512799423147281289939001732354197075966496255570071645473073725275079122946002297693678963485338717153485059513907 266847750871593912385507938486378901122539037964092090019771158728103831352405898844420563290665913341924262469687335683263506141418177239462297192795941708753314163856777358222639931459227106567887629451090366538238262038185483901516813721701290870140719290542177360299904836287545176504552500152589011552531651 398801750428523663427621385364601257620464273066769911128277400538227910787528374934585784832883177626116971588760815870505704597957094250417123357657130183539123160761936234514182409390607100826413188932295994705631899325156115792260020783339330682742529466636690722035513141495339491325217697764488565422354276 224826853007331401805750940205521326524185299741249471405689485010853469307318081139426219104820132496466477199123588627211297280639449445890323110898448038953493455576751196204027094469560506580159876711003417899332679283860069498525047577973153876155617917403857457501195222028610648042186981312644058491993341 380014419199985329419713671928036550119037256534665128488511143546490651258949525878180319619579976709796895824189734091656024491314853459263447377051221983366913675626517565910281369176546192863817557789004670024415291018058626383066358523168644994297051065787392101280217237925018014622886883822233479886620146 281289917201910723000679353084429735856597488902397275243085592808219428618511114686591719496189553681028650781969424060872760927344927363631220555803963845076242043164864973247108042037591961651648551220306954644131005248746826235352769057237547370382708157206335394122112282397753962229519010894276175061702889 309389371359395091097171202994612259221611454427786472867943987777068347390502531059685907277677630785364653871955586064180641888945830772969822776008207346418173724583649079780914874848127352372785354482296253246167328166241676284945672932226277975454387584886542989540451812697689789769404293995340241208937910]
[280024740134670004212292820376348124332053982881133804898565433908611163188412762126649055101144902585459386236806298938487822687193204080177612005843705236432150240762380268143162417176285122546000272164740337630148052559318352679563299853593086159828643126311546039499280101306371850404662401895236209091027255 357585885045952206380452871667426595632765787422158547288421344363971441271025192980619498727755022718500837991560659285221223512096355327072666529272207941296070883401913203579912929482435456764486332296646850042541597047535068875430750743203725929940341511137888017617312226305708977326806672713648751680242138 271047453021740004634754093390980565804069818306305155066415715350963852857843150771744442238561184447593029575568313067588756339470133925870456072872116947279085134000658360007770181549484553046044512106088498872843407890789192405327218192149622062462464433775091661769017758646115735097719763545639378071736792 474383086072681226050413237270694328310982948868507317605571493564280066556390896106637881058002361350015122381827272715995635723575475212112349567943614950936072293719009933430022659586054891898924376653418852075707051862761977791579979231581554480516311247946917584375863629928831489091096422039420317764589408 228662016104316288176091826521052201247669859864847891951698186436064244233720804631843553321936989266243567640395612884267194703501176752843068243381136449620083526135617455232585470496704249069634402309099639021939344821787776628044805621278981862690864864485780508970165440295036139399671411313729900566945464 284079421184732322434037716733526795728951031546499864874451524530635147361390761590874733863468879976759898508839609272072596716291664284315275796361037415324290263021289348764583840156391666437133740953927830103663941881696496327799045932648320504534606395077386071595194158555025503566884862217985193147571175 468555459958317280859929297296176560447247345076160210710681567091010631429008213041564678658263407141604372345526269811336880858199412930287426253009797751430480030617552074358884349733972444611819036504726869618721649801368230838915875667038424755558551679421680219753750697485532117847870119607206581182502178 445731574200512974501474110914379431812913941657269270719004280615168409726027702663388504167816291397711693332379006695885472184295799489848680446555179209243805173882567268637708319401982139155673739040393413480167565713735137666252672951210760069953938211025111086884365007546480915113024551127587793029229623 227835320519961005413932972778768138176707950009955708792075658451970826118029589580981725250641829522400788832125802852958691159607180725721386263058211867141836491371425900935418125338557358493243302186663872039210243551694043573709232190176400032890720771950204859018975358651555226406782429079658457886653944 397552585299433429396678274904730219988432387214151872834999413367461165787747726054535434756370419286241489137977020409345326105541093086389574620429967293375950522032093026959162159272540347087736974360594266428616751479181786330813127277701030848572399010708272792563116738889734998957338054094719843521573031 385053527936378864742881757348466257931007364785817833546268011845947772789738554974810970504451814706701541755139114382632675470617743648226244052073476894843695599812588009547021618777110572331672689952341923152702756592847444762978635028484188723526530112545586523027292529379672825347756797632908839169429162 242984260544455631059208278867010538459785698364205302900843727056276726915892162214228169762347000356682431053520797437168458767384469900741267789167070878282068921514555976861328148815859605662879914855792182177714307726846679640043146039072745876232260377645155453146141849419160073260995236972774340880190355 278248853957324787015540831693114810167864275342164541862002825775945791697751872085403332134547493678975151573680868400761468197575426232179624480553348702385836786620974168258242105135069584080114952448122270429974891337591004926600388914234604652594513513526117223776042209780653268653515871460106454167346871 425698874573254729231279880364408765587716835453670833860555799190874210117012637877134664715078204053110092814202497817477106154080693117668201961841947690110226238438290656184653809729996612268953690205369568070810685977754910219582791113267617232489022187671745190635361065946027284648876615569308924060759347 298896714155972796293718777379600116852061577224369227360579777043844174698157632228606020274355702932734785630575867328218154465007553167430947251023114925089236444974743389860595691535056672977930168876322541753382235540434560394747829955880147984600272035587254572880196882621202960031064851457415396132794493 412092024487041728712375155049158511858543937526462246768950573273230910115291148149891099120465155558591032175754572138837781147831813666565688093454686410096389851535479717346576297763287460079702790955258093376001569384351344234668582883963823133011819115347998941899805879522628669984537742486552268056852412 245593500517416772996683929839547908554315644201320733057384943202957840718550074940461647083237207782560838397614402078915256632216922242987430632090181080046971114944695991173719523549269334282086441901341771596762915347406109067105771749135037206944712692461137164950003296752531375988299522805694139611881274 417819953001341096378228484028719147298102239794372124997252084007875186256067660357694779046983512630361499269532610915398124753242141955773400150142737557695204539689680116596103690336388593485195484267179798826664303232590440911318895840934564463183868996082091782154810313196191572360393516696842248593758430 288593776118040616314766171352332182970917397991708526167873483430646926814369572449138075160876531006670010322754346127162592913390532878110516266780718165401132833183550676292105370645810584714405298038803253947481985465122982906581999540840036459990585623825359327735633867462892913211425824393567032421830570 328484441421970917256772156408377008898814832472624264081640534401357040641562205085658955855030111212409210153800573747215971593149942242637937610673982096571323570013781797984522328017978084674968963884240025718649195662365143511884901590431592571684699150088131358361668415906764288279386570665594476271529949]
[234941405478544537806439902602972109793256140401749807418760066831970902266784804135415855605558499988879943660144800777550252241375636037095595041552441375028547787936573414837033172529784314934826666166985236289941244475642889131486567102498766410483366965976059092283356702767106747093782473323132885864765095 291677502151781697169396805704790537452572236739817342348977408565398480892159044347789350385802650922195045000403538124235427732746451406657973513326525946903495596864917166525269397421847882337806230380881551838477833254258714384141045983126888756811493191481588971746231257100162392160366136492190032977842859 216569660786775015250064116265258102160811424030041666034800110963515922515494438517639728219229483299359989140925260356181713747361917657316667478071947150461405239889431920355244401518095468525999454907970927340166674062072546145973075589076816853159358448741031038118312758449570713709838718916497867239183635 391847464394006542562367709310575821012995508588057806291886133197507008731074962502160330963881230763304548557747685394226579847084277406609930737878569806235535164772734464915147738070524095375238303080739544539286507809953726925806818614599071198937538129853259337589374727067902351171347572319422596065585538 181647270791559884308461018783145677855209469257398612256194191154520961648709449746128767894642800568538851564980773362193176826843636790538652860182573280928136271576661753494016203605706892145621492961651941268505383273442113287868784317068209904092467959555929627053999464860511524624478047410988243993671160 229602043590529214685792361103915277729194233162313438434518448469621755059067514515223847995622626157171199844976111768730559566953264611748216471619431416616141313673911758307565105081355692784522521817054418327335900641986796458079766433053765783739186115397838135266923101553641744894968613070191489109821873 385164843546683846585267636759698947967010299010006672450214283581302184481023065740607519923065905507221930345996078875528895425997897678890419714478019452024782392688574841031639835611632230290987542076476311240955570192529401862936758824302182298614684225788826251404791021458824893027042753042111039981124991 360531311418336609045113951233515733190379507700376677886624697472286289061843162130006068680170713617123987989017895565691060790138614933808460498474110053090591208043213602608191819619733175883238345242242550232927678723368441905268201291886578981064419745146701147209044234505351385366181252144309317957545399 184894110101495577123261042894168255486446677250949566899806753922724978372093795827924135187258861899505856078497177382508628691215168625027950732472584934239402780979310186086034260981159882686430078865861467903663080701714646756086149278953597220289484651062884650555523255800389518825556121587128606486492409 319181497043527414147252445701707080083228636998825169711299385295267468322197487196004126341001328066733975971672308570580638903742793617790504554511341477358910999031097412574804372827385286976774777911276197925723993015061673157469926661516471343052534590228091340786226161671203299799563601725490781868665329 301311328473247169347984463999517510382081352225603630925847318028910115417604878073522635599161104941463115734455606530269195612841454564958819587736230271236178945778072728928697448985291550949664077332183562429073568515133232704943213437359435567088782995180532298964022874470776843767108011479751577546157341 192317094837872650600497967599667693434094097144071766794240577474084025875931836567888880779700085642839571850442431279655926758354965138423145336538092380858025585912675506420811657644207922840507838794124441107186664986163668319998576318868650405348264861967654159749396167945322854624451743349010564730898112 224059958268181081693635305615408576107433752030699992559836166482654674882770082939176331700135990177151006248749819923381516177631509575782129525368586463630836610167988709884977173264122512515454874376842400869278195832555938445526482391763001536056233554083639398337236581706254496889384920624565322036781200 353261945928503194570154720828350386853786352600901034699058776813240687888523747531385649416815561631973609720313335537783653925036634448473773636441144446962975794168516048008638119286920735207768202802305299718303091466411511632260056502947646277658223216019072713781182246447747127418797104297768924423814202 246930295423566502357206924807828391647960834228475446862077406361770140516706973015128062283531583607146507629472512152884420019929919921602994196458833122417564602125105754555592519800276504273484184002517760439050779153082916774730678953472009235590731664672061092646111798232721440868903533261470176860697587 342510721749803522308183274561448212075736303397755439571936575056953281248256151345344421713479320035329916461438735743159935798465245944866424331362543580483468029571884649072949472383694648861724656384811304086214753441328785486024501095422985189406956027022688945117139941604054246476668582196206818845274880 197557168277644910681244382655458880014350776351131459299229511340627341640173620168845939543244771006811766164164899726167454506104108254267851633165134245452333524176339226802054545228418274878271453211179234815753547330515826759597177430045653632763140178194956557396920142781089610484547938756833172449930303 337592856479567432745846196953880480543941174314591351553612721500748735433337069600356474726004254646869420181617057303987378961818708370819199683252535520173442608414076303836521731984251352669567733486886955711717275255750049326569648779877835664947552879104010021498191608353526116107345575213681003376273697 240062854309216908975812999487578709309099550225867237253627148959230503284495114763077522787812628620034245271488098815465696197844412670159346244443623530004141355429450336021354900817696443161378576167418951023809590645143641816815995754321969402789050472734344796838099375347113806626392844870579009848171215 264223532854544506222243514867228543175887221694656905016597603651018159647499125522388150398442571985750444593456208934899882997273496217700045640611080684802992195962470395828274925871895394225934655523828781673809462849991776921806979586417990675368603966821693233422575878620125759667142408984825286787061738]
[267868337426328883888075916801044965399584652571645099528558844185037509408970719987065800961588587254447252991352837535384747745849773084480995534981837572630791932111507785257631468727468232469008280233557540930846008279370386503690296982295878338569034056518790101543621842437025126181246485252569470810317747 335461833309323380937036816131116887260017914352360911897491187523050086172268320909701547327737152435938267519484289011063922933693371791939789611099211400943970562837818922898241848909610839056873028164406551855334862982034686396802011602484434658481699935860020943126723183901671337789670554794899264777892225 250927982745633295638197948301800976195219831472495421454445757253152154038120274295242973259237197414742157518851564465970240716416346255452594282008213966393582662034891180608118004681672557514910830644462832215253152589827038438356845433266726397708601697956940297905889583012145097499687107393251657033568465 452956575843689940549488705167817302379253542950146438400061465615324334922108772421036195764143745343695963162199221693191134106648009626252713648633236160381704053806381936592693961219745747003054158832649208097398493005989562394285146025654381827750006711461908814632628677638652848494919079662265902543511328 213604032063645184492715249076918262387277002247114686389635677914856707160293895295433623621346319851888155831324703563503932589210399432730821082466494535584599560476105460211614418954277167531353569564506834303325102549795041270909043564698699022163131362689377656687196820955168853585665471098063661392140650 272815508734704191088313479965242735162702800151713724726696485173858262504895027190094852522895672448850296988825639666742424480444986970747093768504656185972461596266859053994860289676594289300403822681868119327318378400819038071105397869672527445814299624750891780239183578130336577170677301566532281833286507 443832425845895059804820746231889934717604084483815658116085380335029403552551526752472065809341477704397267476521675161154148355947407929731674128372623781358484518549537409127728983613482951753908308609371042549187869006464499243082386421311989002601155106263531960231192551354455993357840810549214437352677939 418655063255146701483774085511629364175264204889139292649751282555910436713389358030831734004609955748945214861821715792987493285832096676416789840785320499096487683232602981181163384715922173058919722647357921949130661789095510407860276696585651313918951456286309729350679386976461245349315268974096746184191655 221012983838096005851305415714631043914717921870057434256087775580785745898956049964974241524091614679910844905037473779232599859435964737501019845405828410424527354839939402064905687819925712595157224180800922617138652595342384796201689716543616155314074963701750310638484858593032626427241681193036405928144417 373262215483568360111784846962467455649246410286201574375592044375948944635700667559602207106815946833835175999362477832095923364399403375393185982433689486102813415173072525470877467707344331381713380351648688592635796044955824730860724590940542156987482400932902547941186388591267101320632218925926023817522935 362893831966370762701487955958451525129578574669656767184241920974289080262262412739638309011864325908045640541708940578971101511222238655895676524890729265780078903105605093558026066419273233496178563476023512243859605937910106534396636434547295660376307376399585758536885648892470319975607423967286115211726865 221473400005361244441969916371109246276608791410243777580812933511160546827970264663127141442719899173661271398479391235098496338624757181978159001075905787020834384404047025547808527354397676760233605305510944786365109454710087732003476382882849030718627106576481654745376621985538153534484441262158653896764312 262442044246966641743994354396430786706060724399248127689361771936777733534046150324967976082319918797137314321920088258456336976041077571670817265334291254136498888694639657497269942419741122561977070180590164175530809030759951480274904161308095536349786160606456155694241392993432590377504896077179810643939018 417168468787111486443672222900835348041803303696297561873957496037275771776636352305641075205072155019729402342719120571794975905146971199151369053830539605532227403588383725574768878970638920442510118428475319575312394753194339880698956683100671723831534904581966206430223762788696916385633521257292700441482036 279005323179177859795277440704843039979058015803957229921250533452840320735748894297749693664829781790050935378918267615894405029634648758716594363191439618043892239974666831765631076691729729119919500575567350571386857360508093128510512321920973603467348796248178750894102575237750602701766225728387179212032935 406791804461390319046145657757195265623434920215681269201655398348753211152105608728596617105227288800600417723958186792125995279149104491495267050989631565227584369542772942857626890862357230174748250746537885383618341848532105813700154406888518504649373729464394015205058169367742467011656761073380112247987512 231966396443831126895045642437528214115212211959701137840122893076397658095354059924539868678870145091053204727673399257106006224356541605146673060626318481435388317009336236222001290128651519941431669627139066183661345899145379171001400327269450377430050723723515540738718197468025554899789832804105580235656203 393261511414099183285834039884802070528152817324578308637128916323942898773995680585448912873737069524525240521067770666292258512065397786401667780259130387550686708696442090699134059390274939446705912837264609523952572300222741005060856856620793312095716302125952359445967372851077931059844431674803910651701367 285721048699657917830904201021496180537256973660668662426723043224711618976473720515541440241808949511249096228097146346986099738666175896506709816332358956149172697650784335219720798325025050338981644961805005404418401149545587341841047309562263058233343353516615509365848200858967038029009808817416002999535795 316948689344948177041943198715466034541397713616192147684729172848509496735092786744002732126164107653243580685234047063659262268881806289533149117494157457284052619461035465157085705366159574882652811230002542699609073328428362116704167404922820923042349269074496032597693961306481383805547598078029816455094742]
[208925621634500479936368791790733707700049661921370136786621943080290973004934097209128104745710949035599834585576000955924990226531182170863092173754984549081987635002214645712010172666902838390020580057191001156593413583592145417716795486927508928816072492162893264161787883956701788112547698210996712908469812 277881869492592133533584348008592047704408971916300203279724436379641461730012166534379012556942308562480899264800984988727003987029191865562478443130179350252440028908896194338731756431773263395803834785646264977170008497632926714981794795101448868240770431527765434367096501146992714221738021223594792183096896 191392376227816016146742937864506504936009695158966680565768573893259103115783726254455703228891198264225730974296495444547518516492277372599420632677526944101297888604861663811070909668668285847106286671364907431633891133693214718274737966773208910655292536239827749730352122782001689189676250181635661534140662 373056357146783988324001261011290817990983733139928569486822804250969404663287810229094057517151508520325351979643505259566583255784308546671274359187540329810401789064405476120306086731580878687430571886487018022129970161122379763198933193393164082012874769856239153925184773245768999900007526148725685275215398 189151134426148278256409427071366413520188009676016079450677932819587006160588724353758434921769545666226931230267824305351217541812592065542758009713652120459530385929731704136259998404704062061516342696399828331167326571083479876669555943043053168047943740248299653029631568376909789939106248768517090647048144 240512512228719798356070959926466855223811682881052525290127024891651662922391789865967765496804085821110850993939702912837144062186314942968067803643004332795302193396404009082485618635264558073225834097841413081075677673516551306218697757264380114144493009296066239289151433414434039379017646061875649745707726 346912176048540452836334546034032960285022179236803788438251747480644343259868783485803477823211582731043628357050670291197009221306917234214679914252534326891991085563087599411610179740885924667596129961260429165752788601672169193829949202924835130279335075342143742167829496792703096448616636496760693010632952 331130373037972001102953031643382396979515964662489304624052488599160912795125160318234519866642862721633549672188701928861692419781039403840641254068539850798575561274690861739963655892301251695988981187925766294767450652522044825947072128307714211239079822531930197101207969937023517419925930409353825469456226 196704911547760567284050385731420674598076009873937693377568299640915328091276826164288794904728879719838179674854608315870562759589598280794236610105908731802053119302919824057716122846479842474006011859073682756262425348588662373737717717809493704161975650796417793773383864926652328614176077844057491179246910 288744198187345908570426813950261730896271408792096129336472163819416730502152105449025428248211255417197730015467772830248900326002936441227960684688864722516521525191672054152484703319784200271826100588335140247721191783466829259326414039557724063431691211227913699402111511918673142833813709806399089806975546 314160223766452128579861005172671000313971828439735851393262164809908257282848874122242764968523201114287538447091690854508720803096513486245768971488677977869350339315428637361871338292982643086514218979033892662963486391741214111508994566591061182896746561270891596005443031433846504367118107622229239977276052 189314236510821958625445430297109310134459612061711583414604331893732423721978047783341627397557474990718081085631468140162397553785849716100088347097532996712406961145718960009877973385090750342652920674969693743369930774328443450698143101676309961271021142165188231029831485825620637611121566388434213441041096 227639552218697766618035615326387746026843650066567132578875508883597082357592196162419744534440656044550494746125485842331141490201209016484918296246228621704119958599025229284474910953153640550818632543298036010211688361274429640306899078083556482685291746437500121569910687838704588261871609562916512113037410 341621018888240518807088960299048188172191849234245240565461351612311451713088355317382498839718740283303487813712545677438538191672307052718249730232826087575245580972526424458884227978317230336839594003104736635324065238353876804896463305487006586573048513769652818984397716990022803444704505403150568839937138 216123077597152132543630670055269355562199345931984977069037529561514448756215530084689405786635470262971143013769794858355361684212611373725736278526814079560912323372074535977186754304069656065912163601215527606484677744091044035587999329874182822695884930958986741304204631893956526941198447873806112347365238 350298204021132344257659928097604044921237222358378927732052872008584412852634064984624664344363578873080685686411093410611433994933116392788378589446822611880527091025930422852170519748147209094085814437888383833134133192292228128381066537995036728067660581836663906430414686433434109211476345307877724982369566 200569699342686680129903260344190813491599875824275561995415417992992364171175737877630396237878781295169082420288201968428809514772651346528112268662588646610825249833788236333925640063619265380075700566826814005955004973364289204520681989309350580566136586613470414932749986618410222681347403338516521993389274 332478634383163276191514436654984678626644628860495401127847164436988350622884185489705399320379025473215204548604537140222014597979209029412807609351867634340647611957419248676258721833190432147074075941996333693958169415292190320714238628052320125734309181334383282887490511035825947758674019710633863920336336 261481571288761610800515150486239610090331881249174640784108800313694626026841178466448957106989246864194399955219765857389028396266490104690730233453940025110318346160598377268827783341728983604303433320271296118655344082911605622359592868855357966088669746859470179508992926751243414162275611424954419765271272 271526861887128138669968046830048945304754693071589434955478245894201567706163208390117728390086337577629494954350030139407920028158811011700108620515049210346381025264312249863553010933610047283708909822728743415380489856722999944947873038916850860460362112591717191847137387215708856093149926440860889221400378]
[175623149805053197861616427683048878592469524974820452081294531183708188952375657046874812938982110631942350028046267697790338027114302841970500843978963469894314503492642840507622494347676184175962190032164434594555975061352399167713874115936399166570170307250393157272582473779794429786721454357428554055159828 246472611436373388239989661262173930524461618600029181504765699614474301970276617977851330684035970342072431179147767677367241532556896669908885117835754331334843727517471410398500159811450355927016592764707924286251133211055134972060347454783378181405300582327936758880369170633433008223405702509773222249658771 170377117647133131861289078713069922178957692045903085485564629374697887248831319867373965890439419910888947304840558380439836673832114066395431739843608354832983406132258122150538490567648312137683478888589773810236335287424835277153061506075401034916105107183827331687942412766694195145073944164864786465418793 318880184470507855794337241625696100876255739459264701724373627359616961808074072150679547673649825042488879425799140386442963254577946153120439178044973494562563957793474838949737206015100240847360824935865463095332048802516593999858232740720853073685342567934894566050276362805521406320588908095085794437655518 170877188206950702651638691126547231307661997097691500999883172125449255821553387294756734615448405424267054425178987576456044259468078157017008218367575690622832151059934884069768859955396839274914542608568258587793577885498892836078118559208149330317305585424678607528177529820782274439777715575337461380706616 206063782701414601378657104339844733567076877340250596380188623480511149894410345740302523035013420807252174879009909465492848072324709491924842595528733544155095032521446041004004338880847069376043875548470405766831552295017253969018349754977643264961787752465568281070481540959661907998749354350611803463427194 296902855337610822083670637491151564796725031836730507640114579121100759621016835208167001121556790196308667848787977067269971514621628384560398865788176665093040101150549146216915078889519516752791380364048646955401968897448644344227182351887267732056428733969213082815254850806687946171726768790110167709536447 288696280164728236166908851041294126515119598803028148975577739092543353072122368433038776520382101061701416136805797803029422344214691012190791756621766050907284654673202454318182027043589587147268298815665800645728242296352078713078969982360873210164364082622944104383788870742732002742431888753904166580845956 165736203294259897057860224941109788933753304107990451347556498450534345580318965824916311089496822921822336271570417438683256020041657954189552944520698938307096708718845505202544383230308227719320585778589882295006065300598538148699629449664102808980309933467806190864687514019591877476401183225646367359357939 249874714069496977802858983978269755231822334239693578113242758698060987334899957207653349381137467505217559841886198205698656243173634161018849158180165883314829935431977687561072757393068458812258609501850265110222383324683109878654345581064693931403813786926227157909942436884699913315358386420391348425202730 276185091021460126251403464203383531551270101223734429360714029909700118803908402648136835802798332818146339309387084338084778767840523849225812815989953543896488350336682093621179992593388836302388290066064653209415361696422734628833111685768822301310847196850362475040891843431422987423098238410429826347141057 178233425293726887379122401536860120178322308260626893660118992348808245101362815377642430952905493472258494231289246843918056624766587890675725838663192213990655769602268958410473789506042922545222536788380485727577290212477546807445792687920398621489120123019615942748507441603362226862253853822543116545385835 201318770379458483550884351829608639412343961437945452007135216858525000422747657723793875656466500557967284959547330862427397103520071968294206351756171979819157729166406831986566429836134587979891990023336453264404803183826997290507820050176872113724842252709186034367140199197200554850923230098368528091354727 275101003478066982297142226914802638801476022302467989552456610713198223325752945551523797097038370080012893545660861033428714922218051655619133103597797529647489096571635032556150305695917870642826560961039081483737278079868058119617191905211025704037908969151296010716469170979254288869817419337172909965664385 191249958163947446317734469465421081643380085390691894717888542781495296693984620850729830426974507061065442122276760345379784096335904357269709051257814975371286222262605797484327357943942136830524081458036826390915006444835238609374930032884999988873539314866370053141151568231199795915419316787054184559941630 282956767685374732684255505055321721541404064828514007992198656321848213210108304752569039041858075019113865418514589306981230705124516257723815726304348813185430791760354942068520172912031833198724227892758160303874210781537582304401386959233136874198846566732881678510136605198160541154389924372493390566790348 176674189063647946166661855123364607063564837999118994435761167829387950465557500962172651416083632955175717252656085414817120885100783500674404865386260348794097629591012031742941277217851738968060839882480813976573845233225224918480042050569618479847752577956637361266229050642559205888548899935869529919789287 293629454439938675665246149997295229780540641224058348104467608274064565127389468481157539830025313682073189415697778733776823698579272939265657643462398039106586916514045559978839231057880657927816845504452419329255147403629087612138586386196491856547187734111017683784372399627157138963836461318222943418486105 214682330124308024533638289687908875517563936766412556789208137260848655527240791264786452120718235046960492471701781470115047433128288077827315908726921960700779371308425360277049728613242474818106770056751163305492738270320109661267437252899321241565992339289983249509045957363772431428834812448408764831008567 228022702864658988969129022620419283010435522655071062902293956079551522596246345831856235014806281948127943570821740330290263903929956923207512216200564168868549687871485861205457540731003277927306702487900947751779614446042211492488056556189716450536869314181576767095238989836140137514924414849863116384707683]
[263802743125065611854663706068826473561435130056041380581155630159114016161797108738656054337301552361104745501626297744633677998346389065885445645225457392264402685256446732617410915726199518821525714030999876001288222121346036166521447173049410694650991543915554892354947398312698794503377416461200156805394371 320896134423422574520240291349147401639165979146192371278439880236522964304051823480657847175591625518422085492381476122103312288655761052752873859442484769169558817241190828341156841234335477900521098762932369961822782795332987578356546553091129465224263619589247264313390916497174987642177073698938428902840770 230464972367479080091313350804632442414768036789683466924014697404641380950005377670596402791035596590047124322259265099437564010465193833824987830791614121854733402779045590771445706674507821069394743283382958662653151758735070694245428140605405921624590397151426686885032916820611603150033788347481218566745273 421261585084920182446526495116643480392730469743827862006216040691491037160349188404172456435796440269635067480312266243739762324986305046947862269526406642811474224946858743837123817349029135138926502157998094768981502376251415436206392989253122792087156371410523822026858140041260169395691454120077192521149849 185418536811440205699072355965719607122795550862289332526528552739801300951966026705708542480834896336207347778790055231810444767897930754793773163859353636496571221348155463841169805294550379893738848892918721076975081924623189390447191060248314140980281056389234837461879760635375755455911003842191792795699836 222949724559345369515876742376324208474209224401745813603650618654941067496891076969113387600769334247281133503335610185231877298699232167392913882548246585496460081945346996617879304918670432568357795704162111628133186356553020806543056111488324767104871563625990468493103277705324264277570952424392190201115938 417249053603668860398638007724313631665518151980453893200754456866793289926569742846593268065826968812251298412432228047579953515503978207959604779316946038737170598679761205004141075158189151106860397601785647200476690891680045886950663791354463313670237037104139315333948309323177215513136677962596505855724482 380703131258698442484257295705282460138459501506258587963804780147303689301498863853181114417387375260509713819428913085369967503012855131562124116143919603142878461974086212048882400470582722117027508918953850900225592332853448851076539375095239472294957289814520378739330818569447425759157258662686334253355500 174769482355480588345311613010365968105647777227983215629383135386253956970539798754553852061207843036431767577299073223868970306308504095596195583150625655494261586095058072743229891433474993939942398453442773226310901826479117219151788620376072999054073000931518253447386312127143793652689063987632256694644897 327164800502570111999255169062214852289024650041204000955392696812938650601633308356122411433015318582625120285841145363750655096696094085909404926864951469926527492900081602416299690043335910528297439260535586701858449443390263596697025175513931804810020282888341740518192698006322684878974982369786387253681316 276439838719650764488760706539413808941389453025425230737995344354680683748291159898514158071497732848802350556863341028359281838520453819661935776752717598508065174375624156487099823622160156401934005153049531524751416677363022090927104928829311418942258423251999433232422284391368310998233207512721564461566556 212704186544971246222074331123597727663763455268551960984096797016253016572607107738345004231955896971368977347100937140263521419465021517581645826070200344547730659859242952260350574881399238499262239129867333898104370883831229865121085602266005715278431850604432546565292403574347428963378485409396018837106565 231137422991648931025191013127711640031515047110174466235597219684768405973493313199593637448742237427662518543563796364330721637222614008904215424565320301609005142351466971837943478984805812334326839891442190086073513302604672100631364143668945324150473253860772189723193828633877450731413154571181731485383640 346852671310986416620268341370428386760027918834948503130669645512096062908498635870610732389477638337172232861669770690949699384690517861680456761451942282251505556444345558964135302046566863123223076364168217803125255031661692235457299179688870858823807648198125758577241371873680194439823200696888713230902212 287263520323336668880280185765643127589437972686582801399161589015314791815648075056207418545231544009174107068734307569837848323966298363454768482796027048582738173591634259891835449428405948869830133193571961548167133122964174404800246571823699011968363185640067441086555205137097354790780403579717485627270428 329883055861881025727591665236381807383719074549752885591622161226411609685765134394593157735189825832630380022491502237968886970250397907315413692303541068768129070878124619704366859263263954300306812557267687229123228539052606395691784049866558707964342564260464000612180076523125192753373680388269270251292093 201692153923743022227927922047012721514180108981353368638070298812204958616153080716604722976256960296951889299093183379416088095323189536529677512957987101520044081457825018058425104385133680831223186160753040038771182132856411426923327440105070960271874601546071354133543964253783054427578572957912051207772513 354771700675583689488569097633266345033034292834823785723176682704096136540587857424377104859410919264303365927838937302098461729381745740962742266932049996634084571342813380437030001692639691503587914683483656386548814219223701731884065962930763473181936744247429314463543439726422938526232536731130027472637830 230943984818628219775424803943028701981262887753550449093347433635463647762108622471462562507767132209632555402602466878568574695007510860318898140196565498149897379414874244619642393298505525196971748179327488678703246568095898056962050502886150246314565883735935819566751219493409162211248339527899412213120834 244910871291180999540876131038224678232782647136061474463687643873084543167227132404515719210986376277025566516062270578690175262957119201647454438547850156698437789055774160524029594829257639261357142899164701080464003135214505418613322361259961533744317674692792378760082345835178991716760837668321047070430650]
[231102540504208683441278500770895450337994063758279044260909792393698116506583800640851716359612166617240329487078459778841086713848195408744926082983916425830805692662231680741038932462856578954369707740785537756521479763236859696269883824392264522940260726858607980820451940360570848863128174773820966893542712 265743734539653579066835004687831624350083553970235027604869801864636417556415826517642636904826103365256026528700260782452262279883815530182066276024124685278906142213910928844278925366115374824819693956067870537172894170375835301853399595095899259427582434932770426845870293172991775662360978643716901645727620 210349079405696356836538429147292337140360379103893119806144305020385537810464131226110659619069825547042724403301927985448569166987375224344116671622639914313998860456344048567428725234911738633657245695536663944656516106445205837360781053063252827728226509266208429994258965053096885963127408584682983838548084 370092127898495881883221131176739243404828188407936324478335445617644816968311072375693897341700102453800936942469264963561739173638500247105996819894999098733448347624476545606461484793983759760189221130816420100595493771321881846212596470412808302539426346257544008296437757331559126525153939418649272581792003 155843799780863429380712206517786331534603283457507603179350757031764349002066382081296339893951785831207307434330926859216544592273625218287709253187474640563451801142789872369433700787170933202626495936868489194039759368130295796694222122781856473407481019062743764408613678191642331547280835219937956830086253 208685660430718063023134818029600681694016927117366633238131132958445192019428111787150807087651421606387641544353440933789696906455720573039977965313759451536284368188362063603542263229302204204759430462874611474874693438431550965726670551232667004605117637529486443639284542463827061463666813013146069774596623 376495416003518639674417499958175701281929854694917681678531789462561603655488327795424699227219006166599077979577816057057415815525993272616746606687608525956800712326556097990469731933725132735734038748976627488163875926676975364618802603834953770499093436489566086645238136752039949240162647636828987179834579 346799239413999488110498971912233459911177299861483583332921749052093930592747061842509813134949357072475802378493682633518872240913782965807261631327544141893983294043896670884763376696794350429609524179289465879806052942382457120210869053530047151528132036231308034634997696854219478164213710400852077248821120 169705981594055626191526129703854602873762809855971515772741441032501696121273578085381028584987027704846182419400909557263824386366943105526662769950004781705890276127517431544466618726548271127228276365582823372401537605732731021620104320190337969973584939402421466369627565469352767040352557329922040477005195 314939568863760290384540118082752153809732004758279668349154520117091144948135424245524366340063324424008929024207003162245020293740471292239566910120785826581236198268357366087675220099414793533202441187685322391483201816424704819088053895597092471373867194127053233302646141670296885753306292240050902882067193 274501944416882995735758799555202391039362923348719225643877708282924068365040664503209219610043149528435249078029298305750485892232308481502453379425972726421550496575359608190796610287241500978967423412598029333421297963696957974765793580684264457336896386351474306901474091451058371162815205889658547288756613 162042852002525722516821528383186018278575449206566435454250047908141061435368036746325933601126615024491314927660133760096281320705776102244655820780663122601103393383949947351281931199892199251850719799714623843639554360811771032929325708611802494168688704327872997885604422684877382926752998081879550922673159 199186847050874310663711759065373319818497267251671468587770424206352468442476247991295451181041636866403183712299615853839562933931317404502686066913393985793556698127304344410066576991382378189507028571235204890091478641432426168888625939898268292807620365706172657484050320408998105779117927886741609753059306 354256837940358751229028023821326933124473022943665368069235748497806815006951251158634725639701700571512263598986222866058897650192202830132245087410002342397999093293483377281475490558826621520353888584868610041332064027926228150805277127860712298027363127401797551506511822135023888887056550951578462666401168 234330939937018332512234165522950453367160881291461134878469921151439507789729630447378709490321610875562768524667352209340414557186328790809853587586777294529691020063694501014064937325044229606219932489176634851086737384369314067274741216128951324322584695745812899005951037076673803633700002116900191518343104 332082029558565597759771105851214333635988265232527004414362567577413617394351558271692150498317158739732745705862594401942142069495962667568131355700265663419672348704206572928190457355848914210638948420335608466079295180163933469063321924973352389720524124550782071251683357371242157306460292201842796159597718 176986136483895554690418327829140706363382659137667608820689582879245220579777187328490743894561014022554001750978511533817549261532456394670700292294046329085693852890349308569443762100181849446497355153201880907487440309844376681147420667541370307460264411327087925505905262620386071002765983602129410981524825 306033578065708181892360605636488380307220653372422877388073952287817583833546967101487424935952427752988503478955261900401084739761751200955335173846876897288478246027251747140227411624609094450221789960283358822393959292926844401039921802250862735005064118599109755577207049891717698360790293581097903491018814 219314874918300986481829428174736339804584038904721479645481695499805419784152647017619171604955608496067000760324205776683331070846048793475354613648011507848178533546104483200182624615627611831889147775959481609079024343665913206339506497470471534463297926880205982018469713052772296925382623211807447844984467 251411658980176426424599861269457962905360409027060289781517026051694351718496780577508779445417678245301909030308343439327126522122700289297564268748528240372257642080980189466101294410540270453169210457925553360431225739589139247809993207475957612679571134629233136065652272322414452523211844945796568973495999]
[241061899028073988798790037741230393483942234086601336070745000327245876506533109773029357915901349628815872451441889563829064856413873527725718859869880048269099752637807588068089888054068969364294640041411106036524096059153691012518740485034056356062246082921852430278113420285101114711615424549249139277257522 324649731643599086115112993009519699452138031914097657036589002455757996538628271536312086027891113179012194983336641812429479724987783015151964019081755404469480800754838022457743380789954890634612176691117396518047463228921056260150822618165077435901312097677295072882034763535523532942532204433934684610043981 235254970787462219840404579655013559873788828426903153698865648656984467361490822488648895501016091744753460386479405178156171138845774327715705113786912265599410014203748341886209366676022693408156368163002599405494601590496989401198973552929276456687898371994794916975190041122391592774191440696356717294231885 425740880045791532523198846621983282509953016391567213186903868019913918759794287097305752661999887010700707627995323212438864509866508575502091321511540826163355631924563516051145246887413009375239895267200500759550085778323118221354084194236896509274319680974593889376664049241305285099994139673137299475989239 218691513540400821804549224498219066538131669904044585243726742849147890707633382757651080960290835528290337948081051248880519870334888312880595453864524810424852223683875213593288669664284711136053455521502919177926558970455107382642271908290895517253209256467433830518046957366395690737578182144983590102038485 268302619218865130271719033545009753399779053711844155079138523469992700794733191273489783510080694015540326749356237471601952640624690574647332040161941087090977941149395995577883320516589414044570632833251347023576508268184788428567463591494267298109046818940098510550915355847388894041086742208584657569920241 407336383942338740798174626239389115510448736801033328217610646742146225826124003788716755725647121531842265937484525828476656038527198785623700663154028773955096919034338929692107410713949725783634901653340966038961119651080922944892272587766538064084646021325484724541568127313549775873739584827773006445753640 393134681808112694975913596160448244240482981723630973356146031804916532236941181457510899673572218259277651984203628914738756762221755837644731654303750753476197281608744739922590010615338565608869292496306096877052448883659921270645325450515812730222672889593367986446631364900471069472193722736474834255002036 215985610462350960536839616461780541805901325846759115271248048215287698136361487020004528283989079601628886641948076104288189678081611169093333207280398109804824624795771554170650549004098320777411071055885304220606333844107189337640129908960147941269202033000097270450548214871844613318043993706884193566592242 346257259037055528063958283678684887823288869097971263870223136112022875717777736826173871208586562198755058112840232705464980999720904563887473827824133419842768406438046339340339959582840029978504197963610308123410599725432433522242213697754185538704211639401044451536292208819236994660059970571914124114271599 363246746808596148737210992794327846617357056818891810187521430179806831944113701788410216011602199287600811660665546421846554242509136889853836816039021455766143689619674758256794863013934396056281068369903404163406671974420976176790079516456790272028047801640717669827329331072466985218901215709420185800516476 228359797357492684759272370677578475406914608085297270343294942217355808434075355292324467198813215227688688362769136317178109975711230089700653102174151262564835348723399701993261280133408455332578461475024635686745323218522248731512202235490816229580164661361372292890652140155335039766689335306017058323699870 261073525188914242692884720274275113790550147800012726232648813501113485629042787747610119742164958912877580849092420435073309574603834046313181794097664949615030331077619160759088825143525257977326603290777510448929918569695246869201664075528458430758464117802684751708437328671301437881253087978552349557929227 377423095994193204578922189550375597310060100452415257679145216869152987932295320012532627260082665449818987730073474556374560322751066241641707700730565368688246016131410970218689748683166415305887428221617894893227940635682372402200646522705710629106816809097492815206152579668106759027411978172342124297112303 259137995605024246569067807228464978520111212301361385815260982586344554863475368048854803571456089002898762700215696227544178787894944543608617271366117854871387117184290022561543196044929075487901413409938350861993081883369167887211440599019001236665896078599620016292614112682026683285287944667378349567596682 377895600401386832627207473591231966722427474471978045257286932968025516883841438396371773330379400989122373108094619359580992354022500428350148393367120309907862372401833632609379756774123183371656856319067036230164053711297648196590505716602911948600987377951831975851533902097405199596765482628047101483695180 229923888278321507619955308253814201187825646322202404258155581951646311813859740021687863337140515937531198397962741508305877398164540330415865591188990653875351703558714013038074531074780496846384342682480155793583956273003471876034817892417654830968846443801102524499001760690758196360143326941316313005428764 385146020849542828762376295678872983417037260032909849077585933133727150028194380453576167080843313823221853494336578094737485648365841025909075506522610021346056261722697685735150058706447775324473174749709672319355587113103471390302308032073417731526776326495675395951587591860727897765554614275689077980788425 276479395595285600707058522756048895783507186318454062608303747878078415416637508566237782329945122675299190201507390456469318457913011040396520935462671813934491352484079874838580577796640954416628460793482556447364053471884684684531093453142733820253696024739578833329629972259929828470255438392962899864298928 304113742334779824637859934428402926505401880740389378433569048603311596599826036448865299394425292925430829973661203201761633383418875016143497844450341141334585646363757368824123351511948673572982552037453552797655001298458947196811495751443435574229011561264850603574487599877204387001096835704274170180520128]

看到key_genenc部分容易联想到Paillier cryptosystem 在这里插入图片描述 再看handle函数部分 前面用于验证用户的部分可以用哈希碰撞解决 Step1给出公钥n和g Step2加密一个输入的数,输出密文 Step3输入两个数,分别加密,但只输出其中一个 Step4解密一个输入的数 Step5猜Step3中输出的是哪个数的密文 猜对32次得到flag 在这里插入图片描述 从这里可以发现,cipher1对应偶数位的key,cipher2对应奇数位的key,所以问题的关键在于还原key 但是尽管知道了key的前四位,用题目给的hint和key的生成代码怎么都无法还原key 由于Paillier cryptosystem还有如下性质: 在这里插入图片描述\(m_1 = plaintext1 * plaintext2 * KEY\)\(m_2 = (plaintext1 * plaintext2)^{-1}\space mod\space n\),就可以利用Step4解密\(E(m_1, r_1)^{m_2}\space mod\space n^2\),得到\(D(E(m_1, r_1)^{m_2}\space mod\space n^2) \equiv m_1m_2\space mod\space n \equiv KEY\space mod\space n\),求出KEY[R]或KEY[R+1], 再利用Step5验证求出的是奇数位还是偶数位 重复直到还原key 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from pwn import *
from Crypto.Util.number import *
import hashlib
from math import gcd
import random

host = "47.104.85.225"
port = 57811

String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz"

key1 = {241, 647}
key2 = {119, 718}


def enc(n, g, m):
while 1:
r = random.randint(2, n - 1)
if gcd(r, n) == 1:
break
c = (pow(g, m, n ** 2) * pow(r, n, n ** 2)) % (n ** 2)
return c


def login(tn):
s = tn.recvline().decode().strip()
end = s[10:22]
hash = s[27:]
for i1 in range(len(String)):
for i2 in range(len(String)):
for i3 in range(len(String)):
for i4 in range(len(String)):
t = String[i1] + String[i2] + String[i3] + String[i4]
HASH = hashlib.sha256((t + end).encode()).hexdigest()
if HASH == hash:
result = t
print(t)
tn.sendline(result.encode())


def judge(tn):
tn.recvuntil(b"This is my public key.")
print("Step 1")
tn.recvuntil(b"n = ")
n = int(tn.recvline().strip().decode())
tn.recvuntilb("g = ")
g = n + 1
tn.recvuntil(b"Please give me one decimal ciphertext.\n")
print("Step 2")
tn.sendline(str(g).encode())
tn.sendlineafter(b"Give me m0.", b"5")
tn.sendlineafter(b"Give me m1.", b"6")
print("Step 3")
tn.recvuntil(b"This is a ciphertext.\n")
c = int(tn.recvline().decode().strip())
inv = inverse(30, n)
key = pow(c, inv, n ** 2)
tn.sendlineafter(b"Please give me one decimal ciphertext \n", str(key).encode())
print("Step 4")
tn.recvuntil(b"This is the corresponding plaintext.\n")
result = int(tn.recvline().decode().strip())
assert 100 <= result < 1000
choice = b"0"
if result in key2:
choice = b"0"
elif result in key1:
choice = b"1"
elif len(key2) == 40:
choice = b"1"
tn.sendlineafter(b"0 or 1(m0 -> c0 , m1 -> c1)?\n", choice)
print("Step 5")
ans = tn.recvline()
if choice == b"0":
if b"Good!" in ans:
key2.add(result)
return True
else:
key1.add(result)
return False
else:
return True


def collect():
while len(key1) < 40 and len(key2) < 40:
tn = remote(host, port)
login(tn)
for _ in range(32):
print("round" + str(_ + 1))
if judge(tn):
if _ == 31:
tn.interactive()
return key1, key2
else:
continue
else:
tn.close()
break
print(key1, key2)
print(key1, key2)
return key1, key2


def finish():
tn = remote(host, port)
login(tn)
for _ in range(32):
print("round" + str(_ + 1))
judge(tn)
tn.interactive()


collect()
finish()
# {128, 129, 641, 646, 647, 780, 653, 526, 396, 918, 281, 158, 286, 542, 548, 936, 810, 430, 944, 309, 186, 201, 333, 461, 977, 727, 216, 860, 613, 232, 745, 877, 237, 241, 113, 244, 888, 121, 123}
# {130, 899, 903, 521, 142, 783, 271, 530, 148, 288, 550, 939, 427, 685, 942, 558, 299, 307, 566, 184, 313, 577, 585, 718, 983, 349, 995, 355, 614, 746, 498, 114, 885, 119, 637, 639}

结果为: 在这里插入图片描述

结语

希望继续坚持

欢迎关注我的其它发布渠道

-------- 本文结束 感谢阅读 --------