Цикл MD5 возвращает разные значения на PHP и WP7 - PullRequest
1 голос
/ 24 ноября 2011

Я пытался интегрировать хеши MD5 в мое приложение WP7, но я заметил, что реализация Silverlight MD5 http://archive.msdn.microsoft.com/SilverlightMD5 не возвращает тот же хеш, если я сравниваю с результатом PHP MD5.Если я хэширую один раз, значения хеш-функции равны, но если я хэширую более одного раза, конечный результат хеширования будет другим.Кто-нибудь еще заметил это или любую идею, почему это может произойти, возможно исправить и т. Д.?

PHP Code
$pwd = "pwd";
for ($i=0; $i < 2 ; $i++)
{
    $pwd = md5($pwd);
}
print $pwd;

WP7 Code
String hashpwd = "pwd";
for (int i = 0; i < 2; i++)
        {
            String hash = hashpwd;             
            hashpwd = MD5Core.GetHashString(hash);
        }
MessageBox.Show(hashpwd);

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011

Это будет потому, что в WP7 вы хэшируете двоичное представление первого хэша, тогда как в PHP вы хэшируете его представление в ASCII.

Функция PHP md5() возвращает строку ASCII, содержащую 32 шестнадцатеричных числацифры представлены в ASCII - 32 байта.Версия WP7 (вероятно) будет возвращать 16 байтов - истинное двоичное представление хэша.

Я не знаю на 100% уверен, но я был бы удивлен, если ответ на этот вопрос что-нибудь еще.

Сказав, что, глядя на комментарии на странице, на которую вы ссылались , похоже, что в прошлом в реализации MD5 были ошибки - так что это может быть просто Silverlightошибка.

3 голосов
/ 24 ноября 2011

Предполагая, что расчет MD5 верен, вы должны взглянуть на выходные данные первого запуска и, если они точно такие же. Например, если PHP использует символы нижнего регистра a - f, а WP7 использует символы верхнего регистра A - F, вторая сумма MD5 будет отличаться.

...