如何在Java中使用sha256来散列一些string?

如何在Java中sha256的一些string? 有没有人知道这个免费的图书馆?

SHA-256不是一个“编码” – 这是一个单向散列。

你基本上将string转换为字节(例如使用text.getBytes("UTF-8") ),然后散列字节。 请注意,哈希的结果将是任意的二进制数据,如果你想要在一个string中表示,你应该使用base64或hex … 不要尝试使用String(byte[], String)构造函数。

例如

 MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8)); 

我认为最简单的解决scheme是使用Apache Common Codec :

 String sha256hex = org.apache.commons.codec.digest.DigestUtils.sha256Hex(stringText); 

另一个select是番石榴有一个易于使用的哈希公用事业套件。 例如,要使用SHA256将string散列为hexstring,您只需执行以下操作:

 final String hashed = Hashing.sha256() .hashString("your input", StandardCharsets.UTF_8) .toString(); 

完整的例子散列string作为另一个string

 public static String sha256(String base) { try{ MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(base.getBytes("UTF-8")); StringBuffer hexString = new StringBuffer(); for (int i = 0; i < hash.length; i++) { String hex = Integer.toHexString(0xff & hash[i]); if(hex.length() == 1) hexString.append('0'); hexString.append(hex); } return hexString.toString(); } catch(Exception ex){ throw new RuntimeException(ex); } } 

如果您正在使用Java 8,则可以通过执行对byte[]进行编码

 MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8)); String encoded = Base64.getEncoder().encodeToString(hash); 

将Javastring转换为Sha-256哈希值

 import java.security.MessageDigest; public class CodeSnippets { public static String getSha256(String value) { try{ MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(value.getBytes()); return bytesToHex(md.digest()); } catch(Exception ex){ throw new RuntimeException(ex); } } private static String bytesToHex(byte[] bytes) { StringBuffer result = new StringBuffer(); for (byte b : bytes) result.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1)); return result.toString(); } } 

我通过DigestUtils跟踪了Apache代码, sha256似乎默认返回到java.security.MessageDigest进行计算。 Apache不实现独立的sha256解决scheme。 我正在寻找一个独立的实现来比较java.security库。 仅供参考。

您可以通过以下方式使用MessageDigest:

 public static String getSHA256(String data){ StringBuffer sb = new StringBuffer(); try{ MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(data.getBytes()); byte byteData[] = md.digest(); for (int i = 0; i < byteData.length; i++) { sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); } } catch(Exception e){ e.printStackTrace(); } return sb.toString(); } 
 String hashWith256(String textToHash){ MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] byteOfTextToHash=textToHash.getBytes("UTF-8"); byte[] hashedByetArray = digest.digest(byteOfTextToHash); String encoded = Base64.encode(hashedByetArray ); return encoded; }