Недопустимая длина для массива или строки Base-64: C#
Я новичок в C#, здесь в моем проекте веб-API у меня есть некоторый код для хеширования пароля пользователя с помощью SHA3 .
В API у меня есть 2 способа
Первый способ используется, когда новый пользователь создает учетную запись, я просто хэширую пароль и сохраняю его в таблице.
Второй способ - когда тот же пользователь снова входит в систему, я получаю хешированный пароль (строку) и проверяю текущий пароль с его помощью.
Здесь я столкнулся с ошибкой, как я упомянул в названии, и я сослался на некоторый связанный пост в SO, но я не мог решить эту проблему.
Я проверил, что сохраненная и извлеченная строка имеет те же символы, а сгенерированная и сохраненная строка имеет те же символы.
Я не знаю, где я сделал ошибки.
Password : Abcd@123
Hashed String : k/OMmdnW6FZ+zsOrE2rkdy8YEUH/rep5dlcRIwnG8Vc7kQ81VL8dEQv2Clyp7iRhb0HSfKtgOLBj5g/YbqHq7FKDj5epafNwasE=
Вызов метода подтверждения
bool isPasswordPassed = false;
if (mHashedPassword != " " && mUserPassword != " ")
{
isPasswordPassed = Hashing.Confirm(mUserPassword, mHashedPassword, Supported_HA.SHA512);
}
подтвердить
public static bool Confirm(string plainText, string hashValue, Supported_HA hash)
{
byte[] hashBytes = Convert.FromBase64String(hashValue);//This line passing the error as in my title.
......
.......
.....
}
Но это работает нормально, когда я проверяю код, как это...
check(mUserPassword){
string a = Hashing.ComputeHash(mUserPassword, Supported_HA.SHA512, null);
bool b = Hashing.Confirm(mUserPassword, a, Supported_HA.SHA512);
}
Здесь я передаю пароль для генерации хэша и подтверждающий хеш, но он возвращает TRUE
Может кто-нибудь помочь мне решить это.
1 ответ
Это может быть кодировка преобразования Base64 Unicode. Вы должны пройти кодировку
var plainTextBytes = System.Text.Encoding.Unicode.GetBytes(plainText);
string hashValue = Convert.ToBase64String(plainTextBytes);
затем в методе подтверждения
byte[] hashBytes = Convert.FromBase64String(hashValue);
должно сработать. С уважением