java BASE64 和 MD5 加密解密

参考文章:
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的倍数,如果不够位数以=符号填充。
java BASE64 和 MD5 加密解密_第1张图片
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在构造的时候,可以传入一个算法,按照指定算法进行加密。
支持的算法
java BASE64 和 MD5 加密解密_第2张图片

你可能感兴趣的:(Java)