题目:
from Crypto.Util.number import *
import random
from Crypto.Cipher import AES
import hashlib
from Crypto.Util.Padding import pad
from secrets import flaglist = []
bag = []
p=random.getrandbits(64)
assert len(bin(p)[2:])==64
for i in range(4):t = pa=[getPrime(32) for _ in range(64)]b=0for i in a:temp=t%2b+=temp*it=t>>1list.append(a)bag.append(b)
print(f'list={list}')
print(f'bag={bag}')key = hashlib.sha256(str(p).encode()).digest()
cipher = AES.new(key, AES.MODE_ECB)
flag = pad(flag,16)
ciphertext = cipher.encrypt(flag)
print(f"ciphertext={ciphertext}")"""
list=[[2826962231, 3385780583, 3492076631, 3387360133, 2955228863, 2289302839, 2243420737, 4129435549, 4249730059, 3553886213, 3506411549, 3658342997, 3701237861, 4279828309, 2791229339, 4234587439, 3870221273, 2989000187, 2638446521, 3589355327, 3480013811, 3581260537, 2347978027, 3160283047, 2416622491, 2349924443, 3505689469, 2641360481, 3832581799, 2977968451, 4014818999, 3989322037, 4129732829, 2339590901, 2342044303, 3001936603, 2280479471, 3957883273, 3883572877, 3337404269, 2665725899, 3705443933, 2588458577, 4003429009, 2251498177, 2781146657, 2654566039, 2426941147, 2266273523, 3210546259, 4225393481, 2304357101, 2707182253, 2552285221, 2337482071, 3096745679, 2391352387, 2437693507, 3004289807, 3857153537, 3278380013, 3953239151, 3486836107, 4053147071], [2241199309, 3658417261, 3032816659, 3069112363, 4279647403, 3244237531, 2683855087, 2980525657, 3519354793, 3290544091, 2939387147, 3669562427, 2985644621, 2961261073, 2403815549, 3737348917, 2672190887, 2363609431, 3342906361, 3298900981, 3874372373, 4287595129, 2154181787, 3475235893, 2223142793, 2871366073, 3443274743, 3162062369, 2260958543, 3814269959, 2429223151, 3363270901, 2623150861, 2424081661, 2533866931, 4087230569, 2937330469, 3846105271, 3805499729, 4188683131, 2804029297, 2707569353, 4099160981, 3491097719, 3917272979, 2888646377, 3277908071, 2892072971, 2817846821, 2453222423, 3023690689, 3533440091, 3737441353, 3941979749, 2903000761, 3845768239, 2986446259, 3630291517, 3494430073, 2199813137, 2199875113, 3794307871, 2249222681, 2797072793], [4263404657, 3176466407, 3364259291, 4201329877, 3092993861, 2771210963, 3662055773, 3124386037, 2719229677, 3049601453, 2441740487, 3404893109, 3327463897, 3742132553, 2833749769, 2661740833, 3676735241, 2612560213, 3863890813, 3792138377, 3317100499, 2967600989, 2256580343, 2471417173, 2855972923, 2335151887, 3942865523, 2521523309, 3183574087, 2956241693, 2969535607, 2867142053, 2792698229, 3058509043, 3359416111, 3375802039, 2859136043, 3453019013, 3817650721, 2357302273, 3522135839, 2997389687, 3344465713, 2223415097, 2327459153, 3383532121, 3960285331, 3287780827, 4227379109, 3679756219, 2501304959, 4184540251, 3918238627, 3253307467, 3543627671, 3975361669, 3910013423, 3283337633, 2796578957, 2724872291, 2876476727, 4095420767, 3011805113, 2620098961], [2844773681, 3852689429, 4187117513, 3608448149, 2782221329, 4100198897, 3705084667, 2753126641, 3477472717, 3202664393, 3422548799, 3078632299, 3685474021, 3707208223, 2626532549, 3444664807, 4207188437, 3422586733, 2573008943, 2992551343, 3465105079, 4260210347, 3108329821, 3488033819, 4092543859, 4184505881, 3742701763, 3957436129, 4275123371, 3307261673, 2871806527, 3307283633, 2813167853, 2319911773, 3454612333, 4199830417, 3309047869, 2506520867, 3260706133, 2969837513, 4056392609, 3819612583, 3520501211, 2949984967, 4234928149, 2690359687, 3052841873, 4196264491, 3493099081, 3774594497, 4283835373, 2753384371, 2215041107, 4054564757, 4074850229, 2936529709, 2399732833, 3078232933, 2922467927, 3832061581, 3871240591, 3526620683, 2304071411, 3679560821]]
bag=[123342809734, 118191282440, 119799979406, 128273451872]
ciphertext=b'\x1d6\xcc}\x07\xfa7G\xbd\x01\xf0P4^Q"\x85\x9f\xac\x98\x8f#\xb2\x12\xf4+\x05`\x80\x1a\xfa !\x9b\xa5\xc7g\xa8b\x89\x93\x1e\xedz\xd2M;\xa2'
"""
解题思路:
- 我们首先来计算一下每个包的密度情况
import mathdef calculate_density(M):if all(isinstance(sub_list, list) for sub_list in M): #检查 M 是否为二维列表densities = []for sub_list in M:len_M = len(sub_list) #计算子列表的长度max_Mi = max(sub_list) #找到子列表中的最大元素density = len_M / math.log2(max_Mi)densities.append(density)return densitieselse:len_M = len(M) #计算列表的长度max_Mi = max(M) #找到列表中的最大元素return len_M / math.log2(max_Mi)#M_single = [] #单个背包问题
M_multiple = [[2826962231, 3385780583, 3492076631, 3387360133, 2955228863, 2289302839, 2243420737, 4129435549, 4249730059, 3553886213, 3506411549, 3658342997, 3701237861, 4279828309, 2791229339, 4234587439, 3870221273, 2989000187, 2638446521, 3589355327, 3480013811, 3581260537, 2347978027, 3160283047, 2416622491, 2349924443, 3505689469, 2641360481, 3832581799, 2977968451, 4014818999, 3989322037, 4129732829, 2339590901, 2342044303, 3001936603, 2280479471, 3957883273, 3883572877, 3337404269, 2665725899, 3705443933, 2588458577, 4003429009, 2251498177, 2781146657, 2654566039, 2426941147, 2266273523, 3210546259, 4225393481, 2304357101, 2707182253, 2552285221, 2337482071, 3096745679, 2391352387, 2437693507, 3004289807, 3857153537, 3278380013, 3953239151, 3486836107, 4053147071], [2241199309, 3658417261, 3032816659, 3069112363, 4279647403, 3244237531, 2683855087, 2980525657, 3519354793, 3290544091, 2939387147, 3669562427, 2985644621, 2961261073, 2403815549, 3737348917, 2672190887, 2363609431, 3342906361, 3298900981, 3874372373, 4287595129, 2154181787, 3475235893, 2223142793, 2871366073, 3443274743, 3162062369, 2260958543, 3814269959, 2429223151, 3363270901, 2623150861, 2424081661, 2533866931, 4087230569, 2937330469, 3846105271, 3805499729, 4188683131, 2804029297, 2707569353, 4099160981, 3491097719, 3917272979, 2888646377, 3277908071, 2892072971, 2817846821, 2453222423, 3023690689, 3533440091, 3737441353, 3941979749, 2903000761, 3845768239, 2986446259, 3630291517, 3494430073, 2199813137, 2199875113, 3794307871, 2249222681, 2797072793], [4263404657, 3176466407, 3364259291, 4201329877, 3092993861, 2771210963, 3662055773, 3124386037, 2719229677, 3049601453, 2441740487, 3404893109, 3327463897, 3742132553, 2833749769, 2661740833, 3676735241, 2612560213, 3863890813, 3792138377, 3317100499, 2967600989, 2256580343, 2471417173, 2855972923, 2335151887, 3942865523, 2521523309, 3183574087, 2956241693, 2969535607, 2867142053, 2792698229, 3058509043, 3359416111, 3375802039, 2859136043, 3453019013, 3817650721, 2357302273, 3522135839, 2997389687, 3344465713, 2223415097, 2327459153, 3383532121, 3960285331, 3287780827, 4227379109, 3679756219, 2501304959, 4184540251, 3918238627, 3253307467, 3543627671, 3975361669, 3910013423, 3283337633, 2796578957, 2724872291, 2876476727, 4095420767, 3011805113, 2620098961], [2844773681, 3852689429, 4187117513, 3608448149, 2782221329, 4100198897, 3705084667, 2753126641, 3477472717, 3202664393, 3422548799, 3078632299, 3685474021, 3707208223, 2626532549, 3444664807, 4207188437, 3422586733, 2573008943, 2992551343, 3465105079, 4260210347, 3108329821, 3488033819, 4092543859, 4184505881, 3742701763, 3957436129, 4275123371, 3307261673, 2871806527, 3307283633, 2813167853, 2319911773, 3454612333, 4199830417, 3309047869, 2506520867, 3260706133, 2969837513, 4056392609, 3819612583, 3520501211, 2949984967, 4234928149, 2690359687, 3052841873, 4196264491, 3493099081, 3774594497, 4283835373, 2753384371, 2215041107, 4054564757, 4074850229, 2936529709, 2399732833, 3078232933, 2922467927, 3832061581, 3871240591, 3526620683, 2304071411, 3679560821]] # 多个背包问题#计算单个背包问题的密度
#density_single = calculate_density(M_single)
#print(f"单个背包的密度是: {density_single}")#计算多个背包问题的密度
densities_multiple = calculate_density(M_multiple)
for i, density in enumerate(densities_multiple):print(f"第 {i + 1} 个背包的密度是: {density}")
'''
第 1 个背包的密度是: 2.0003184396847953
第 2 个背包的密度是: 2.000154916077043
第 3 个背包的密度是: 2.000665293245508
第 4 个背包的密度是: 2.000234034092993
'''
- 我们发现每个背包密度都超过2,远大于0.9408,这样一来常规格解做不了
- 注意到题目给了四个背包用于同一个明文加密,可以尝试将四个背包构造在一个格内,于是有如下的格:
- 其中,
M<sub>ij</sub>
表示第i
个背包中第j
个物品的权重,S<sub>i</sub>
表示第i
个背包的目标重量 - 向量
<font style="color:rgb(6, 6, 7);">(x1,x2,…,xn,−1,−1,−1,−1)</font>
表示一个可能的解,其中前<font style="color:rgb(6, 6, 7);">n</font>
个元素是物品的数量,后四个元素是每个背包的符号<font style="color:rgb(6, 6, 7);">(-1或1)</font>
,表示是否选择该背包 - 通过构造这样的格并应用格约化算法(如LLL算法,BKZ算法),可以找到格中最短的向量
解答:
LLL算法
list=[[2826962231, 3385780583, 3492076631, 3387360133, 2955228863, 2289302839, 2243420737, 4129435549, 4249730059, 3553886213, 3506411549, 3658342997, 3701237861, 4279828309, 2791229339, 4234587439, 3870221273, 2989000187, 2638446521, 3589355327, 3480013811, 3581260537, 2347978027, 3160283047, 2416622491, 2349924443, 3505689469, 2641360481, 3832581799, 2977968451, 4014818999, 3989322037, 4129732829, 2339590901, 2342044303, 3001936603, 2280479471, 3957883273, 3883572877, 3337404269, 2665725899, 3705443933, 2588458577, 4003429009, 2251498177, 2781146657, 2654566039, 2426941147, 2266273523, 3210546259, 4225393481, 2304357101, 2707182253, 2552285221, 2337482071, 3096745679, 2391352387, 2437693507, 3004289807, 3857153537, 3278380013, 3953239151, 3486836107, 4053147071], [2241199309, 3658417261, 3032816659, 3069112363, 4279647403, 3244237531, 2683855087, 2980525657, 3519354793, 3290544091, 2939387147, 3669562427, 2985644621, 2961261073, 2403815549, 3737348917, 2672190887, 2363609431, 3342906361, 3298900981, 3874372373, 4287595129, 2154181787, 3475235893, 2223142793, 2871366073, 3443274743, 3162062369, 2260958543, 3814269959, 2429223151, 3363270901, 2623150861, 2424081661, 2533866931, 4087230569, 2937330469, 3846105271, 3805499729, 4188683131, 2804029297, 2707569353, 4099160981, 3491097719, 3917272979, 2888646377, 3277908071, 2892072971, 2817846821, 2453222423, 3023690689, 3533440091, 3737441353, 3941979749, 2903000761, 3845768239, 2986446259, 3630291517, 3494430073, 2199813137, 2199875113, 3794307871, 2249222681, 2797072793], [4263404657, 3176466407, 3364259291, 4201329877, 3092993861, 2771210963, 3662055773, 3124386037, 2719229677, 3049601453, 2441740487, 3404893109, 3327463897, 3742132553, 2833749769, 2661740833, 3676735241, 2612560213, 3863890813, 3792138377, 3317100499, 2967600989, 2256580343, 2471417173, 2855972923, 2335151887, 3942865523, 2521523309, 3183574087, 2956241693, 2969535607, 2867142053, 2792698229, 3058509043, 3359416111, 3375802039, 2859136043, 3453019013, 3817650721, 2357302273, 3522135839, 2997389687, 3344465713, 2223415097, 2327459153, 3383532121, 3960285331, 3287780827, 4227379109, 3679756219, 2501304959, 4184540251, 3918238627, 3253307467, 3543627671, 3975361669, 3910013423, 3283337633, 2796578957, 2724872291, 2876476727, 4095420767, 3011805113, 2620098961], [2844773681, 3852689429, 4187117513, 3608448149, 2782221329, 4100198897, 3705084667, 2753126641, 3477472717, 3202664393, 3422548799, 3078632299, 3685474021, 3707208223, 2626532549, 3444664807, 4207188437, 3422586733, 2573008943, 2992551343, 3465105079, 4260210347, 3108329821, 3488033819, 4092543859, 4184505881, 3742701763, 3957436129, 4275123371, 3307261673, 2871806527, 3307283633, 2813167853, 2319911773, 3454612333, 4199830417, 3309047869, 2506520867, 3260706133, 2969837513, 4056392609, 3819612583, 3520501211, 2949984967, 4234928149, 2690359687, 3052841873, 4196264491, 3493099081, 3774594497, 4283835373, 2753384371, 2215041107, 4054564757, 4074850229, 2936529709, 2399732833, 3078232933, 2922467927, 3832061581, 3871240591, 3526620683, 2304071411, 3679560821]]
bag=[123342809734, 118191282440, 119799979406, 128273451872]L = matrix(ZZ,65,68)
t = 2^10
for i in range(64):L[i,i]=2L[i,64]=list[0][i]*tL[i,65]=list[1][i]*tL[i,66]=list[2][i]*tL[i,67]=list[3][i]*tL[64,i]=1
L[64,64]=bag[0]*t
L[64,65]=bag[1]*t
L[64,66]=bag[2]*t
L[64,67]=bag[3]*tL=L.LLL()
print(L)l=[0]*64
for i in range(64):if L[0][i]==-1:l[i]=1
l=l[::-1]p=0
for i in range(64):p=p*2+l[i]
print(p)
'''
[ -1 -1 -1 1 1 -1 -1 -1 -1 -1 1 -1 1 1 -1 1 -1 1 1 -1 1 1 -1 -1 1 -1 -1 1 -1 1 -1 -1 -1 1 -1 1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 -1 -1 1 1 1 -1 -1 1 -1 -1 -1 -1 0 0 0 0]
[ 4 0 0 2 2 4 -4 4 2 -2 0 -2 -2 8 -8 2 0 2 -2 2 -2 2 0 -2 0 2 0 -6 -2 4 4 -4 -4 -8 0 6 0 -4 2 -2 -6 -2 -2 -4 4 8 4 2 -4 2 0 2 0 -2 -2 -2 0 -2 2 0 0 0 0 0 0 0 0 0]
[ -4 4 0 2 -4 0 4 -6 -4 6 2 -6 0 0 4 0 0 -4 2 0 10 2 0 0 0 -2 2 -2 4 4 -4 2 8 2 8 -4 -4 4 -2 4 0 -2 -6 -2 -2 -6 -2 2 -2 -4 -6 -2 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ -5 -7 -1 -9 -5 -1 1 -1 5 3 1 5 5 -5 -3 -3 -1 -3 5 -3 -5 -1 -1 1 -3 5 1 -1 -1 -5 -1 1 -7 1 1 5 1 1 3 1 5 5 3 1 -7 -1 1 -1 3 1 5 3 1 -3 1 1 1 -1 -1 1 -1 -1 -1 -1 0 0 0 0]
[ 7 1 -3 3 1 -3 3 -5 -1 1 1 -1 -5 11 -3 7 3 3 -11 1 -7 -1 -3 -1 -5 -1 1 1 -1 -1 -3 3 -5 -1 -1 7 1 1 1 1 -1 -1 -3 1 5 9 1 1 -1 1 1 -1 1 -1 -3 -1 -1 1 1 -1 1 1 1 1 0 0 0 0]
[ -2 2 6 -2 -6 -4 0 -2 -8 12 4 -2 2 -2 4 -6 2 -2 -8 0 -4 -2 -2 2 -2 4 2 -2 0 2 -2 -2 -4 4 6 8 2 4 8 8 -10 2 -4 -2 -4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 7 3 -9 7 -5 3 1 -3 1 -1 -3 1 -5 5 -17 9 -3 3 -3 3 1 5 1 -1 1 -5 1 3 3 3 3 1 3 1 -3 -7 -1 3 1 -5 -3 -1 -1 -3 9 3 -1 3 -1 -1 -1 -1 1 1 -1 -1 -1 1 1 -1 1 1 1 1 0 0 0 0]
[ 2 0 -4 2 -8 2 0 2 4 0 -2 -2 8 -4 -4 0 -2 -8 2 -6 12 10 6 -6 0 -2 6 0 -4 0 0 4 6 6 4 -4 -4 -4 -4 2 0 4 -2 -2 0 -2 0 2 2 -6 -4 0 0 0 0 -2 0 -2 2 0 0 0 0 0 0 0 0 0]
[ 8 -6 -2 6 4 0 -10 6 4 -4 0 4 -2 4 -4 6 -8 -6 0 -2 0 0 4 -4 2 4 2 -2 -4 -8 0 4 -2 -2 2 -4 -2 -8 -4 0 6 6 4 0 6 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 8 0 -2 -6 -6 10 2 0 2 0 2 2 4 0 -6 0 2 -4 0 -2 -2 4 2 -2 0 0 2 4 -2 0 2 6 -2 2 -8 0 6 -4 6 -2 -14 0 -2 -2 -2 0 4 4 -2 -2 -2 2 2 -2 0 -2 0 -2 2 0 0 0 0 0 0 0 0 0]
[ -4 8 8 4 4 -2 -2 0 2 0 -4 2 -4 -2 0 -6 4 6 0 4 -2 -8 0 -2 0 0 -8 0 -2 4 10 -12 0 0 -8 4 0 0 -2 -4 -6 2 6 2 6 0 0 -8 4 6 2 0 -4 2 -2 2 0 2 -2 0 0 0 0 0 0 0 0 0]
[ -1 3 -3 3 -9 -7 -1 5 1 -1 -1 -1 5 -1 -5 -5 -7 3 1 -1 -5 9 3 -1 5 -9 7 7 -1 -3 -3 3 1 5 1 -3 1 3 1 5 5 3 1 -1 3 5 -3 -1 3 -3 -1 -3 -1 1 -3 -1 -1 1 1 -1 1 1 1 1 0 0 0 0]
[ -4 -2 0 4 0 -4 6 -6 4 0 2 4 0 -8 2 -2 6 2 -2 0 4 -4 4 4 2 -2 -6 2 4 4 0 -12 -4 12 -6 -2 -2 10 -2 -2 -4 -2 2 2 0 -2 -4 -2 2 2 4 -2 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0]
[ -6 -6 0 6 4 -6 4 -6 0 6 0 -6 2 4 8 0 2 2 2 2 2 -4 8 4 -2 2 0 -6 0 2 -6 0 0 0 2 0 0 2 -6 4 2 0 -4 0 0 0 -2 2 -6 0 -4 -4 2 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0]
[ -2 4 -2 4 0 2 6 -6 -2 6 -6 4 -4 4 0 -2 2 6 -2 2 0 0 -4 0 2 -8 0 2 2 4 -2 4 6 0 -6 2 0 0 2 -4 0 -4 2 0 0 -4 -4 -4 -4 2 -4 -2 -4 4 2 2 0 2 -2 0 0 0 0 0 0 0 0 0]
[ -6 2 -4 -2 2 0 0 6 0 -12 4 -6 -2 2 4 0 4 4 4 -2 6 2 0 -6 2 -4 2 0 -2 4 0 0 6 -10 6 -2 0 4 -6 0 8 -4 0 0 -2 -2 2 6 2 -4 -2 2 2 -2 -2 -2 -2 -2 2 0 0 0 0 0 0 0 0 0]
[ -8 0 2 4 6 -8 -4 0 -2 -2 -2 0 4 -8 10 -4 8 8 -2 -6 2 -4 6 0 4 -4 -6 0 -8 0 8 -8 0 10 -4 -4 6 -2 0 2 -2 6 6 2 2 -2 -2 -4 6 2 0 -4 -2 2 0 2 2 2 -2 0 0 0 0 0 0 0 0 0]
[ 4 6 10 2 6 2 -4 0 -4 4 4 0 0 -2 8 0 4 -14 -6 4 2 -4 4 -4 -2 2 0 2 -2 2 2 -8 2 -2 4 4 -2 -2 -4 0 -6 0 -4 2 0 -4 0 0 2 -2 -2 2 0 0 -2 -2 -2 -2 2 0 0 0 0 0 0 0 0 0]
[ 0 6 -4 -4 -2 0 -2 -4 -16 10 4 -4 0 -4 0 0 -4 -2 4 4 -4 0 0 6 4 -6 4 6 0 -2 -2 6 4 2 6 -8 4 0 6 8 -2 8 -8 -2 -2 -4 0 2 -2 -2 -2 -4 2 2 4 0 0 0 -2 0 0 0 0 0 0 0 0 0]
[ 1 -3 5 -1 -1 3 -3 -3 5 5 -5 7 5 -1 -9 3 -1 -1 -3 5 -5 -1 -3 -1 -1 3 -1 -5 -1 1 3 -5 -5 1 -3 5 -1 -3 -1 -3 3 1 1 -1 3 -1 -3 -3 3 1 1 7 -1 -3 -3 3 -1 -3 1 1 -1 -1 -1 -1 0 0 0 0]
[ -3 -5 -3 -3 -3 3 -1 5 7 -9 -5 1 -3 1 -3 -3 5 1 5 -7 7 9 -3 -7 -1 -1 -1 -5 -7 1 7 1 3 -5 -5 3 3 -3 -1 -9 1 3 7 1 1 1 3 -3 5 1 1 1 -5 1 1 1 1 3 -3 1 -1 -1 -1 -1 0 0 0 0]
[ -6 -2 -6 -2 -2 -2 4 -10 2 8 -6 4 4 -4 -6 10 0 0 -2 -2 -6 -2 2 4 -6 4 2 2 4 -4 0 2 2 6 -2 2 0 0 -2 -4 6 2 0 0 -2 -2 -4 0 6 0 2 2 8 -4 -2 4 0 0 -2 0 0 0 0 0 0 0 0 0]
[ -4 0 6 -2 0 -4 0 10 2 -2 4 6 6 -6 6 -10 -6 -2 4 -2 0 2 4 -2 0 0 2 0 -4 -4 -4 -2 -6 -4 4 6 -2 -2 6 2 4 0 4 0 -8 4 -4 -4 2 4 4 0 -4 0 0 -6 0 -2 4 0 0 0 0 0 0 0 0 0]
[ -5 1 5 -3 -3 9 5 -3 1 3 3 -1 -1 -5 -7 -1 1 -5 5 -3 3 -3 -1 3 -1 5 -3 -3 3 3 7 -5 -5 3 -3 3 1 5 7 -3 -17 -3 -3 -3 -3 1 1 -1 3 5 1 1 -1 -5 3 -3 1 -1 1 1 -1 1 -1 -1 0 0 0 0]
[ -3 -5 -5 1 -1 -3 -1 -3 5 1 -5 5 -3 -1 1 1 -3 3 3 1 7 -5 1 -7 1 3 -1 -9 1 1 -3 1 1 -1 3 -1 -3 3 -7 -1 11 5 5 1 3 -9 -3 -3 -3 1 3 3 3 1 5 1 -1 -1 -3 -1 1 -1 -1 -1 0 0 0 0]
[ -2 6 8 -6 2 4 -4 -2 0 0 2 -2 -2 4 -2 4 0 -2 2 6 -4 -6 -4 2 -10 4 -4 0 4 0 0 -6 4 -10 4 6 0 -4 2 -2 2 -2 0 -4 -2 4 2 -2 4 2 2 4 0 0 -4 0 -2 -2 2 -2 0 0 2 0 0 0 0 0]
[ 5 -3 -5 3 -3 -1 7 -3 5 -5 -5 1 1 3 -7 3 1 1 -3 -1 5 9 -1 5 -5 -1 3 3 1 -1 3 1 -3 -1 1 -3 1 5 3 -7 -3 -5 -1 3 1 7 -5 5 1 -1 -1 -1 -3 -1 -3 -5 1 3 3 1 -1 1 -1 1 0 0 0 0]
[ -4 -2 -2 -2 -2 2 0 0 4 2 4 2 4 0 -8 2 -4 0 8 -4 -8 4 2 0 6 -4 0 2 4 0 -4 4 4 0 -4 -2 4 0 6 -4 0 -2 2 -8 -2 0 -2 6 -2 0 -2 2 4 -2 -2 -2 0 -4 4 -2 0 0 2 0 0 0 0 0]
[ -9 -5 1 -1 -5 -7 -3 5 -1 3 -3 -5 3 -5 1 -5 -5 1 7 -3 -1 1 3 -1 5 3 1 -1 -1 -1 5 -1 1 5 1 -1 1 1 3 7 5 1 5 -1 -3 -5 -3 -5 5 1 -3 -1 -5 3 3 3 1 1 -1 1 -1 -1 -1 -1 0 0 0 0]
[ 2 -4 -2 0 -8 6 -2 2 -2 6 2 -2 8 -6 0 2 -6 -6 0 0 2 2 8 4 0 6 4 2 4 -6 -2 4 -4 6 4 -2 2 2 10 2 -8 -4 -2 -4 -4 0 -4 2 0 -2 -4 -2 0 -2 0 -2 2 -2 4 0 -2 0 0 0 0 0 0 0]
[ -7 7 5 -7 -7 -3 3 -3 3 1 -3 5 -1 -3 3 -7 3 1 -3 -5 3 -1 -7 -5 -1 -1 3 -3 -1 -3 -3 3 3 1 3 7 1 3 1 3 -3 3 3 -1 -3 -3 1 -5 3 3 -1 3 -3 1 1 1 -1 3 -5 -1 1 1 -1 -1 0 0 0 0]
[ -2 -4 -2 -4 6 2 -6 2 2 -4 4 0 4 2 4 2 -4 2 4 4 0 -4 4 6 4 10 -6 -8 4 0 4 -6 -8 -4 0 -2 6 0 8 -6 -6 -2 2 -6 -2 -2 0 2 -2 2 4 0 4 -2 0 -2 4 -2 2 0 -2 -2 0 0 0 0 0 0]
[ -3 3 1 1 -9 -3 5 -5 3 1 9 -1 -1 7 3 -5 1 -3 -1 -3 3 1 -3 -1 -3 -1 -1 3 -1 -3 -3 1 1 5 3 -1 7 3 1 7 -5 7 -3 -3 1 -3 5 -1 1 -5 -1 -3 3 -1 -1 -1 1 1 -1 -1 1 1 1 1 0 0 0 0]
[ 7 1 7 -5 -3 1 -3 1 -7 3 7 -3 -5 7 -5 1 -5 -1 1 5 -5 -7 -5 -9 -3 5 -3 3 -3 -1 1 1 -3 -3 -1 3 3 -3 1 7 -7 7 -1 -1 5 1 5 -1 -3 1 -1 5 1 1 1 -1 -3 -3 -1 -1 3 1 -1 -1 0 0 0 0]
[ 0 -2 -4 -6 -4 0 8 -6 4 4 6 4 -6 0 2 -2 4 -2 2 -6 -4 -4 -4 2 -4 2 -2 0 2 -6 -6 6 0 4 -12 4 2 0 0 0 4 6 4 4 -6 -4 4 -2 2 2 4 0 0 0 2 4 2 2 0 0 -2 -2 0 0 0 0 0 0]
[ 2 -2 2 4 4 -2 8 -6 2 -2 6 -4 0 4 0 8 8 -6 0 6 0 -4 2 -6 0 -2 -4 2 -4 0 -4 4 -2 2 -4 0 -4 4 -10 -2 0 -2 0 4 6 0 -4 2 4 -2 -4 0 -4 0 -4 0 0 -2 4 0 0 0 2 0 0 0 0 0]
[ 5 -1 3 -7 -3 -1 -1 -3 -1 3 7 1 3 1 5 -1 -3 -13 3 1 -9 1 -3 -1 -3 3 1 5 -3 -7 -1 3 -3 3 -5 3 1 -3 -1 1 3 5 5 5 -5 -5 -1 -1 7 -3 1 1 -3 1 -1 5 1 -1 -1 3 -1 -3 -3 -1 0 0 0 0]
[ 1 3 -1 1 1 -1 7 -7 7 -1 5 3 -3 3 9 1 5 1 1 1 -5 -1 5 -1 3 -9 -3 7 1 1 -7 1 5 1 -11 3 1 3 -1 -3 -1 -7 3 1 -3 -5 -5 1 1 3 -3 -1 -1 3 -3 1 -1 -1 1 -3 3 1 1 1 0 0 0 0]
[ 0 -2 2 -6 -4 4 4 -4 -8 6 0 2 6 -10 2 0 4 -4 0 -4 -6 2 0 4 -2 0 2 4 2 -2 2 4 2 10 -2 2 2 2 2 0 -10 0 0 2 -4 0 -4 0 2 0 -2 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0]
[ -4 2 -2 6 0 4 -2 2 0 4 0 -4 6 2 0 -6 0 8 0 2 6 4 4 2 4 -6 2 -6 0 8 2 -6 0 2 4 2 -4 0 0 2 -6 -2 -2 -6 0 10 -2 -2 -6 0 0 -6 2 2 0 -4 0 -2 2 -2 4 2 2 2 0 0 0 0]
[ 3 1 -5 -7 -7 9 3 3 -5 5 -5 -3 7 -9 -5 -1 -1 1 1 -1 3 3 -3 7 -1 5 3 3 3 3 1 7 5 3 -1 1 -3 -1 5 3 -5 -3 -5 -5 -5 -3 3 -3 -1 1 1 1 3 -3 3 -1 -1 -3 1 -1 1 3 3 1 0 0 0 0]
[ -10 2 -4 2 -2 -2 4 2 6 2 -2 2 -2 -2 -4 -4 -2 6 2 -6 -6 -2 4 0 4 -10 0 0 2 2 -2 -4 4 0 0 4 2 4 0 -2 2 0 4 -2 -2 4 2 0 -6 4 2 0 2 2 2 2 -2 -2 -2 -2 2 2 0 0 0 0 0 0]
[ -3 -1 -5 7 -1 -1 -3 -3 3 3 -1 1 -9 7 -7 1 1 3 1 5 -3 -1 -1 -1 5 -5 -1 1 1 5 -1 -3 3 -3 -3 -1 -3 3 -3 -5 5 1 3 -1 7 1 3 -3 -3 1 7 -3 3 1 1 1 1 1 -3 -5 3 1 3 1 0 0 0 0]
[ -1 3 1 -1 3 -3 -15 11 -9 -1 -3 3 -3 -1 -3 -5 -5 1 -1 3 -9 -3 5 5 3 5 7 1 1 1 1 -7 1 -13 1 1 1 -5 3 3 3 1 1 -1 -3 3 3 1 -1 3 3 3 1 1 -1 1 1 1 -3 -1 -1 -1 -1 -1 0 0 0 0]
[ 3 1 -3 -1 3 -1 -3 7 3 -9 1 -5 3 3 1 3 -7 -11 7 3 5 7 3 -3 3 3 -1 -3 -1 -3 1 -3 -1 -7 7 -1 1 -3 1 -1 5 -5 -3 -3 1 5 -1 3 -1 -3 -1 -1 -1 -1 -1 -3 -1 -3 1 1 1 -1 -1 -1 0 0 0 0]
[ -1 -7 7 3 3 1 -5 7 -3 3 -3 1 -1 -3 3 -7 -7 1 3 -1 -5 -5 -1 5 5 7 1 -5 7 7 -5 3 3 3 -1 -3 1 -3 1 3 -1 -5 3 -3 -1 -7 -1 3 -7 -1 -1 -1 3 -3 3 3 -1 -1 -3 -1 1 1 1 -1 0 0 0 0]
[ 12 6 -6 0 0 8 2 0 2 -6 -2 -2 -4 2 -6 8 6 0 -8 0 6 4 -2 -8 -6 0 0 6 -4 -2 4 4 6 -4 -2 2 2 -4 0 -4 -6 -4 -2 -2 4 0 2 0 4 0 -4 2 -2 -2 -2 -2 -2 -2 4 -4 0 2 0 2 0 0 0 0]
[ 1 -3 -3 -3 -1 3 5 5 7 -3 -1 1 5 5 -7 1 -3 3 3 -3 -1 3 1 -5 -7 1 -1 -1 1 -1 -3 7 -1 -3 -1 7 -3 -1 1 -7 3 -3 5 -1 -1 9 1 1 -3 1 3 3 -1 -1 -1 -5 -1 -3 3 1 -1 1 1 -1 0 0 0 0]
[ 0 -2 0 0 4 -2 0 4 -4 2 4 -2 2 -6 8 -6 2 6 -2 0 -6 -6 0 6 6 2 0 2 2 -2 -6 6 2 6 -4 -4 4 -2 0 6 -2 -2 0 0 -2 -2 0 0 -4 0 -4 -2 0 2 2 2 2 -2 2 0 -4 0 2 0 0 0 0 0]
[ 3 -3 1 5 -1 1 -1 1 -5 5 5 -3 -5 5 1 -1 1 3 -11 1 -1 1 -1 1 5 -1 5 -3 1 3 -5 -1 -3 -1 5 1 1 3 1 9 -9 1 -9 -1 3 7 3 5 -9 -1 -5 -3 3 -3 1 -1 1 1 -1 -3 3 5 1 1 0 0 0 0]
[ 1 1 3 1 -7 3 -9 1 3 3 -1 7 3 -3 -5 -5 -5 -1 5 1 7 -1 -1 -3 3 3 -1 3 1 -5 1 -1 -3 5 3 -3 -3 -5 3 3 1 5 5 -5 1 -7 1 -3 -3 -3 -3 1 1 -1 -1 1 -1 -1 -1 1 -1 -1 1 -1 0 0 0 0]
[ 2 2 -2 -6 -4 2 4 -2 6 -6 0 -2 -2 2 0 4 6 4 2 -2 2 4 -6 -2 -4 -2 -2 -10 0 0 2 -2 -2 -8 4 2 0 4 2 -4 4 -4 0 0 4 4 2 6 -4 0 0 4 0 0 -4 -4 0 -2 4 0 0 0 0 0 0 0 0 0]
[ 7 3 1 -3 -1 1 5 -3 -7 5 3 -5 7 1 9 -1 5 1 -5 -1 5 5 -5 1 1 -3 -1 -5 -5 -1 -3 7 -1 5 -3 3 1 -3 5 5 -9 -1 -5 -1 -1 3 -1 3 -3 1 -3 -3 -5 1 -1 -3 3 -1 7 1 1 1 -1 -1 0 0 0 0]
[ 2 4 2 -4 -2 2 2 -2 0 -4 2 -2 0 4 6 -2 8 -4 -10 -2 -2 -2 0 -6 0 -4 2 2 0 2 -2 -2 -2 4 -2 8 -2 6 -4 2 -8 -2 -2 4 4 4 4 -4 4 -2 -2 0 0 -2 -2 0 -2 4 0 0 4 0 0 0 0 0 0 0]
[ -5 -3 -1 3 9 -3 -1 -1 -1 -3 1 1 1 1 1 9 -5 -3 3 7 -1 -7 7 3 -1 7 -3 1 3 -3 -3 -3 1 -3 -1 -9 -1 3 -7 -3 7 -7 1 -1 -3 -3 -1 5 -1 -1 1 1 1 -3 5 1 1 1 1 1 1 -1 -3 -1 0 0 0 0]
[ 7 -1 3 5 1 3 -5 1 -1 -5 1 3 -9 -1 5 -1 -3 1 1 -1 5 -1 3 -3 5 -1 1 -3 -3 -1 -3 1 3 1 -1 -1 3 -3 -7 1 -5 7 1 -3 7 1 -3 -5 -1 1 -1 -1 1 1 -3 -1 1 -3 -1 -1 -1 1 -1 1 0 0 0 0]
[ 4 -2 8 2 4 2 -6 6 -6 -8 2 -4 -6 2 6 0 0 -4 0 -4 10 2 -2 -2 0 4 2 -4 0 2 6 0 4 -4 6 -4 2 -6 2 0 -6 -2 2 0 4 -4 0 0 4 -2 -4 0 -2 0 -4 -2 -2 0 2 2 0 2 0 -2 0 0 0 0]
[ 2 4 2 -4 0 -6 -2 -2 -6 0 2 4 2 -4 2 0 0 2 2 0 -6 -4 2 -6 2 4 -4 0 -8 -6 4 6 0 4 -6 -6 4 -2 2 4 -2 8 6 2 2 -8 0 -2 6 2 -2 0 -2 4 0 0 -2 4 0 2 2 2 0 0 0 0 0 0]
[ 4 4 0 2 2 2 2 0 0 0 4 -4 0 6 8 -4 6 -8 2 -2 2 2 2 -2 10 -6 4 -2 -2 -2 -4 2 0 -4 -2 0 2 -2 0 2 0 0 -4 4 2 -2 -2 2 -4 -6 -8 -4 0 0 -2 -2 0 0 4 -2 -2 0 2 0 0 0 0 0]
[ 1 -1 3 -3 -1 -1 1 3 3 1 3 7 -1 -1 5 -9 1 -1 1 3 -1 -9 7 3 -1 9 -3 -7 -3 -1 -1 -1 -9 -1 -3 9 -1 -5 3 5 -3 1 3 -1 -5 -3 3 -3 -5 5 1 -1 -3 1 -1 -3 5 -1 3 -1 -1 -3 1 -1 0 0 0 0]
[ 3 -7 -1 -3 1 3 -3 9 -5 3 3 1 3 -7 1 -3 -1 1 1 1 -7 -3 3 3 5 7 1 -3 -1 1 -1 1 -9 -3 -5 5 1 -3 3 -1 -1 3 1 -1 -3 3 -1 -1 -5 1 1 5 5 -3 -1 -3 -1 -5 5 1 -1 1 -1 -1 0 0 0 0]
[ -5 1 5 7 5 -5 -1 -5 -1 -1 1 1 -11 5 3 3 -1 -7 -3 -1 5 -5 -5 3 1 1 -1 -5 5 1 -3 -5 3 1 7 -1 -3 7 -5 -1 1 1 1 -5 5 1 -1 -5 -1 1 1 -1 -1 3 1 -1 1 1 -5 -1 3 -1 -1 -1 -1024 1024 1024 -1024]
[ -5 -3 -3 -3 -1 -5 1 -3 -5 1 1 -5 -5 3 3 3 7 5 1 -1 -5 1 -3 1 -7 1 3 -3 -3 1 -1 1 1 -5 5 3 1 5 -3 5 7 5 -3 1 -3 3 -1 1 1 1 3 -1 5 1 1 3 -3 3 -3 -1 5 1 -1 1 1024 1024 -1024 1024]
[ -1 -1 -1 -1 -3 3 5 1 3 1 1 5 3 1 1 -7 3 1 -1 3 -9 -5 7 3 1 -3 3 3 -5 -3 -5 3 -13 -3 -7 5 7 3 5 1 -7 3 -1 3 -3 5 1 3 -3 1 -1 -3 -3 -3 1 -3 3 -1 1 -1 -5 -1 1 -1 -1024 1024 1024 1024]
[ -1 -1 -1 3 -1 -3 3 -5 7 -3 1 7 5 -3 -1 1 -1 -3 1 1 -1 -1 3 1 -3 -3 1 9 -3 -7 -7 1 -7 1 -1 -1 -3 3 -5 -1 5 -1 -1 3 -1 -1 -3 -1 5 1 1 1 -1 -3 -1 -3 1 1 1 -1 1 1 1 1 0 0 -2048 0]
'''
#17739748707559623655
BKZ算法
list=[[2826962231, 3385780583, 3492076631, 3387360133, 2955228863, 2289302839, 2243420737, 4129435549, 4249730059, 3553886213, 3506411549, 3658342997, 3701237861, 4279828309, 2791229339, 4234587439, 3870221273, 2989000187, 2638446521, 3589355327, 3480013811, 3581260537, 2347978027, 3160283047, 2416622491, 2349924443, 3505689469, 2641360481, 3832581799, 2977968451, 4014818999, 3989322037, 4129732829, 2339590901, 2342044303, 3001936603, 2280479471, 3957883273, 3883572877, 3337404269, 2665725899, 3705443933, 2588458577, 4003429009, 2251498177, 2781146657, 2654566039, 2426941147, 2266273523, 3210546259, 4225393481, 2304357101, 2707182253, 2552285221, 2337482071, 3096745679, 2391352387, 2437693507, 3004289807, 3857153537, 3278380013, 3953239151, 3486836107, 4053147071], [2241199309, 3658417261, 3032816659, 3069112363, 4279647403, 3244237531, 2683855087, 2980525657, 3519354793, 3290544091, 2939387147, 3669562427, 2985644621, 2961261073, 2403815549, 3737348917, 2672190887, 2363609431, 3342906361, 3298900981, 3874372373, 4287595129, 2154181787, 3475235893, 2223142793, 2871366073, 3443274743, 3162062369, 2260958543, 3814269959, 2429223151, 3363270901, 2623150861, 2424081661, 2533866931, 4087230569, 2937330469, 3846105271, 3805499729, 4188683131, 2804029297, 2707569353, 4099160981, 3491097719, 3917272979, 2888646377, 3277908071, 2892072971, 2817846821, 2453222423, 3023690689, 3533440091, 3737441353, 3941979749, 2903000761, 3845768239, 2986446259, 3630291517, 3494430073, 2199813137, 2199875113, 3794307871, 2249222681, 2797072793], [4263404657, 3176466407, 3364259291, 4201329877, 3092993861, 2771210963, 3662055773, 3124386037, 2719229677, 3049601453, 2441740487, 3404893109, 3327463897, 3742132553, 2833749769, 2661740833, 3676735241, 2612560213, 3863890813, 3792138377, 3317100499, 2967600989, 2256580343, 2471417173, 2855972923, 2335151887, 3942865523, 2521523309, 3183574087, 2956241693, 2969535607, 2867142053, 2792698229, 3058509043, 3359416111, 3375802039, 2859136043, 3453019013, 3817650721, 2357302273, 3522135839, 2997389687, 3344465713, 2223415097, 2327459153, 3383532121, 3960285331, 3287780827, 4227379109, 3679756219, 2501304959, 4184540251, 3918238627, 3253307467, 3543627671, 3975361669, 3910013423, 3283337633, 2796578957, 2724872291, 2876476727, 4095420767, 3011805113, 2620098961], [2844773681, 3852689429, 4187117513, 3608448149, 2782221329, 4100198897, 3705084667, 2753126641, 3477472717, 3202664393, 3422548799, 3078632299, 3685474021, 3707208223, 2626532549, 3444664807, 4207188437, 3422586733, 2573008943, 2992551343, 3465105079, 4260210347, 3108329821, 3488033819, 4092543859, 4184505881, 3742701763, 3957436129, 4275123371, 3307261673, 2871806527, 3307283633, 2813167853, 2319911773, 3454612333, 4199830417, 3309047869, 2506520867, 3260706133, 2969837513, 4056392609, 3819612583, 3520501211, 2949984967, 4234928149, 2690359687, 3052841873, 4196264491, 3493099081, 3774594497, 4283835373, 2753384371, 2215041107, 4054564757, 4074850229, 2936529709, 2399732833, 3078232933, 2922467927, 3832061581, 3871240591, 3526620683, 2304071411, 3679560821]]
bag=[123342809734, 118191282440, 119799979406, 128273451872]L=Matrix(ZZ,65,68)
for i in range(64):L[i,i]=2L[i,-1]=list[0][-i-1]L[i,-2]=list[1][-i-1]L[i,-3]=list[2][-i-1]L[i,-4]=list[3][-i-1]
L[-1,:]=1
L[-1,-1]=bag[0]
L[-1,-2]=bag[1]
L[-1,-3]=bag[2]
L[-1,-4]=bag[3]
x=L.BKZ()
print(x[0])
p=''
for i in x[0][:64]:if i==x[0][0]:p+='1'else:p+='0'
p=int(p,2)
print(p)
'''
(1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 0, 0, 0, 0)
17739748707559623655
'''
from Crypto.Cipher import AES
import hashlib
from Crypto.Util.Padding import unpadx = 17739748707559623655
ciphertext=b'\x1d6\xcc}\x07\xfa7G\xbd\x01\xf0P4^Q"\x85\x9f\xac\x98\x8f#\xb2\x12\xf4+\x05`\x80\x1a\xfa !\x9b\xa5\xc7g\xa8b\x89\x93\x1e\xedz\xd2M;\xa2'
key = hashlib.sha256(str(x).encode()).digest()
Cipher = AES.new(key, AES.MODE_ECB)
padded_message = Cipher.decrypt(ciphertext)
message = unpad(padded_message, AES.block_size)
print(message)
#hgame{A_S1mple_Modul@r_Subset_Sum_Problem}