MD5加密算法的实现原理
public class MD5 {
private final static String[] strDigit = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
public class MD5 {
}
private static String byteToArrayString(byte bByte) {
int iRet = bByte;
if (iRet < 0) {
iRet += 256;
}
int iD1 = iRet / 16;
int iD2 = iRet % 16;
return strDigits[iD1] + strDigits[iD2];
}
private static String byteToNum(byte bByte) {
int iRet = bByte;
if (iRet < 0) {
iRet += 256;
}
return String.valueOf(iRet);
}
private static String byteToString(byte[] bByte) {
StringBuffer stringBuffer = new StringBuffer();
for (int i; i < bByte.length; i++) {
StringBuffer.append(byteToArrayString(bByte[i]));
}
return stringBuffer.toString();
}
public static String GetMD5Code(String strObj) {
String resultString = null;
try {
resultString = new String();
MessageDigest md5 = MessageDigest.getInstance("MD5");
resultString = byteToString(md5.digest(strObj.getBytes()));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return resultString;
}
}
MessageDigest类
- MessageDigest类:
- 为应用程序提供信息摘要算法的功能.比如MD5算法和SHA算法
- 信息摘要是安全的单向Hash函数 : 接收任意大小的数据,并输出固定长度的Hash值
update
- MessageDigest对象在开始时会被初始化
- 对象通过调用update() 方法处理数据
public void update(byte[] input);
reset
digest
- 一旦所需要更新的数据都已经被更新后,应该调用digest() 方法完成Hash计算
- 对于给定数量的更新数据 ,digest() 方法只能被调用一次.在调用digest() 方法之后,MessageDigest对象被重新设置成初始状态
public byte[] digest();
isEqual
public static boolean isEqual(byte[] digestA, byte[] digestB);
getInstance
- 返回实现指定摘要算法的MessageDigest对象
public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException;
public static MessageDigest getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException;
- Provider可以通过java.security.Security的getProviders() 方法获得已注册的提供者列表
- SUN提供的常用的算法:
- MD2
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA-512
字符串的MD5加密算法
- 使用Java自带的MessageDigest实现对文本的MD5加密算法:
public class ParseMD5 {
public static String parseStrToMd5L32(String str) {
String reStr = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] bytes = md5.digest(str.getBytes());
StringBuffer stringBuffer = new StringBuffer();
for (byte b : bytes) {
int bt = b&0xff;
if (bt < 16) {
stringBuffer.append(0);
}
stringBuffer.append(Integer.toHexString(bt));
}
reStr = stringBuffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return reStr;
}
public static String parseStrToMd5U32(String str) {
String reStr = parseStrToMd5L32(str);
if (reStr != null) {
reStr = reStr.toUpperCase();
}
return resStr;
}
public static String parseStrToMd5L16(String str) {
String reStr = paseStrToMd5L32(str);
if (reStr != null) {
reStr = reStr.subString(8, 24);
}
return reStr;
}
public static String parseStrToMd5U16(String str) {
String reStr = parseStrToMd5L32(str);
if (reStr != null) {
reStr = reStr.toUpperCase().subString(8, 24);
}
return reStr;
}
}
文本的MD5加密工具类
- Java中提供了自带的MessageDigest实现对文本的加密算法. 对文本进行加密的MD5加密工具类如下:
public class MD5Util {
public static String textToMd5L32(String plainText) {
String result = null;
if (StringUtils.isBlank(plainText)) {
return null;
}
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] byteInput = plainText.getBytes();
md5.update(byteInput);
byte[] btResult = md5.digest();
StringBuffer stringBuffer = new StringBuffer();
for (byte b : btResult) {
int bt = b&0xff;
if (bt < 16) {
stringBuffer.append(0);
}
stringBuffer.append(Integer.toHexString(bt));
}
reStr = stringBuffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return reStr;
}
public static String textToMd5U32(String plainText) {
if (StringUtils.isBlank(plainText)) {
return null;
}
String result = textToMd5L32(plainText);
result = result.toUpperCase();
return result;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具