【发布时间】:2012-05-15 19:14:31
【问题描述】:
我在重新创建在 C# 中散列的密码时遇到问题。在一个在线项目中,当用户进行注册过程时,他的密码在通过此功能后被保存:
private static string ToMD5Hash(string inputString)
{
using (MD5 md5 = MD5.Create())
{
byte[] data = Encoding.Unicode.GetBytes(inputString);
byte[] hash = md5.ComputeHash(data);
return Convert.ToBase64String(hash);
}
}
我正在开发一个离线版本,该版本有时会与在线版本同步,但我无法在 AS3 (Adobe Air) 上重现相同的结果。例如,传递给 C# 代码后的密码“1234”将为“DwN1hMmef9T0+MWVUPj1Bw==”。
谁能帮帮我?
我的 AS3 代码是这样的:
private function encode():void
{
var ba:ByteArray = new ByteArray();
ba.writeMultiByte("1234","unicode");
var str:String = MD5.hash(ba.toString());
var ba2:ByteArray = new ByteArray();
ba2.writeMultiByte(str.toString(),"unicode");
var encoder:Base64Encoder = new Base64Encoder();
encoder.encodeUTFBytes(ba2.toString());
trace(encoder.toString());
}
当我执行 ba.writeMultiByte("1234","unicode"); 时,我得到的 ByteArray 与 C# 中的完全相同,但是当我执行 MD5.hash(ba.toString()); 时,新的 ByteArray 不同。
【问题讨论】:
-
你的 as3 函数是什么样的?你从中得到什么价值?可能是字符编码问题,您使用的是
Encoding.Unicode,我相信它是UTF16,我会假设您的as3 编码是UTF8,但是如果不看到您在做什么就很难说。 -
嗨 32bitkid,我已经添加了我的 as3 代码,在此先感谢 Alex
-
我认为您的 actionscript 版本中有太多
toString()调用。我不认为它会做你认为它会做的事情。特别是当您将ByteArray传递给 md5 哈希器时
标签: c# actionscript-3 passwords md5