如何在 Java 中使用 SHA-256 对某个字符串进行哈希处理?
如何在 Java 中使用 SHA-256
对某些 String
进行哈希处理?
How can I hash some String
with SHA-256
in Java?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何在 Java 中使用 SHA-256
对某些 String
进行哈希处理?
How can I hash some String
with SHA-256
in Java?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(17)
SHA-256 不是一种“编码”——它是一种单向哈希。
您基本上将字符串转换为字节(例如使用text.getBytes(StandardCharsets.UTF_8)),然后对字节进行哈希处理。请注意,哈希的结果也是任意二进制数据,如果您想在字符串中表示它,您应该使用 base64 或十六进制...不要尝试使用 < code>String(byte[], String) 构造函数。
例如
SHA-256 isn't an "encoding" - it's a one-way hash.
You'd basically convert the string into bytes (e.g. using
text.getBytes(StandardCharsets.UTF_8)
) and then hash the bytes. Note that the result of the hash would also be arbitrary binary data, and if you want to represent that in a string, you should use base64 or hex... don't try to use theString(byte[], String)
constructor.e.g.
我认为最简单的解决方案是使用 Apache Common Codec:
I think that the easiest solution is to use Apache Common Codec:
完整示例哈希到字符串作为另一个字符串。
Full example hash to string as another string.
另一种选择是 Guava,它具有易于使用的哈希实用程序。例如,要使用 SHA256 作为十六进制字符串对字符串进行哈希处理,您只需执行以下操作:
Another alternative is Guava which has an easy-to-use suite of Hashing utilities. For example, to hash a string using SHA256 as a hex-string you would simply do:
如果您使用的是 Java 8,您可以通过以下方式对
byte[]
进行编码If you are using Java 8 you can encode the
byte[]
by doing我通过
DigestUtils
跟踪 Apache 代码,sha256
似乎默认返回到java.security.MessageDigest
进行计算。 Apache 没有实现独立的 sha256 解决方案。我一直在寻找一个独立的实现来与 java.security 库进行比较。仅供参考。I traced the Apache code through
DigestUtils
andsha256
seems to default back tojava.security.MessageDigest
for calculation. Apache does not implement an independentsha256
solution. I was looking for an independent implementation to compare against thejava.security
library. FYI only.此方法返回左填充的
String
,其中包含零:Java 10
及其后:Java 8
:顺便说一句,您可以使用
"%064X "
表示大写结果。例子:
与 Linux cmd 的比较:
This method return a left padded
String
with zero:Java 10
and after:Java 8
:BTW, you can use
"%064X"
for an uppercase result.Example:
Comparison to Linux cmd:
这是将摘要转换为十六进制字符串的稍微更高效的方法:
有谁知道 Java 中更快的方法吗?
Here is a slightly more performant way to turn the digest into a hex string:
Does anyone know of a faster way in Java?
在Java 8中
In Java 8
这是我使用 Kotlin 的方法:
This was my approach using Kotlin:
这就是我用于散列的内容:
输出:5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
This is what i have been used for hashing:
Output: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
您可以通过以下方式使用 MessageDigest:
You can use MessageDigest in the following way:
在Java中,MessageDigest类用于计算加密哈希值。此类提供加密哈希函数(MD5、SHA-1 和 SHA-256)来查找文本的哈希值。
使用 SHA-256 算法的代码示例。
In Java, MessageDigest class is used to calculate cryptographic hashing value. This class provides cryptographic hash function ( MD5, SHA-1 and SHA-256) to find hash value of text.
Code example for using SHA-256 algorithm.
以下方法展示了如何使用
sha-256
对String
进行哈希处理算法并将结果编码为
hex
格式。这是在数据库中散列和存储密码的常用格式:Here's a method that shows how to hash a
String
with thesha-256
algorithm and encode the result in
hex
format. This is an often used format to hash and store passwords in a database: