使用Base64 over Hex来编码我的SHA-1哈希是否会降低其安全性?

时间:2010-12-27 05:06:23

标签: hex base64 sha1

在线的许多示例都将哈希显示为十六进制表示,它们通常是自定义实现。使用Apache Commons Base64编码是否有任何错误或不太安全?在阅读有关编码的内容时,通常在如何将二进制文件表示为XML中的文本的范围内,但不一定讨论安全性问题......以及压缩是如何工作的。

在一个相关的问题上,为什么要编码所有,因为数据库具有可能将加密保存为二进制的二进制类型?因此,如果我存储密码,为什么不将其存储在其原生类型中?

4 个答案:

答案 0 :(得分:4)

编码仅影响数据的表示,而不影响其安全性。所以,如果你发送一个未加密的密码并使用某种形式的编码,你就不会使它更安全;同样,如果你采用一些高度加密的文本然后用某种编码方案来表示它,那也不会使它不那么安全。通常,使用这种编码形式的原因是使用协议(例如SMTP)发送二进制数据,其中协议只能支持7位ASCII文本。另一个用途是在URL中,URL可以支持的字符集是有限的,但您可能希望在该URL中放置任意复杂的二进制数据(例如某种验证签名)。

答案 1 :(得分:3)

完全没有。它只是一个代表ASCII中相同位的编码。当您必须通过旨在仅处理文本的通信路径存储或传输二进制数据时,它非常有用。现代例子是电子邮件和Web界面。您也无法将二进制表单发送到终端进行查看,因为它会导致垃圾或奇怪的终端行为。

如果可以安全地将二进制blob中的位存储在数据库中,则没有理由在base64中进行编码。但如果你不这样做,那就更难看了。您必须先将其转换回文本表单。

答案 2 :(得分:1)

嗯,我们通常不会很好地阅读二进制文件,而十六进制是一个更好的替代品。我希望你已经链接到你引用的文章,所以其他人可以直接了解你正在形成的意见。

我不明白为什么他们会使用Base64而不是十六进制,但我假设它是因为十六进制是16位而Base64是更多,因此生成一个更紧凑的实际版本哈希;)〜我们人类往往会更好地一次吸收少量数据。

答案 3 :(得分:1)

不,因为Base64是1:1编码(也就是说,对于每个输入只有一个base64编码输出,反之亦然),base64编码SHA1哈希就像十六进制编码一样“安全” (或二进制编码,就此而言)哈希。

如果编码使得多个哈希值可以编码为相同的字符串,或者多个字符串可以解码为相同的哈希值,则编码只会使哈希不安全。

相关问题