У меня проблема с воссозданием пароля, который хэшируется на C#. В онлайн-проекте, когда пользователь сделать процесс регистрации его пароль сохранения после прохождения этой функции:Пароль Md5 в AS3
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);
}
}
Я работаю на автономную версию, что в какой-то момент будет делать синхронизацию с онлайн-версией и I не может воспроизвести те же результаты на AS3 (Adobe Air). Например, пароль «1234» после перехода к C# -коду будет «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 – Alex
Я думаю, что у вас слишком много вызовов 'toString()' в вашей версии ActionScript. Я не думаю, что это делает то, что вы думаете, что это будет делать. Особенно, когда вы переходите к 'ByteArray' к хешеру md5 –