我有一个20字节的字符串,从中我取5个4字节的数组(前4个字节=数组1等)。
我必须通过特定的函数将每个数组转换为小数。
这样,我最终会得到5个整数。
我必须添加这5个整数并达到一个特定的数字(4863101420)。
你是否知道如何猜测20个原始字符的一个可能组合 - 通过分成数组和解码为整数的过程 - 将加起来为4863101420,而不需要像itertools.combinations_with_replacement这样的东西?
由于我有20个可能的字符,每个字符是94个可能的字符中的一个(可打印的asciis),因此计算一个最多可达4863101420的字符串可能需要一段时间。
任何见解?
我用来将char转换为int的函数是:
def convertCharToDec(charInput):
firstByte = format(ord(charInput[0]), "x")
secondByte = format(ord(charInput[1]), "x")
thirdByte = format(ord(charInput[2]), "x")
fourthByte = format(ord(charInput[3]), "x")
convertedHex = firstByte + secondByte + thirdByte + fourthByte
return int(convertedHex, 16)
答案 0 :(得分:0)
做一些数学,你会发现最后的整数等于A 0 ×16 6 + A 1 ×16 < sup> 4 + A 2 ×16 2 + A 3 ,其中A i = { {1}}。它是5个字节的总和,因此32×5≤A i ≤126×5。
因此,您可以先尝试A i 的值,然后为每个值尝试5个字节的组合。这应该大大减少计算时间。
仅当sum([ord(the_whole_string[i + j]) for j in range(0, 20, 4)])
为任何i返回长度为2的字符串时,此方法才有效。
编辑:这是数学。
示例:format(ord(charInput[i]), "x")
(这是解决方案之一)
7]f`8^ga:_hb;`id<aje
7]f` -> int(375d6660, 16) = 37*16^6 + 5d*16^4 + 66*16^2 + 60
8^ga -> int(385e6761, 16) = 38*16^6 + 5e*16^4 + 67*16^2 + 61
:_hb -> int(3a5f6862, 16) = 3a*16^6 + 5f*16^4 + 68*16^2 + 62
;`id -> int(3b606964, 16) = 3b*16^6 + 60*16^4 + 69*16^2 + 63
<aje -> int(3c616a65, 16) = 3c*16^6 + 61*16^4 + 6a*16^2 + 64
___________________________________________________________________
A0*16^6 + A1*16^4 + A2*16^2 + A3
,A0 = 37 + 38 + 3a + 3b + 3c
等