Created
March 3, 2015 03:04
-
-
Save lovio/a10657c2b8a1daed4bb0 to your computer and use it in GitHub Desktop.
md5 in Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* java的MD5算法,来自又拍云 | |
*/ | |
/** | |
* 对字符串进行 MD5 加密 | |
* | |
* @param str | |
* 待加密字符串 | |
* | |
* @return 加密后字符串 | |
*/ | |
public static String md5(String str) { | |
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', | |
'a', 'b', 'c', 'd', 'e', 'f' }; | |
MessageDigest md5 = null; | |
try { | |
md5 = MessageDigest.getInstance("MD5"); | |
md5.update(str.getBytes(UTF8)); | |
} catch (NoSuchAlgorithmException e) { | |
e.printStackTrace(); | |
throw new RuntimeException(e.getMessage()); | |
} catch (UnsupportedEncodingException e) { | |
e.printStackTrace(); | |
throw new RuntimeException(e.getMessage()); | |
} | |
byte[] encodedValue = md5.digest(); | |
int j = encodedValue.length; | |
char finalValue[] = new char[j * 2]; | |
int k = 0; | |
for (int i = 0; i < j; i++) { | |
byte encoded = encodedValue[i]; | |
finalValue[k++] = hexDigits[encoded >> 4 & 0xf]; | |
finalValue[k++] = hexDigits[encoded & 0xf]; | |
} | |
return new String(finalValue); | |
} | |
/** | |
* 对文件进行 MD5 加密 | |
* | |
* @param file | |
* 待加密的文件 | |
* | |
* @return 文件加密后的 MD5 值 | |
* @throws IOException | |
*/ | |
public static String md5(File file) throws IOException { | |
FileInputStream is = new FileInputStream(file); | |
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', | |
'a', 'b', 'c', 'd', 'e', 'f' }; | |
MessageDigest md5 = null; | |
try { | |
md5 = MessageDigest.getInstance("MD5"); | |
int n = 0; | |
byte[] buffer = new byte[1024]; | |
do { | |
n = is.read(buffer); | |
if (n > 0) { | |
md5.update(buffer, 0, n); | |
} | |
} while (n != -1); | |
is.skip(0); | |
} catch (NoSuchAlgorithmException e) { | |
e.printStackTrace(); | |
throw new RuntimeException(e.getMessage()); | |
} finally { | |
is.close(); | |
} | |
byte[] encodedValue = md5.digest(); | |
int j = encodedValue.length; | |
char finalValue[] = new char[j * 2]; | |
int k = 0; | |
for (int i = 0; i < j; i++) { | |
byte encoded = encodedValue[i]; | |
finalValue[k++] = hexDigits[encoded >> 4 & 0xf]; | |
finalValue[k++] = hexDigits[encoded & 0xf]; | |
} | |
return new String(finalValue); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment