平时写程序时候,经常需要计算哈希值(MessageDigest摘要),如MD5、SHA1、SHA256等等,不妨做一个工具类,要用到的时候,一个方法调用就可以了,方便省事,下面是我使用的工具类,原生Java,无依赖。
Javascript版本实现哈希算法,请查看:https://blog.terrynow.com/2021/05/05/javascript-html-hash-tool-md5-sha1-sha256/
HashUtil.java
要用的时候,直接HashUtil.sha1("123456");HashUtil.md5("123456");HashUtil.hash("123456", "SHA-512");
public class HashUtil {
public static void main(String[] args) {
//SHA1
System.out.println(HashUtil.sha1("123456"));//7c4a8d09ca3762af61e59520943dc26494f8941b
//SHA-256
System.out.println(HashUtil.sha256("123456"));//8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
//MD5
System.out.println(HashUtil.md5("123456"));//e10adc3949ba59abbe56e057f20f883e
//可以直接指定算法,如:SHA1、SHA-224、SHA-256、SHA-284、SHA-512、MD5
System.out.println(HashUtil.hash("123456", "SHA-512"));
System.out.println(HashUtil.hash("123456", "MD5"));
}
public static String sha1(String source) {
return hash(source, "SHA1");
}
public static String md5(String source) {
return hash(source, "MD5");
}
public static String sha256(String source) {
return hash(source, "SHA-256");
}
public static String hash(String source, String algorithm) {
if (source == null || source.length() == 0) {
return null;
}
try {
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
messageDigest.update(source.getBytes(StandardCharsets.UTF_8));
return bytesToHex(messageDigest.digest());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static final byte[] HEX_ARRAY = "0123456789abcdef".getBytes(StandardCharsets.US_ASCII);
/**
* 把bytes转化成十六进制string
*/
private static String bytesToHex(byte[] bytes) {
byte[] hexChars = new byte[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars, StandardCharsets.UTF_8);
}
}
public class HashUtil {
public static void main(String[] args) {
//SHA1
System.out.println(HashUtil.sha1("123456"));//7c4a8d09ca3762af61e59520943dc26494f8941b
//SHA-256
System.out.println(HashUtil.sha256("123456"));//8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
//MD5
System.out.println(HashUtil.md5("123456"));//e10adc3949ba59abbe56e057f20f883e
//可以直接指定算法,如:SHA1、SHA-224、SHA-256、SHA-284、SHA-512、MD5
System.out.println(HashUtil.hash("123456", "SHA-512"));
System.out.println(HashUtil.hash("123456", "MD5"));
}
public static String sha1(String source) {
return hash(source, "SHA1");
}
public static String md5(String source) {
return hash(source, "MD5");
}
public static String sha256(String source) {
return hash(source, "SHA-256");
}
public static String hash(String source, String algorithm) {
if (source == null || source.length() == 0) {
return null;
}
try {
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
messageDigest.update(source.getBytes(StandardCharsets.UTF_8));
return bytesToHex(messageDigest.digest());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static final byte[] HEX_ARRAY = "0123456789abcdef".getBytes(StandardCharsets.US_ASCII);
/**
* 把bytes转化成十六进制string
*/
private static String bytesToHex(byte[] bytes) {
byte[] hexChars = new byte[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars, StandardCharsets.UTF_8);
}
}
public class HashUtil { public static void main(String[] args) { //SHA1 System.out.println(HashUtil.sha1("123456"));//7c4a8d09ca3762af61e59520943dc26494f8941b //SHA-256 System.out.println(HashUtil.sha256("123456"));//8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 //MD5 System.out.println(HashUtil.md5("123456"));//e10adc3949ba59abbe56e057f20f883e //可以直接指定算法,如:SHA1、SHA-224、SHA-256、SHA-284、SHA-512、MD5 System.out.println(HashUtil.hash("123456", "SHA-512")); System.out.println(HashUtil.hash("123456", "MD5")); } public static String sha1(String source) { return hash(source, "SHA1"); } public static String md5(String source) { return hash(source, "MD5"); } public static String sha256(String source) { return hash(source, "SHA-256"); } public static String hash(String source, String algorithm) { if (source == null || source.length() == 0) { return null; } try { MessageDigest messageDigest = MessageDigest.getInstance(algorithm); messageDigest.update(source.getBytes(StandardCharsets.UTF_8)); return bytesToHex(messageDigest.digest()); } catch (Exception e) { e.printStackTrace(); return null; } } private static final byte[] HEX_ARRAY = "0123456789abcdef".getBytes(StandardCharsets.US_ASCII); /** * 把bytes转化成十六进制string */ private static String bytesToHex(byte[] bytes) { byte[] hexChars = new byte[bytes.length * 2]; for (int j = 0; j < bytes.length; j++) { int v = bytes[j] & 0xFF; hexChars[j * 2] = HEX_ARRAY[v >>> 4]; hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; } return new String(hexChars, StandardCharsets.UTF_8); } }
文章评论