c# - Base-64 字符数组或字符串的长度无效:C#
问题描述
我是 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
谁能帮我解决这个问题。
解决方案
它可能是Base64 Unicode的编码转换。你应该通过编码
var plainTextBytes = System.Text.Encoding.Unicode.GetBytes(plainText);
string hashValue = Convert.ToBase64String(plainTextBytes);
然后在 Confirm 方法中
byte[] hashBytes = Convert.FromBase64String(hashValue);
应该管用。问候
推荐阅读
- php - 使用作曲家安装 Wordpress
- c - 将 2 个数组合并到 C 中的空的第 3 个数组中
- ruby-on-rails - 如何在 if 和 else 语句中引用特定的控制器
- php - Silex 匹配 GET 但没有 POST
- git - git clone 后 Unity 项目损坏
- python - 如何在需要对每列进行单独查询的表上设置索引?
- java - 在 Spring JMS 模块中获取 BeanNotOfRequiredTypeException
- c# - NHIbernate:获取由父对象的属性过滤的子对象
- .net - 如何在新/旧 RabbitMQ 队列声明/销毁时得到通知
- smtp - Postfix php 邮件问题“CLIENT: 503 5.5.1 Error: authentication not enabled SMTP ERROR: AUTH command failed”