参考文章:
Java1.8实现Base64编码解码
MD5和Base64
加密算法中BASE64、MD5、SHA、HMAC等之间的区别
Java加密算法
两者不同:
Base64
- 可逆性。
- 可以将任意的二进制数据转换为文本文件。
- 可以把非ASCII字符的数据转换成ASCII字符,避免不可见字符。
MD5
- 不可逆性。
- 任意长度的明文字符串,加密后得到的密文字符串是长度固定的(32位)。
MD5、SHA、HMAC —单向加密算法
BASE64
package base64;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
/**
* @Description TODO
* @Author YZQ 2020/7/18 15:04
*/
public class BASE64Util {
/**
* 使用Base64进行编码
*
* @param encodeContent 需要编码的内容
* @return 编码后的内容
*/
public static String encode(String encodeContent) throws UnsupportedEncodingException {
if (encodeContent == null) {
return null;
}
return Base64.getEncoder().encodeToString(encodeContent.getBytes("UTF-8"));
}
/**
* 使用Base64进行编码
*
* @param encodeText 需要编码的内容
* @return 编码后的内容
*/
public static String encode(byte[] encodeText) throws UnsupportedEncodingException {
return encode(new String(encodeText));
}
/**
* 使用Base64进行解码
*
* @param decodeContent 需要解码的内容
* @return 解码后的内容
*/
public static String decode(String decodeContent) throws UnsupportedEncodingException {
byte[] bytes = null;
if (decodeContent == null) {
return null;
}
//处理url 用Base64.getUrlDecoder() Base64.getUrlEecoder()
bytes = Base64.getDecoder().decode(decodeContent);
return new String(bytes,"UTF-8");
}
public static void main(String[] args) throws UnsupportedEncodingException {
System.out.println(encode("nihao"));
System.out.println(decode("bmloYW8="));
}
}
BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充。
MD5
package md5;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
public static String getDigest(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("error happens", e);
}
return new BigInteger(1, secretBytes).toString(16);
}
public static void main(String[] args) {
System.out.println(getDigest("nihao"));
}
}
测试
public static void main(String[] args) throws UnsupportedEncodingException {
String encodePassword = MD5Util.getDigest(BASE64Util.encode("nihao"));
System.out.println(encodePassword);
}
MessageDigest在构造的时候,可以传入一个算法,按照指定算法进行加密。
支持的算法