Files
timi-utils/src/main/java/com/imyeyu/utils/Digest.java
2026-01-04 15:26:45 +08:00

117 lines
3.3 KiB
Java

package com.imyeyu.utils;
import de.mkammerer.argon2.Argon2;
import de.mkammerer.argon2.Argon2Factory;
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @author 夜雨
* @version 2023-08-07 14:27
*/
public class Digest {
public static String md5(String data) {
return md5(data, StandardCharsets.UTF_8);
}
public static String md5(String data, Charset charset) {
return md5(data.getBytes(charset));
}
public static String md5(byte[] data) {
try {
if (data == null || data.length == 0) {
return null;
}
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(data);
byte[] bytes = md5.digest();
char[] chars = new char[bytes.length * 2];
for (int i = 0, j = 0; i < bytes.length; i++) {
chars[j++] = Text.HEX_DIGITS_LOWER[bytes[i] >>> 4 & 0xF];
chars[j++] = Text.HEX_DIGITS_LOWER[bytes[i] & 0xF];
}
return new String(chars);
} catch (NoSuchAlgorithmException e) {
throw new UnsupportedOperationException("unsupported md5 digest");
}
}
public static String sha1(String data) {
return sha1(data, StandardCharsets.UTF_8);
}
public static String sha1(String data, Charset charset) {
return sha1(data.getBytes(charset));
}
public static String sha1(byte[] bytes) {
try {
MessageDigest sha = MessageDigest.getInstance("SHA");
sha.update(bytes);
return Encoder.hex(sha.digest());
} catch (NoSuchAlgorithmException e) {
throw new UnsupportedOperationException("unsupported sha1 digest");
}
}
public static String sha256(String data) {
return sha256(data, StandardCharsets.UTF_8);
}
public static String sha256(String data, Charset charset) {
return sha256(data.getBytes(charset));
}
public static String sha256(byte[] bytes) {
try {
MessageDigest sha = MessageDigest.getInstance("SHA-256");
sha.update(bytes);
return Encoder.hex(sha.digest());
} catch (NoSuchAlgorithmException e) {
throw new UnsupportedOperationException("unsupported sha256 digest");
}
}
public static String sha512(String data) {
return sha512(data, StandardCharsets.UTF_8);
}
public static String sha512(String data, Charset charset) {
return sha512(data.getBytes(charset));
}
public static String sha512(byte[] bytes) {
try {
MessageDigest sha = MessageDigest.getInstance("SHA-512");
BigInteger number = new BigInteger(1, sha.digest(bytes));
StringBuilder result = new StringBuilder(number.toString(16));
while (result.length() < 64) {
result.insert(0, "0");
}
return result.toString();
} catch (NoSuchAlgorithmException e) {
throw new UnsupportedOperationException("unsupported sha512 digest");
}
}
public static String argon2id(String password) {
return argon2id(10, 65536, 1, password);
}
public static String argon2id(int iterations, int memory, int parallelism, String password) {
Argon2 argon2id = Argon2Factory.create(Argon2Factory.Argon2Types.ARGON2id);
return argon2id.hash(iterations, memory, parallelism, password.toCharArray());
}
public static boolean argon2idVerify(String passwordHash, String password) {
Argon2 argon2id = Argon2Factory.create(Argon2Factory.Argon2Types.ARGON2id);
return argon2id.verify(passwordHash, password.toCharArray());
}
}