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

Math 如何将两个数字“混合”成一个十六进制字符串,math,cryptography,Math,Cryptography,如何从两个数字生成一个代码,当你知道这个代码和其中一个数字时,你可以解扰第二个数字? 例如,您有两个数字:983和2303,并将其混合成十六进制字符串,如下所示:4b17a190bce4ea32236b98dd。当你们知道第一个数字和这个十六进制字符串时,你们可以解扰第二个数字。但当你知道第二个数字和十六进制字符串时,你就不能解第一个数字了。如何做到这一点?您需要类似XOR的东西:您对两个数字进行XOR运算,并存储结果和其中一个数字。然后将结果与已知的数字进行异或运算,并返回另一个数字。当然,并

如何从两个数字生成一个代码,当你知道这个代码和其中一个数字时,你可以解扰第二个数字?
例如,您有两个数字:983和2303,并将其混合成十六进制字符串,如下所示:4b17a190bce4ea32236b98dd。当你们知道第一个数字和这个十六进制字符串时,你们可以解扰第二个数字。但当你知道第二个数字和十六进制字符串时,你就不能解第一个数字了。如何做到这一点?

您需要类似XOR的东西:您对两个数字进行XOR运算,并存储结果和其中一个数字。然后将结果与已知的数字进行异或运算,并返回另一个数字。当然,并不是所有的操作都能达到这个目的。

最简单、最安全的方法是,任何人只要稍加注意,都可以轻易破解:

 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;
再一次,为了避免落选。这种方法会在几秒钟内被任何坐下来使用的人破解。它确实适用于无知的用户,就像在中一样无知,没有数学或编程背景。

在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)
加密:

SHA1散列第一个数字 如果您愿意,这将提供20字节的输出或40字符的十六进制字符串

使用此散列构建AES密钥,例如,使用前16个字节获取128位密钥

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

输出将是一个32个字符的十六进制字符串

解密:

第1步和第2步同上: 注意:只有当您有第一个号码,而不是第二个号码时,才可能出现这种情况

AES解密输入十六进制字符串 这使得:

答案是冒号后面的数字


你的意思是说比添加它们更复杂的东西吗?看起来很像:。试着给原始问题添加细节,如果有意义的话,它可以重新打开…这取决于混合算法你在做什么,迪菲先生…总是有内部网格操作符。这非常准确地回答了OP的问题。对弱加密的任何惩罚都应该是问题,而不是答案。