Я на самом деле не хочу выводить некоторый код и ожидать ответов, но это довольно длинная функция, которая хэширует пароль, чтобы позже сравнить его с сохраненным в базе данных значением.
Я видел посты, где люди тратили время, пытаясь воссоздать то, что они могли бы достичь с помощью 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');
Прочтите руководство по 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?
Я годами не использовал 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')