YumCore/src/main/java/pw/yumc/YumCore/kit/HashKit.java

129 lines
3.0 KiB
Java

package pw.yumc.YumCore.kit;
import java.security.MessageDigest;
public class HashKit {
private static java.security.SecureRandom random = new java.security.SecureRandom();
/**
* 生成种子
* <p>
* md5 128bit 16bytes
* <p>
* sha1 160bit 20bytes
* <p>
* sha256 256bit 32bytes
* <p>
* sha384 384bit 48bites
* <p>
* sha512 512bit 64bites
* <p>
*
* @param numberOfBytes
* 数字比特
* @return 种子字串
*/
public static String generateSalt(int numberOfBytes) {
byte[] salt = new byte[numberOfBytes];
random.nextBytes(salt);
return toHex(salt);
}
/**
* 字符串加密
*
* @param algorithm
* 算法
* @param srcStr
* 字符串
* @return 加密后的字符串
*/
public static String hash(String algorithm, String srcStr) {
try {
StringBuilder result = new StringBuilder();
MessageDigest md = MessageDigest.getInstance(algorithm);
return merge(result, md.digest(srcStr.getBytes("utf-8"))).toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* MD5加密
*
* @param srcStr
* 字符串
* @return 加密后的字符串
*/
public static String md5(String srcStr) {
return hash("MD5", srcStr);
}
/**
* sha1加密
*
* @param srcStr
* 字符串
* @return 加密后的字符串
*/
public static String sha1(String srcStr) {
return hash("SHA-1", srcStr);
}
/**
* sha256加密
*
* @param srcStr
* 字符串
* @return 加密后的字符串
*/
public static String sha256(String srcStr) {
return hash("SHA-256", srcStr);
}
/**
* sha384加密
*
* @param srcStr
* 字符串
* @return 加密后的字符串
*/
public static String sha384(String srcStr) {
return hash("SHA-384", srcStr);
}
/**
* sha512加密
*
* @param srcStr
* 字符串
* @return 加密后的字符串
*/
public static String sha512(String srcStr) {
return hash("SHA-512", srcStr);
}
/**
* Byte转字符串
*
* @param bytes
* Byte数组
* @return 字符串
*/
private static String toHex(byte[] bytes) {
return merge(new StringBuilder(), bytes).toString();
}
private static StringBuilder merge(StringBuilder result, byte[] bytes) {
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1) {
result.append("0");
}
result.append(hex);
}
return result;
}
}