Intereting Posts
Как преобразовать XML в объект OCI-Lob? Подключение к Gmail с помощью PHP и IMAP Отправка двух Ajax-запросов на два разных скрипта PHP из одной функции javascript Печать веб-страницы в pdf-документ с использованием php Как получить доступ к объекту stdclass после определенной пары значений ключа? удалить загруженный файл из массива id, когда они делятся в joomla? Weird PHP error: «Невозможно использовать возвращаемое значение функции в контексте записи» Загрузка браузера на s3 с ролями экземпляра Получить номер недели (в год) с даты PHP Поврежденные символы, когда jQuery.AJAX отправляет PHP (UTF-8 и ISO-8859 несовместимости) Запись изменений Вернуться к объекту запроса Zend Dom Выбор большого количества строк из таблицы базы данных с помощью MySQL Как установить клиентскую библиотеку PostgreSQL для PHP в Windows с включенным SSL Допускается ли множественное наследование на уровне класса в PHP? разбиение на страницы в php

ищет c # эквивалент проверки пароля php ()

Мне нужно импортировать кучу учетных записей пользователей Moodle в систему, написанную на c #.

Moodle использует функцию password_hash () для создания хэшей паролей. Мне нужно проверить эти пароли в c #.

Другими словами, я ищу AC # реализацию функции проверки пароля PHP ( http://www.php.net/manual/en/function.password-verify.php ).

Я немного искал Google, но не мог найти ничего близкого, поэтому я прошу в надежде избежать повторного использования колеса 🙂

Благодаря!

Понял!

Сначала установите CryptSharp через пакет NuGet. (Используйте официальный пакет «2.0»), и, кстати, BCrypt.net не работал для меня.

Затем:

using CryptSharp; bool matches = Crypter.CheckPassword("password goes here", "hash goes here"); 

Обратите внимание, что хэш должен начинаться с чего-то вроде: «$ 2y $ …»

Работает как шарм! 🙂

Я знаю, что вы не хотите писать код для него .Net имеет встроенную библиотеку криптографии, которая вычисляет хэш и шифрует его. Вы должны использовать его, импортируя Security.Cryptography. Вы можете сравнить результат с тем, который был сохранен в вашей БД. Вот код.

 class Program { static int SaltValueSize = 8; static void Main(string[] args) { string pass = "Password"; string result = ComputeHash(pass, new MD5CryptoServiceProvider()); Console.WriteLine("Original: " + pass + "\nEncrypted: " + result); Console.WriteLine("Is user valid: " + IsUserValid("UserName", pass)); Console.WriteLine("With Salt, Original: " + pass + "\nEcrypted: " + System.Text.Encoding.Default.GetString(ComputePasswordHash(pass, salted))); Console.ReadLine(); } private static byte[] ComputePasswordHash(string password, int salt) { byte[] saltBytes = new byte[4]; saltBytes[0] = (byte)(salt >> 24); saltBytes[1] = (byte)(salt >> 16); saltBytes[2] = (byte)(salt >> 8); saltBytes[3] = (byte)(salt); byte[] passwordBytes = UTF8Encoding.UTF8.GetBytes(password); byte[] preHashed = new byte[saltBytes.Length + passwordBytes.Length]; System.Buffer.BlockCopy(passwordBytes, 0, preHashed, 0, passwordBytes.Length); System.Buffer.BlockCopy(saltBytes, 0, preHashed, passwordBytes.Length, saltBytes.Length); SHA1 sha1 = SHA1.Create(); return sha1.ComputeHash(preHashed); } public static string ComputeHash(string input, HashAlgorithm algorithm) { Byte[] inputBytes = Encoding.UTF8.GetBytes(input); Byte[] hashedBytes = algorithm.ComputeHash(inputBytes); return BitConverter.ToString(hashedBytes); } public static bool IsUserValid(string userName, string password) { bool isValid; string result = VerifyPassword(password); // isValid = Your database call in a form of Inverted statement which you //can check if the user with the hashed password exists or Not return isValid; } public static string VerifyPassword(string password) { return ComputeHash(password, new MD5CryptoServiceProvider()); } }