Требуется перевести несколько функций из C# в PHP
2 000 руб. за проект
•
безналичный расчёт
Требуется перевести несколько функций из 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;
}
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;
}
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.