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

本文关键字:SHA1 转换 base64 存储 为什么 | 更新日期: 2023-09-27 18:13:34

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

用法将简单地用于网站用户登录。因此,当用户登录时,我的c#代码将连接一个salt+密码,散列它,然后与存储在数据库中的内容进行比较。

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

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

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

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

在存储之前没有理由将十六进制字符串转换为base64,所以如果你的字符串已经是十六进制的,就保持这种方式。

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

散列密码的全部意义首先是使其不可猜测、不可识别和不可读。那么没有理由将其转换回base64以使其再次可读。许多实现之所以这样做,主要是因为字符集和编码。当使用简单的基于ASCII的字符集时,不同数据库和编程语言之间的实现可能略有不同,这可能导致存储和检索时数据丢失或修改,因此,一个字符集中的特殊(不常见)字符可能在另一个字符集中不存在。