如何从两个数字生成代码,当您知道此代码时,其中一个数字可以解扰第二个数字?
例如,您有两个数字:983
和2303
,您可以将它“混合”为十六进制字符串,如下所示:4b17a190bce4ea32236b98dd
。当您知道第一个数字和这个十六进制字符串时,您可以解扰第二个数字。但是当你知道第二个数字和十六进制字符串时,你无法解扰第一个数字。怎么做?
答案 0 :(得分:1)
这是最容易的,非常非常的NONSAFE(在任何需要注意的人身上容易破解)这样做的方法:
int number1;
int number2;
int key;
//encode (we know number1 and number2 and we want to know the key)
number1 = 983;
number2 = 2303;
key = number1 ^ number2;
//decode (we know number1 and the key and we want to know number2)
number1 = 983;
number2 = key ^ number1;
再次(避免downvotes)。任何坐下来的人都会在几秒钟内破解这种方法。它确实适用于无能的用户(无论如何,没有数学或编程背景)。
答案 1 :(得分:0)
你需要像XOR这样的东西:你xor这两个数字并存储结果和其中一个。然后你用你知道的数字xor得到结果并得到另一个数字。当然,并非所有操作都可以用于此目的。
答案 2 :(得分:0)
在python中:
hash = 0x4b17a190bce4ea32236b98dd # hash
input = 983
output = 2303
#k = hash - (input * output)
k = 23239944001398166727313395124
def decode(hash, input):
return (hash - k) / input
def encode(input, output):
return '%x' % (k + (input * output))
print k, decode(hash, input), encode(input, output)
答案 3 :(得分:-1)
<强> ENCRYPTION:强>
SHA1-hash第一个数字
这给出了一个20字节的输出(如果你愿意,可以是40-char十六进制字符串)。
使用此哈希构建AES密钥(例如,使用前16个字节获取128位密钥)。
AES加密字符串:(在您的示例983:2303中)使用此派生密钥[使用AES CBC加密]
输出为32个字符的十六进制字符串
<强>解密:强>
如上所述的第1步和第2步:
注意:只有拥有第一个数字而非第二个数字
AES解密输入的十六进制字符串
这给出了:
答案是冒号后的数字。