一、对密码进行加密,当我们从前台获取到用户输入的密码后,并不直接把密码存入数据库,而是把密码传入下面我们写的工具类的静态的方法的strToMD5(String str),传入进来之后会把密码字符串转换为相应的字节码,byte[] input = str.getBytes();,之后再把转换后的字节码传入bytesToMD5(byte[] input)这个方法中,声明采用MD5加密算法,对传入的字节码进行MD5加密,得到一个字节数组,得到字节数组之后,在把数组的每一个字节转换为16进制,bytesToHex(byte[] bytes),最后把转换后的每一个16进制拼接成字符串,最终返回,存入到数据库中。
下面是具体方法实现:
package com.brick.squad.util;
import java.io.File;
import java.io.FileInputStream;
import java.security.MessageDigest;
/**
*
*
*MD5算法加密
*/
public class SecurityUtil {
/**
* 把字节数组转成16进位制数
* @param bytes
* @return
*/
public static String bytesToHex(byte[] bytes) {
StringBuffer md5str = new StringBuffer();
//把数组每一字节换成16进制连成md5字符串
int digital;
for (int i = 0; i < bytes.length; i++) {
digital = bytes[i];
if(digital < 0) {
digital += 256;
}
if(digital < 16){
md5str.append("0");
}
md5str.append(Integer.toHexString(digital));
}
return md5str.toString().toUpperCase();
}
/**
* 把字节数组转换成md5
* @param input
* @return
*/
public static String bytesToMD5(byte[] input) {
String md5str = null;
try {
//创建一个提供信息摘要算法的对象,初始化为md5算法对象
MessageDigest md = MessageDigest.getInstance("MD5");
//计算后获得字节数组
byte[] buff = md.digest(input);
//把数组每一字节换成16进制连成md5字符串
md5str = bytesToHex(buff);
} catch (Exception e) {
e.printStackTrace();
}
return md5str;
}
/**
* 把字符串转换成md5
* @param str
* @return
*/
public static String strToMD5(String str) {
byte[] input = str.getBytes();
return bytesToMD5(input);
}
/**
* 把文件转成md5字符串
* @param file
* @return
*/
public static String fileToMD5(File file) {
if(file == null) {
return null;
}
if(file.exists() == false) {
return null;
}
if(file.isFile() == false) {
return null;
}
FileInputStream fis = null;
try {
//创建一个提供信息摘要算法的对象,初始化为md5算法对象
MessageDigest md = MessageDigest.getInstance("MD5");
fis = new FileInputStream(file);
byte[] buff = new byte[1024];
int len = 0;
while(true) {
len = fis.read(buff, 0, buff.length);
if(len == -1){
break;
}
//每次循环读取一定的字节都更新
md.update(buff,0,len);
}
//关闭流
fis.close();
//返回md5字符串
return bytesToHex(md.digest());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}