2011-11-06 56 views
2

我需要将密码存储在我的SQL数据库中。目前不需要太高的安全性,但是我不打算在种子中使用MD5哈希,而是计划使用SHA1 +种子来存储我的密码。为什么要在存储之前将SHA1转换为base64?

用法仅适用于网站用户登录。因此,当用户登录时,我的C#代码将连接一个salt +密码,对其进行散列,然后与存储在数据库中的数据进行比较。

我的问题是,在SQL服务器中,我应该存储SHA1原有(40个字符),还是将它们转换为Base64(28个字符)之后?

大部分我在网上看到的SHA1哈希算法的例子似乎最终都会将其转换为Base64,但我不确定为什么或者将编码到Base64之后存储SHA1的好处是什么。

回答

4

SHA-1散列是一个160位的值;散列解决方案将产生20个字节的输出,包括不可打印的字符。大多数实现在存储之前将其转换为可读格式,可以是十六进制(40字节)或base64(~28个字符)。

没有理由在存储之前将十六进制字符串转换为base64,所以如果您的字符串已经在十六进制中,那就让他们这样。

1

Chris Heald的答案解释了一些细节,但它未能提供关于您的问题的具体答案。

首先对密码进行哈希处理的重点是使其不可辨认且不可读。然后没有理由将其转换回base64以使其再次可读。许多实现这样做的原因主要是由于字符集和编码。使用简单的基于ASCII的字符集时,数据库和编程语言之间的实现可能略有不同,这可能会导致数据在存储和检索时丢失或修改,因此,1字符集中的特殊(罕见)字符可能不存在于另一字符中组。

相关问题