我正在寻找帮助将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的聪明才智,看看是否有人有办法。
答案 0 :(得分:8)
你能使用UTF-8吗?如果是这样,它解决了您的问题,因为以UTF-8编码的Unicode和ASCII将具有相同的MD5哈希。 (假设当你引用ASCII时,你指的是低7位)。
或者,您可以创建一个unicode哈希,检查它是否有效,以及它是否尝试使用ASCII哈希。
答案 1 :(得分:3)
答案 2 :(得分:0)
这不能直接回答您的问题,但是您正在使用的问题的一个解决方案(迁移)是在使用新系统进行散列之前将输入的密码转换为ascii字节数组。这有点像黑客,但应该可以。可能会有效,具体取决于您的具体情况。