1,MD5簡介
1)Message Digist Algorithm 5(消息摘要算法); SHA(Secure hash algorithm)安全hash算法。
2)Java已經實現(xiàn)了MD5、SHA1算法。java.security.MessageDigest
冈敛,String和文件的MD5以及SHA1結果。the array of bytes for the resulting hash value.
3)md5是一個固定長度128比特(bit)的串1和0的組合
鸣皂,md5的32位表示使用16進制表示二進制
抓谴,md5的16位表示32位表示去掉前8位和后8位
。
2寞缝,MD5加密字符串
private static final char[] HEX = {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
public static String md5String(String input) throws Exception {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] inputBytes = input.getBytes();
byte[] resultByte = md.digest(inputBytes);
int length = resultByte.length;
char[] result = new char[length * 2];
int index = 0;
for(int i = 0; i < length; i++){
int val = resultByte[i];//轉換成int類型
if(val < 0){
val = val + 256;//負數(shù)使用補碼表示齐邦,eg: -1 + 256,等效于只取負數(shù)補碼的低8位(原byte類型)第租。
}
result[index++] = HEX[val/16];//使用除k取整法轉成16
result[index++] = HEX[val % 16];
}
return result.toString();
}
3措拇,MD5加密文件
public static String md5File(String path) throws Exception{
MessageDigest md = MessageDigest.getInstance("md5");
File file = new File(path);
InputStream inputStream = new FileInputStream(file);
DigestInputStream digestInputStream = new DigestInputStream(inputStream, md);
byte[] buffer =new byte[256 * 1024];
while (digestInputStream.read(buffer) > 0){
md = digestInputStream.getMessageDigest();
}
byte[] resultByte = md.digest();
int length = resultByte.length;
char[] result = new char[length * 2];
int index = 0;
for(int i = 0; i < length; i++){
result[index++] = HEX[resultByte[i] >>> 4 & 0xf];//使用位運算來進行16進制轉換
result[index++] = HEX[resultByte[i] & 0xf];
}
return result.toString();
}