MD5
计算字符串或文件的特征码(数字指纹), 不可逆, 因为任何文件或字符串算出来的md5都是32位!
2、对MD5进行”加盐”处理, 增强安全性
MD5(password)->MD5(password + 用户昵称 + 用户id…)
怎样进行MD5加密呢:
先拿到MessageDigest 对象的实例; getinstance(“MD5”); (ctrl+Y 反向快捷键)
//StringBuffer
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容为 “start” 的字符串缓冲区对象,则此方法调用 z.append(“le”) 会使字符串缓冲区包含 “startle”,而 z.insert(4, “le”) 将更改字符串缓冲区,使之包含 “starlet”。
与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
MD5加密算法:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Main {
public static void main(String[] args) {
String s = "123456";
try {
MessageDigest instance = MessageDigest.getInstance("MD5");
byte[] digest = instance.digest(s.getBytes()); //对字符串进行加密 返回字节数组,该字节数组由于被加密
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
int i = b&0xff; //获取字节的低8位的有效值。
String hexString = Integer.toHexString(i); //将整数转换成16进制;
System.out.println(hexString);
if(hexString.length()<2){
hexString= "0"+hexString;
}
sb.append(hexString);
}
System.out.println("md5:"+sb.toString());
System.out.println("md5的长度"+sb.toString().toString().length()); //md5 32位。
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
封装好的Md5加密方法:
public final static String MD5Encoder(String s) {
try {
byte[] btInput = s.getBytes("utf-8");
MessageDigest mdInst = MessageDigest.getInstance("MD5");
mdInst.update(btInput);
byte[] md = mdInst.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < md.length; i++) {
int val = ((int) md[i]) & 0xff;// 0xff == 255
if (val < 16){
sb.append("0");
}
sb.append(Integer.toHexString(val));
}
return sb.toString();
}catch (Exception e) {
return null;
}
}