我们在日常开发中,不管是密码加密亦或者文件取md5值,都会用到Md5,下面就给出了这两种使用情况
一、使用md5进行密码加密
/**
* MD5加密
*
* @param password 要加密的值
* @param salt 密码的"盐"
* @return
*/
public static String encode(String password, String salt) {
password = password + salt;
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
throw new RuntimeException(e);
}
char[] charArray = password.toCharArray();
byte[] byteArray = new byte[charArray.length];
for (int i = 0; i < charArray.length; i++)
byteArray[i] = (byte) charArray[i];
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
二、文件类取md5
/**
* 文件类取MD5
*
* @param file
* @return
*/
public static String fileMD5(File file) {
try (InputStream stream = Files.newInputStream(file.toPath(), StandardOpenOption.READ)) {
return streamMD5(stream);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 输入流取MD5
*
* @param stream
* @return
*/
public static String streamMD5(InputStream stream) {
MessageDigest md5 = null;
byte[] byteArray = null;
try {
md5 = MessageDigest.getInstance("MD5");
byteArray = toByteArray(stream);
} catch (Exception e) {
throw new RuntimeException(e);
}
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
public static byte[] toByteArray(InputStream input) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 4];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}
return output.toByteArray();
}
暂时只有这两个,后续更新......