Недопустимая длина для массива или строки Base-64: C # - PullRequest
0 голосов
/ 06 сентября 2018

Я новичок в 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 Ответ

0 голосов
/ 06 сентября 2018

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

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

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

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

должно работать. Привет

...