【发布时间】:2015-08-11 09:19:37
【问题描述】:
我有一个 C# 应用程序和一个数据库。在这个数据库中,我存储散列密码,我想知道这样做的最佳方法是什么?
我的选项似乎是 varbinary(160)。这样做的好处是二进制数据是内部内容的直接表示。缺点是更改不是那么容易(尝试手动更改数据库管理器中的字段会导致抱怨 ntext != varbinary)。另一种选择是将其存储为字符串,但这会导致包含一些非常奇怪的字符,我担心它最终可能会包含一些危险的控制字符,这是一种风险吗?什么是好的数据类型?
【问题讨论】:
-
如果你的哈希是字符串兼容的......那么字符串应该是要走的路。您正在存储散列密码,那么担心什么?你看到了什么“奇怪”的角色?
-
如果您真的很担心,您可以将二进制编码为十六进制并将其存储为 varchar。
-
Base64 编码并存储为 varchar。
-
这是一个 sha 哈希,会导致二进制输出,这可以通过 ASCIIEncoding 作为字符串进行解释,但我不确定这是否是有意的?
-
不,您绝对应该不将其视为 ASCII - 它不是。 Base64 或十六进制是适当的转换。
标签: c# sql sql-server