为什么在存储之前将SHA1转换为base64?

时间:2011-11-06 06:36:22

标签: c# sql-server-2008 hash sha1

我需要在我的SQL数据库中存储密码。目前不需要太高的安全性,但我没有使用带种子的MD5哈希,而是计划使用SHA1 +种子来存储我的密码。

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

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

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

2 个答案:

答案 0 :(得分:4)

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

没有理由在存储之前将十六进制字符串转换为base64,所以如果你的字符串已经是十六进制,那么就这样离开吧。

答案 1 :(得分:1)

Chris Heald的答案解释了一些细节,但未能就你的问题提供具体的答案。

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