Требуется перевести несколько функций из C# в PHP

2 000 руб. за проект • безналичный расчёт
22 сентября 2016, 10:36 • 1 отклик • 3 просмотра
Требуется перевести несколько функций из C# в PHP (для сохранности обратной совместимости по паролям)

byte[] saltBytes = Convert.FromBase64String(user.PasswordSalt);
Utility.Security.VerifyHash(password, user.PasswordHash, saltBytes)

public static bool VerifyHash(string plainText, string hashValue, byte[] saltBytes)
{
// Convert base64-encoded hash value into a byte array.
byte[] hashWithSaltBytes = Convert.FromBase64String(hashValue);

// We must know size of hash (without salt).
int hashSizeInBits, hashSizeInBytes;

hashSizeInBits = 128;

// Convert size of hash from bits to bytes.
hashSizeInBytes = hashSizeInBits / 8;

// Make sure that the specified hash value is long enough.
if (hashWithSaltBytes.Length < hashSizeInBytes)
return false;

// Compute a new hash string from existing saltBytes.
string expectedHashString = ComputeHash(plainText, saltBytes);

// If the computed hash matches the specified hash,
// the plain text value must be correct.
return (hashValue == expectedHashString);
}

public static string ComputeHash(string plainText, byte[] saltBytes)
{
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);

byte[] plainTextWithSaltBytes = new byte[plainTextBytes.Length + saltBytes.Length];

plainTextBytes.CopyTo(plainTextWithSaltBytes, 0);

saltBytes.CopyTo(plainTextWithSaltBytes, plainTextBytes.Length);

HashAlgorithm hash;

hash = new MD5CryptoServiceProvider();

byte[] hashBytes = hash.ComputeHash(plainTextWithSaltBytes);

byte[] hashWithSaltBytes = new byte[hashBytes.Length + saltBytes.Length];

hashBytes.CopyTo(hashWithSaltBytes, 0);
saltBytes.CopyTo(hashWithSaltBytes, hashBytes.Length);

string hashValue = Convert.ToBase64String(hashWithSaltBytes);

return hashValue;
}