MD5 哈希值不一样

MD5 hashes not the same

编辑:我发现了一些其他的哈希值,这种方法也适用

c1542f06532950d9-c50fd90a80c8017a-6dcef1027f806329
9fc13754516e58d9-c50fd90a80c8017a-77e823d4b2b89ab4
206692e64d4a33b6-c50fd90a80c8017a-e04a839a7546fab3
7ed6b64f4e0cbfa7-c50fd90a80c8017a-147436e4f7955553

两者显然不一样,所以我唯一能想到的可能是编码问题(不确定您是否可以在 AS3 中指定字符串编码,还是始终使用 UTF8)

您好,我有 2 个字符串,我正在尝试从中获取 MD5 哈希值

string1 = "c1542f06532950d9-c50fd90a80c8017a-6dcef1027f806329";

首先我把它转换成数组

myArray1 = string1.split('-');

然后我从中得到我想与 MD5 计算进行比较的值

value1 = String(myArray1.pop()); (6dcef1027f806329 - value I am comparing to)

然后计算 MD5,以便将其与值 1

进行比较
MD52Compare = MD5.hash(string1.slice(0,-16 -1) + "fours4me").substr(0,16); (6dcef1027f806329 - I get the same value as value1 which is what I want)

然后我用第二个字符串尝试了同样的方法

string2 = "f7a45ced624d3a70-1df5b7cd427370f7-b91ee21d6cb22d7b";

再次将其转换为数组

myArray2 = string2.split('-');

我得到的比较值完全相同

value2 = String(myArray2.pop()); (b91ee21d6cb22d7b - value I am comparing to)

现在和以前一样我计算MD5

MD52Compare2 = MD5.hash(string2.slice(0,-16 -1) + "fours4me").substr(0,16); (03358d45ac9ed391 - and here is the problem MD52Compare2 is != value2)

所以我不确定为什么第二个字符串不产生相同的 MD5 值 我也试过这个字符串:

9c1687ea58e5e770-1df5b7cd427370f7-4b62a84526ea1f56

而且我无法将 MD5 与它的最后一个值进行比较 所以我不太确定这 3 个字符串是否不同

顺便说一句:我正在使用 adobe crypto:https://github.com/mikechambers/as3corelib/blob/master/src/com/adobe/crypto/MD5.as 获取 MD5 哈希值

感谢您的回答和最诚挚的问候

编辑:对于新问题: 将您尝试获取 MD5 的确切字符串转换为十六进制,您将看到它们的不同之处。保证,它们是不同的。

编辑:下面引用了原始问题。
第二个不匹配,因为您没有使用正确的数组变量。

myArray1 = string1.split('-'); value1 = String(myArray1.pop()); (6dcef1027f806329 - value I am comparing to)

myArray2 = string2.split('-'); value2 = String(myArray.pop()); (b91ee21d6cb22d7b - value I am comparing to)

后者应该是

value2 = String(myArray2.pop()); (b91ee21d6cb22d7b - 我比较的值)

"myArray"从哪里来的?

此外,请停止使用 MD5 - 它容易发生冲突,而且通常太小。请改用 SHA-2 或 SHA-3 系列的成员或 Whirlpool;所有这些都是 accepted by NESSIE.

如果您正在进行密码散列,请停止使用任何原始散列并转至 pbkdf2、bcrypt、scrypt 或 argon2。

对于任何感兴趣的人来说,问题是我没有使用正确的字符串来计算 md5

这个

string1 = "c1542f06532950d9-c50fd90a80c8017a-6dcef1027f806329";    
MD52Compare2 = MD5.hash(string1.slice(0,-16 -1) + "fours4me").substr(0,16);

实际上应该是

string2 = "f7a45ced624d3a70-1df5b7cd427370f7-b91ee21d6cb22d7b";    
MD52Compare2 = MD5.hash(string2.slice(0,-16 -1) + "aXPB2").substr(0,16);

第二个字符串