如何在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; }