我需要在我的SQL数据库中存储密码。目前不需要太高的安全性,但我没有使用带种子的MD5哈希,而是计划使用SHA1 +种子来存储我的密码。
用法仅限于网站用户登录。因此,当用户登录时,我的C#代码将连接salt +密码,哈希,然后与存储在数据库中的数据进行比较。
我的问题是在SQL服务器中,我应该存储SHA1的原样(40个字符),还是将它们转换为Base64(28个字符)后?
我在网上看到的大部分SHA1哈希示例似乎最终将其转换为Base64,但我不确定,为什么或在编码到Base64后存储SHA1的好处是什么。
答案 0 :(得分:4)
SHA-1哈希是一个160位的值;散列解决方案将产生20个字节的输出,包括不可打印的字符。大多数实现在存储之前将其转换为可读格式,可以是十六进制(40字节),也可以是base64(~28个字符)。
没有理由在存储之前将十六进制字符串转换为base64,所以如果你的字符串已经是十六进制,那么就这样离开吧。
答案 1 :(得分:1)
Chris Heald的答案解释了一些细节,但未能就你的问题提供具体的答案。
首先对密码进行哈希处理的重点是使其无法识别,无法识别且不可读。没有理由将其转换回base64以使其再次可读。许多实现的原因主要是因为字符集和编码。当使用简单的基于ASCII的字符集时,数据库和编程语言之间的实现可能略有不同,这可能导致存储和检索时数据丢失或修改,因此,1个字符集中的特殊(不常见)字符可能不存在于另一个字符中集。