MD5加密解密工具类

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
/**
 * MD5加密解密工具类
 */
public class MD5Util {

	/**
	 * 使用 MD5算法加密生成32位md5
	 * @param str
	 * @return
	 */
	public static String string2MD5(String str) {
		byte[] secretBytes = null;
		try {
			secretBytes = MessageDigest.getInstance("md5").digest(
					str.getBytes());
		} catch (NoSuchAlgorithmException e) {
			throw new RuntimeException("没有md5这个算法!");
		}
		String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
		// 如果生成数字未满32位,需要前面补0
		for (int i = 0; i < 32 - md5code.length(); i++) {
			md5code = "0" + md5code;
		}
		return md5code;
	}
	
	/**
	 * 	可逆的加密解密算法,执行一次加密,两次解密 
	 * @param str
	 * @return
	 */
	public static String convertMD5(String str){
 
		char[] a = str.toCharArray();
		for (int i = 0; i < a.length; i++){
			a[i] = (char) (a[i] ^ 't');
		}
		String s = new String(a);
		return s;
 
	}
 
}

### JavaMD5 加密工具类的实现原理 MD5 是一种广泛使用的哈希函数,能够生成固定长度的消息摘要。需要注意的是,尽管通常会提到“加密”和“解密”,但实际上 **MD5 并不支持解密操作**[^1]。这是因为 MD5 的设计目标是提供单向散列功能,主要用于验证数据完整性而非保护敏感信息。 #### 1. 基本概念 MD5 将任意长度的数据转换成一个固定的 128 位(16 字节)消息摘要。这个过程不可逆,因此无法通过已知的摘要反推出原始输入数据。在实际应用中,这种特性使得 MD5 非常适合用来校验文件一致性或密码存储的安全性。 #### 2. 工具类的核心方法分析 以下是基于引用中的描述以及常见的 MD5 实现方式来解析其工作流程: - **初始化阶段** 在处理任何输入之前,需要先创建 MessageDigest 对象实例并指定算法名称为 "MD5"[^3]: ```java import java.security.MessageDigest; public class MyMD5Util { private static final String ALGORITHM = "MD5"; public byte[] digest(byte[] input) throws Exception { MessageDigest mdInstance = MessageDigest.getInstance(ALGORITHM); return mdInstance.digest(input); } } ``` - **更新与计算摘要** 当有新的数据块传入时,调用 `update` 方法将其加入到当前正在进行的哈希运算当中;当所有待处理的数据都提交完毕之后,则可以调用 `digest()` 来完成最终的结果生成: ```java public void update(byte[] buffer, int length){ try{ this.md.update(buffer,0,length); }catch(Exception e){ throw new RuntimeException(e.getMessage(),e); } } public byte[] getHash(){ return this.md.digest(); } ``` - **字符串编码转换** 得到字节数组形式的摘要后,还需要进一步转化为十六进制表示以便于人类阅读或者保存至数据库等环境之中[^2]: ```java public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02x", b)); } return sb.toString(); } ``` #### 3. 密码验证逻辑示例 对于用户登录场景下的身份认证来说,可以通过比较两次独立运行相同参数所产生的 MD5 结果是否一致来进行判断: ```java public boolean validPassword(String password, String storedPwdHash) { try { String hashedInputPass = hashPassword(password); return hashedInputPass.equals(storedPwdHash); } catch (Exception ex) { System.out.println("Error validating password"); return false; } } ``` 这里假设存在另一个辅助性的 `hashPassword` 函数负责执行完整的 MD5 转换链条。 --- ### 总结 综上所述,在 Java 编程环境下构建自己的 MD5 工具库并不复杂,主要依赖标准 API 提供的支持即可轻松达成目的。不过再次提醒各位开发者朋友注意区分真正的加密技术和单纯的哈希机制之间的差异之处!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值