【发布时间】:2016-01-10 04:33:42
【问题描述】:
我一直在研究 Java 字符串加密技术,不幸的是我没有找到任何好的教程,如何在 Java 中使用 SHA-512 对字符串进行哈希处理;我阅读了一些关于 MD5 和 Base64 的博客,但它们并没有我想的那么安全(实际上,Base64 不是一种加密技术),所以我更喜欢 SHA-512。
【问题讨论】:
-
SHA2 也不是一种加密技术。它是一系列加密安全散列函数,它可以用于消息摘要,而不是加密(至少在正常模式下没有)。您需要多描述一下您想要做什么。除此之外,您的 MD5 代码也应该与其他哈希算法一起使用,只需交换算法名称即可。它们的输出都是二进制 byte[] 数组,因此您可能希望使用 base64 或 binhex 来仅生成 ascii 的结果。
-
SHA-512 也不是加密算法。实际上,它是专门设计用来“解密”这种散列算法产生的摘要的。你想达到什么目标?
-
Java 字符串包含有效的 Unicode。获取某些字符集中的字节(如 UTF-8)然后对其进行加密会产生无法正确转换为字符串(用于解密)的字节,当然不是需要正确序列的 UTF-8。因此,通常会添加 Base64 以将加密字节转换为 ASCII。
-
没有加密算法可以做你想做的事。要么你想要加密(但如果目标是存储密码,你不应该这样做),并且你需要一个密钥来加密/解密。或者你想要一个盐和一个摘要函数(你想要一个散列函数,尽管 SHA-512 被认为对于这种用法来说太弱了)。加盐+摘要的原理是你可以通过重新加盐和重新消化来检查提交的密码是否正确,然后检查结果是否与存储在数据库中的相同。但是无法将结果反转并得到原始密码。
-
使用 PBKDF2WithHmacSHA1(JDK 自带)或 BCrypt。但首先,学习加密的原理。
标签: java security hash passwords sha512