криптография — PHP эквивалентное хеширование паролей следующего кода .NET

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

Я видел посты, где люди тратили время, пытаясь воссоздать то, что они могли бы достичь с помощью md5() функция в PHP.

По этой причине мне интересно, знает ли кто-нибудь со знанием шифрования PHP-эквивалент для достижения следующего эффекта в PHP:

    internal static string GenerateEncryptedPassword(string password, string salt, int iterationCount)
{
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
byte[] saltBytes = Encoding.UTF8.GetBytes(salt);
byte[] iterationCountBytes = BitConverter.GetBytes(iterationCount);
int derivedLength = passwordBytes.Length + saltBytes.Length;
byte[] passwordSaltBytes = new byte[derivedLength];
byte[] pbkdf2Bytes;
string encryptedString;

for (int i = 0; i < passwordBytes.Length; i++)
{
passwordSaltBytes[i] = passwordBytes[i];
}

for (int i = 0; i < saltBytes.Length; i++)
{
passwordSaltBytes[passwordBytes.Length + i] = saltBytes[i];
}

using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, passwordSaltBytes, iterationCount))
{
pbkdf2Bytes = pbkdf2.GetBytes(derivedLength + iterationCountBytes.Length);
}

using (SHA512 sha512 = new SHA512Managed())
{
byte[] hashBytes = sha512.ComputeHash(pbkdf2Bytes);
byte[] hashSaltBytes = new byte[hashBytes.Length + saltBytes.Length];

for (int i = 0; i < hashBytes.Length; i++)
{
hashSaltBytes[i] = hashBytes[i];
}

for (int i = 0; i < saltBytes.Length; i++)
{
hashSaltBytes[hashBytes.Length + i] = saltBytes[i];
}

encryptedString = Convert.ToBase64String(hashSaltBytes);
}

return encryptedString;
}

Если это что-то изменит, я использую Laravel …

Спасибо за любое руководство


Я ненавижу шифрование: D

$user = \App\User::all();
$salt = strtolower($user[2]->Salt);
$password = 'P@$$W0rd';
$dbPassword = $user[2]->Password;
$iterations = 10000;

echo openssl_pbkdf2($password, $salt, 44, $iterations, 'sha512');

-1

Решение

Прочтите руководство по PHP для password_hash и password_verify. Я рекомендую использовать BCrypt в качестве алгоритма.

http://php.net/manual/en/function.password-hash.php

http://php.net/manual/en/function.password-verify.php

Это совсем не сложно! Удачи! 🙂

Кроме того, SHA-512 не так уж и безопасен. Читайте здесь: SHA1 против MD5 против SHA256: что использовать для входа в PHP?

0

Другие решения

Я годами не использовал PHP, поэтому не уверен, есть ли новые способы сделать что-то, но вы можете создавать хэши SHA-512 с OpenSSL: http://php.net/manual/en/function.openssl-digest.php

openssl_digest(pbkdf2Bytes, 'sha512');

Для получения соли настоятельно рекомендуется использовать безопасные (непредсказуемые) звуки. Для PHP, посмотрите это: PHP генератор случайных строк

РЕДАКТИРОВАТЬ:
Вы также можете создать pbkfd2 напрямую с помощью OpenSSL:
http://php.net/manual/en/function.openssl-pbkdf2.php

Просто обратите внимание на необязательный параметр в конце сигнатуры функции, где вы определяете алгоритм дайджеста.

openssl_pbkdf2(password, saltBytes, keyLength, iterationCount, 'sha512')
0

По вопросам рекламы [email protected]