Мне нужно пройти аутентификацию по таблице членства ASP.NET в php.API членства настроен на использование хэшированного пароля.
Может ли кто-нибудь любезно дать мне php, чтобы хэшировать пароль, полученный из формы входа, и сравнить его с полем sql?пароль, который я передаю, правильный, но он не хэшируется.
private function Auth( $username, $password )
{
// Hashed password in db
$hash = $this->parent->_memberData['conv_password'];
// password passed from form
$bytes = mb_convert_encoding($password, 'UTF-7');
// Salt from db
$salt = base64_decode($this->parent->_memberData['misc']);
// hash password from form with salt
$hashedpassword = base64_encode(sha1($salt . $bytes, true));
// Test em out
if ($hashedpassword == $hash)
{
$this->return_code = "SUCCESS";
return true;
}
else
{
$this->return_code = "WRONG_AUTH";
return false;
}
}
ОБНОВЛЕНИЕ:
Я пробовал разные кодировки с одинаковыми результатами.UTF-7, UTF-8 и UTF-16.
ОБНОВЛЕНИЕ: Я боролся с этим уже неделю.Награда приближается ...
Вот код .net в форме модульного теста.Модульный тест работает и значения прямо из базы данных.Как правильно переводить этот код в php?
public void EncodePassword()
{
string expected = "aP/mqBu3VkX+rIna42ramuosS3s=";
string salt = "urIaGX0zd/oBRMDZjc1CKw==";
string pass = "Comeonman";
byte[] bytes = Encoding.Unicode.GetBytes(pass);
byte[] numArray = Convert.FromBase64String(salt);
byte[] numArray1 = new byte[(int)numArray.Length + (int)bytes.Length];
byte[] numArray2 = null;
Buffer.BlockCopy(numArray, 0, numArray1, 0, (int)numArray.Length);
Buffer.BlockCopy(bytes, 0, numArray1, (int)numArray.Length, (int)bytes.Length);
HashAlgorithm hashAlgorithm = HashAlgorithm.Create("SHA1");
if (hashAlgorithm != null)
{
numArray2 = hashAlgorithm.ComputeHash(numArray1);
}
Assert.AreEqual(Convert.ToBase64String(numArray2), expected);
}