Base-64 char数组或字符串的长度无效:C#

时间:2018-09-06 15:14:15

标签: c# asp.net-web-api base64 password-hash sha-3

我是C#的新手,在我的Web 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 :(得分:0)

它可能是Base64 Unicode的编码转换。您应该通过编码

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

然后在“确认”方法中

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

应该工作。问候