0

现在我不确定这是我做错了什么,还是在 DynamoDB 中发生了什么。

基本上,我为我的项目构建了一个简单的注册/登录系统,将用户数据/密码保存在 DynamoDB 实例中,密码使用 RIPEMD160 散列,并使用 C# 的RNGCryptoServiceProvider().

注册似乎工作得很好。问题出在登录时,无论如何,密码都不匹配,我认为这是因为从 DynamoDB 中提取哈希/盐时,我得到了一些时髦的字符。首先,hash 和 salt 都是长度为 20 的字节数组,并在保存到数据库之前转换为字符串。

这些示例是从 dynamo Web 界面复制/粘贴的

Example Hash: ">�Bb.ŧ�E���d��Ʀ"  
Example Salt: "`���!�!�Hb�m�}e�"

当他们回来并且我调试从发电机拉回数据的函数时,两个字符串都有不同的字符(VS2010调试器):

Returned Hash: "u001B>�Bb.ŧ�E��u0003�d�u001C�Ʀ"  
Returned Salt: "`���!u000B�!�Hb�u001Dmu0012�u0001}e�"

似乎这些 u001B、u000B、u001D、u0012、u0003、u001C 和 u0001 正在潜入返回的数据中,我不完全确定发生了什么?

4

1 回答 1

1

首先,您不应该尝试以这种方式将不透明的二进制数据转换为字符串。它们不是文本,所以不要那样对待它们。你只是乞求以这种方式丢失信息。

在将数据放入数据库之前使用Convert.ToBase64String(data)而不是。Encoding.GetString再次取出时,用于Convert.FromBase64String检索原始二进制数据。

或者,不要将数据存储在文本字段中 - 使用旨在存储二进制数据的数据库字段类型......

于 2012-06-26T21:29:00.613 回答