Перенос пароля с ASP на PHP - PullRequest
       3

Перенос пароля с ASP на PHP

0 голосов
/ 15 сентября 2011

У меня есть несколько проблем при переносе учетных записей пользователей сайта ASP на Drupal.

Сайт ASP создает хэш пароля с помощью HashEncode (Password + Salt)

Я пытаюсь выяснить, какая эквивалентная функция в php, чтобы я мог сопоставить ее в нашем модуле пароля drupal.

Кто-то сделал приличную попытку http://forums.overclockers.com.au/showthread.php?t=632736&page=2, но она не работает.

Я слышал, что HashEncode - это sha1, но я не думаю, что это так. На другом сайте это показывает, что эти два не выводят то же самое, и я подтвердил часть php на моем локальном компьютере.

HashEncode("ABCD") = A11D4F0A70B882D58494B188DA0430CF4F17CFA8

sha1('ABCD') = fb2f85c88567f3c8ce9b799c7c54642d0c7b41f6

Кто-нибудь знает, как работает ASP HashEncode и как я могу воспроизвести его в php, чтобы я мог мигрировать между пользователями?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 20 января 2014

Обычно это хеш HMACSHA1, но хитрость заключается в том, чтобы убедиться, что его utf16 закодирован.Ниже приведена реализация JavaScript.

function str2rstr_utf16le(input) {
  var output = [],
      i = 0,
      l = input.length;

  for (; l > i; ++i) {
    output[i] = String.fromCharCode(
      input.charCodeAt(i)        & 0xFF,
      (input.charCodeAt(i) >>> 8) & 0xFF
    );
  }

  return output.join('');
}

//utf 16 encoding is important
var pwd = str2rstr_utf16le("test");
var hash = CryptoJS.HmacSHA1(pwd, pwd);

var encodedPassword = CryptoJS.enc.Base64.stringify(hash);
alert(encodedPassword);
0 голосов
/ 15 сентября 2011

Как уже упоминалось на форуме, который вы связали, попробуйте найти исходный код функции HashEncode, чтобы увидеть, что именно там происходит. Возможно, ASP использует SHA2 , который может иметь несколько ключей (например, SHA256 / SHA512).

Но вы можете также удалите все пароли, поэтому ваши пользователи должны воссоздать их на новом программном обеспечении.Таким образом, все пароли будут генерироваться с использованием функций PHP.

Пример с использованием SHA256 + salt:

/**
 * generate salted password
 * @param string $plainTextPassword
 * @param string $salt default = NULL (create new salt)
 * @param int $saltLength default = 9
 * @return string password-hash
 */
function passwordHash($plainTextPassword, $salt = null, $saltLength = 9)
{
    if(is_null($salt))
    {
        // create new salt
        $salt = substr(sha1(uniqid(mt_rand(), true)), 0, $saltLength);
    }
    else
    {
        $salt = substr($salt, 0, $saltLength);
    }
    return $salt . hash('sha256', $salt . $plainTextPassword);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...