浅谈常见的七种加密算法及实现
链接: https://blog.csdn.net/baidu_22254181/article/details/82594072.
常见的 对称加密 算法主要有 DES、3DES、AES 等,常见的 非对称算法 主要有 RSA、DSA 等,散列算法 主要有 SHA-1、MD5 等。
MD5算法(Message-Digest Algorithm 5(信息-摘要算法))
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class MD5Demo {
public static void main(String[] args) {
String password = "admin12345";
try {
//确定md5加密算法
MessageDigest md = MessageDigest.getInstance("md5");
//通过md5计算摘要;返回的是字节数组,是不可清晰读取的,所以需要再次转换成可读字符串
byte [] bytes = md.digest(password.getBytes("UTF-8"));//[116, -120, -29, 49, -72, -74, 78, 87, -108, -38, 63, -92, -21, 16, -83, 93]
//下对加密后的MD5值直接输出字符串是乱码,所以要用一个编码算法重新转成一个可读的字符串
String mdstr = new String(bytes);//t��1��NW��?���]
// a-z A-Z 0-9 / BASE64编码算法,转成可读的字符串
//jdk1.8版本,将将MD5值转成可读字符串
String str = Base64.getEncoder().encodeToString(bytes);//dIjjMbi2TleU2j+k6xCtXQ==
//还原成md5值
byte[] bs = new BASE64Decoder().decodeBuffer(str);//[116, -120, -29, 49, -72, -74, 78, 87, -108, -38, 63, -92, -21, 16, -83, 93]
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}