我目前正在创建一个Web应用程序,要求将密码加密并存储在数据库中。我发现以下Guide使用PBKDF2WithHmacSHA1加密密码。 在提供的示例中,getEncryptedPassword方法返回一个字节数组。
对Base64编码结果有什么好处吗? 有任何缺点吗?
答案 0 :(得分:1)
byte []数组是存储值的最小机制(存储空间方式)。如果你有很多这些值,将它们存储为字节可能是有意义的。根据您存储结果的位置,格式也可能有所不同。大多数数据库都能很好地适应byte []值,但它可能很麻烦(取决于数据库)。像文本文件和XML文档等商店显然会遇到byte []数组。
在大多数情况下,我觉得有两种格式有意义,十六进制表示或byte []。我很少认为Base64对短值(少于32个字符)的优势是值得的(对于较大的项目,请确保使用base64和there's a fantastic library for it too)。
这显然都是主观的......
将值转换为十六进制非常简单:请参阅How to convert a byte array to a hex string in Java?
Hex输出比Base64更方便,更易于管理,而Base64的构建算法更复杂,因此稍慢......
答案 1 :(得分:0)
假设一个合理的数据库没有优势,因为它只是一种编码方案。由于base 64编码导致大小增加,这是一个缺点。如果数据库可靠地存储8位字节,则只需将哈希值存储在数据库中。