【问题标题】:Base64 Encoding encrypted password hashesBase64 编码加密密码哈希
【发布时间】:2024-01-14 17:18:01
【问题描述】:

我目前正在创建一个需要对密码进行加密并存储在数据库中的 Web 应用程序。我发现以下Guide 使用 PBKDF2WithHmacSHA1 加密密码。 在提供的示例中,getEncryptedPassword 方法返回一个字节数组。

对结果进行 Base64 编码有什么好处吗? 有什么缺点吗?

【问题讨论】:

    标签: java security hash base64


    【解决方案1】:

    byte[] 数组是存储值的最小机制(存储空间方面)。如果您有很多这些值,则将它们存储为字节可能是有意义的。根据您存储结果的位置,格式也可能会有所不同。大多数数据库可以很好地容纳 byte[] 值,但它可能很麻烦(取决于数据库)。文本文件和 XML 文档等存储显然会与 byte[] 数组发生冲突。

    在大多数情况下,我觉得有两种有意义的格式,十六进制表示或字节[]。我很少认为 Base64 对于短值(少于 32 个字符)的优势是值得的(对于较大的项目,当然,使用 base64 和 there's a fantastic library for it too)。

    这显然都是主观的.....

    将值转换为十六进制非常简单:请参阅How to convert a byte array to a hex string in Java?

    十六进制输出比Base64更方便,更易于管理,Base64的构建算法更复杂,因此速度稍慢.....

    【讨论】:

      【解决方案2】:

      假设一个合理的数据库没有任何优势,因为它只是一种编码方案。 base 64 编码会导致大小增加,这是一个缺点。如果您的数据库可靠地存储 8 位字节,只需将哈希存储在数据库中即可。

      【讨论】: