MD5与SHA-256加密工具
在信息安全领域,数据加密是一项基本而又至关重要的技术。本文将分享一个简单的Java加密工具类——EncryptionUtil,它提供了使用MD5和SHA-256两种算法对字符串进行加密的方法。这两种算法虽不适用于现代安全标准中的敏感数据加密(如密码存储应使用bcrypt或argon2),但在一些非关键场景下,如校验数据完整性或生成简单哈希标识符时仍有一定的应用价值。
@Slf4j
public class EncryptionUtil {
private static final String MD5_ALGORITHM = "MD5";
private static final String SHA_256_ALGORITHM = "SHA-256";
/**
* 使用MD5算法对字符串进行加密
*
* @param origin 需要加密的原始字符串
* @return 经过MD5加密后生成的32位小写十六进制字符串。如果加密过程中发生异常,则返回null。
*/
public static String encryptionMD5(String origin) {
try {
MessageDigest md = MessageDigest.getInstance(MD5_ALGORITHM);
byte[] hash = md.digest(origin.getBytes());
return new BigInteger(1, hash).toString(16);
} catch (NoSuchAlgorithmException e) {
log.error("encryptMD5 error, algorithm: {}, origin: {}", MD5_ALGORITHM, origin, e);
}
return null;
}
/**
* 使用SHA-256算法对字符串进行加密
*
* @param origin 需要加密的原始字符串
* @return 经过SHA-256加密后生成的64位小写十六进制字符串。如果加密过程中发生异常,则返回null。
*/
public static String encryptionSha256(String origin) {
String encodeStr = "";
try {
MessageDigest md = MessageDigest.getInstance(SHA_256_ALGORITHM);
md.update(origin.getBytes(StandardCharsets.UTF_8));
encodeStr = byte2Hex(md.digest());
} catch (NoSuchAlgorithmException e) {
log.error("encryptionSha256 error, algorithm: {}, origin: {}", MD5_ALGORITHM, origin, e);
}
return encodeStr;
}
private static String byte2Hex(byte[] bytes) {
StringBuilder stringBuilder = new StringBuilder();
String temp;
for (byte aByte : bytes) {
temp = Integer.toHexString(aByte & 0xFF);
if (temp.length() == 1) {
//1得到一位的进行补0操作
stringBuilder.append("0");
}
stringBuilder.append(temp);
}
return stringBuilder.toString();
}
public static void main(String[] args) {
System.out.println(encryptionMD5("123456"));
System.out.println(encryptionSha256("123456"));
}
}
示例代码
String md5Result = EncryptionUtil.encryptionMD5("123456");
String sha256Result = EncryptionUtil.encryptionSha256("123456");
System.out.println("MD5 Hash: " + md5Result);
System.out.println("SHA-256 Hash: " + sha256Result);