Недопустимая длина для массива или строки 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

Может кто-нибудь помочь мне решить это.

Ссылка: https://www.youtube.com/watch?v=0dgTf9TUDHU

1 ответ

Это может быть кодировка преобразования Base64 Unicode. Вы должны пройти кодировку

var plainTextBytes = System.Text.Encoding.Unicode.GetBytes(plainText);
string hashValue  = Convert.ToBase64String(plainTextBytes);

затем в методе подтверждения

byte[] hashBytes = Convert.FromBase64String(hashValue);

должно сработать. С уважением

Другие вопросы по тегам