如何将两个数字“混合”成一个十六进制字符串

时间:2009-12-02 14:41:44

标签: math cryptography

如何从两个数字生成代码,当您知道此代码时,其中一个数字可以解扰第二个数字? 例如,您有两个数字:9832303,您可以将它“混合”为十六进制字符串,如下所示:4b17a190bce4ea32236b98dd。当您知道第一个数字和这个十六进制字符串时,您可以解扰第二个数字。但是当你知道第二个数字和十六进制字符串时,你无法解扰第一个数字。怎么做?

4 个答案:

答案 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:

  1. SHA1-hash第一个数字

    这给出了一个20字节的输出(如果你愿意,可以是40-char十六进制字符串)。

  2. 使用此哈希构建AES密钥(例如,使用前16个字节获取128位密钥)。

  3. AES加密字符串:(在您的示例983:2303中)使用此派生密钥[使用AES CBC加密]

  4. 输出为32个字符的十六进制字符串

  5. <强>解密:

    1. 如上所述的第1步和第2步:

      注意:只有拥有第一个数字而非第二个数字

    2. 时才可以使用此选项
    3. AES解密输入的十六进制字符串

      这给出了:

    4. 答案是冒号后的数字。