我可以将ASCII MD5哈希密码转换为Unicode MD5哈希密码吗?

时间:2010-04-25 00:42:40

标签: c# encoding passwords md5

我正在寻找帮助将ASCII MD5哈希密码转换为Unicode MD5哈希密码?

例如,我将使用字符串“password”。

当它转换为ascii字节数组时,我得到一个基数为64的X67MO1qnZdYdgyfeuILPmQ == 当它被转换为unicode字节数组时,我得到一个base64编码的散列sIHb6F4ew // D1OfQInQAzQ ==

我的所有密码都存储在应用于ascii字节数组的md5哈希中,但我正在尝试将应用程序的用户数据迁移到一个系统,该系统将密码存储在应用了unicode字节数组的md5哈希中。

如果不清楚,请使用以下C#代码:

var passwordBytes = Encoding.ASCII.GetBytes("password");
var hashAlgorithm = HashAlgorithm.Create("MD5");
var hashBytes = hashAlgorithm.ComputeHash(passwordBytes);

我当前的系统使用它,但我要移动的系统有不同的第一行。它使用Encoding.Unicode.GetBytes。

有人知道如何转换我的密码吗?从

X03MO1qnZdYdgyfeuILPmQ==

进入

sIHb6F4ew//D1OfQInQAzQ==

我猜的答案是我不能......编码是在散列之前完成的,但我想我会询问stackoverflow的聪明才智,看看是否有人有办法。

3 个答案:

答案 0 :(得分:8)

你能使用UTF-8吗?如果是这样,它解决了您的问题,因为以UTF-8编码的Unicode和ASCII将具有相同的MD5哈希。 (假设当你引用ASCII时,你指的是低7位)。

或者,您可以创建一个unicode哈希,检查它是否有效,以及它是否尝试使用ASCII哈希。

答案 1 :(得分:3)

不,你不能。 md5是一种单向操作,你不能从隐藏原始字符串的哈希中扣除任何东西。

答案 2 :(得分:0)

这不能直接回答您的问题,但是您正在使用的问题的一个解决方案(迁移)是在使用新系统进行散列之前将输入的密码转换为ascii字节数组。这有点像黑客,但应该可以。可能会有效,具体取决于您的具体情况。