我目前正在创建一个需要对密码进行加密并存储在数据库中的 Web 应用程序。我找到了以下使用 PBKDF2WithHmacSHA1 加密密码的指南。在提供的示例中,getEncryptedPassword 方法返回一个字节数组。
对结果进行 Base64 编码有什么好处吗?有什么缺点吗?
byte[] 数组是存储值的最小机制(存储空间方面)。如果您有很多这些值,则将它们存储为字节可能是有意义的。根据您存储结果的位置,格式也可能会有所不同。大多数数据库可以很好地容纳 byte[] 值,但它可能很麻烦(取决于数据库)。文本文件和 XML 文档等存储显然会与 byte[] 数组发生冲突。
在大多数情况下,我觉得有两种有意义的格式,十六进制表示或字节 []。我很少认为 Base64 对于短值(少于 32 个字符)的优势是值得的(对于较大的项目,当然,使用 base64,并且还有一个很棒的库)。
这显然都是主观的......
将值转换为十六进制非常简单:请参阅如何在 Java 中将字节数组转换为十六进制字符串?
与 Base64 相比,Hex 输出更方便,更易于管理,Base64 的构建算法更复杂,因此速度稍慢......
假设一个合理的数据库没有任何优势,因为它只是一种编码方案。base 64 编码会导致大小增加,这是一个缺点。如果您的数据库可靠地存储 8 位字节,只需将哈希存储在数据库中即可。