参考资料:
- https://www.cnblogs.com/miracle-luna/p/11879447.html
- https://blog.csdn.net/u010197591/article/details/51483559 ```java import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;
/**
Created by Miracle Luna on 2019/11/18 */ public class Md5Util {
/**
- 将数据进行 MD5 32加密,并以16进制字符串格式输出
- @param data
@return */ public static String encrypt32(String data) { StringBuilder sb = new StringBuilder(); try {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] md5 = md.digest(data.getBytes(StandardCharsets.UTF_8));
// 将字节数据转换为十六进制
for (byte b : md5) {
String bytes = Integer.toHexString(b & 0xff);
if (bytes.length() == 1){
sb.append(0);
}
sb.append(bytes);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} return sb.toString(); }
/**
* @Description:加密-16位小写
* @author:liuyc
* @time:2016年5月23日 上午11:15:33
*/
public static String encrypt16(String encryptStr) {
return encrypt32(encryptStr).substring(8, 24);
}
}
```java
public static void main(String[] args) {
String password = "password";
String encrypt32 = encrypt32(password);
System.out.println("MD5 32位: " + encrypt32);
System.out.println("MD5 16位: " + encrypt32.substring(8, 24));
}
MD5 32位: 5f4dcc3b5aa765d61d8327deb882cf99 MD5 16位: 5aa765d61d8327de
注:
- 测试可行,但由于Java版本限制,实际上这些接口并不适配较低的Android版本,不建议在Android上用