md5加密字符串和文件
程序员文章站
2024-03-19 10:47:04
...
1,MD5简介
1)Message Digist Algorithm 5(消息摘要算法); SHA(Secure hash algorithm)安全hash算法。
2)Java已经实现了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;//负数使用补码表示,eg: -1 + 256,等效于只取负数补码的低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();
}