最近看张孝祥的视频。对以前的知识有了一些新的收获,现在记录下来
代码来自 https://code.google.com/p/howbuy/source/browse/trunk/project_palmtopfund/PalmtopFund/src/howbuy/android/util/MD5Utils.java?spec=svn233&r=233
package howbuy.android.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
public static void main(String[] args) throws Exception{
}
public static String toMD5(String origin) throws RuntimeException{
MessageDigest digest = null;
try {
digest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("md5");
}
byte[] results = digest.digest(origin.getBytes());//字节 二进制存储
String md5String = toHex(results);
return md5String;
}
/**
二进制用十六进制表示
*/
private static String toHex(byte[] results) {
if(results == null)
return null;
StringBuilder hexString = new StringBuilder();
//字节数组16进制表示
// 1 byte=8 bit -->4bit,4bit -->hex1,hex2 即一个byte用2个16进制位表示
//hex数组: 0 .... F -----> 0001 一个16进制位可以表示4个bit位
// buf[0] buf[1] buf[2]
//[0100,1101][1111,0001][1010,1111] 3个字节
for(int i=0;i<results.length;i++){
int hi = (results[i]>>4) & 0x0f;//4bit 高4位
int lo = results[i] & 0x0f;//4bit 低4位
hexString.append(Character.forDigit(hi, 16)).append(Character.forDigit(lo, 16)); //即2个16进制字符表示一个字节
}
return hexString.toString();
}
}
上面的例子中md5加密后的长短是16个字节