md5加密字符串和文件

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();
    }

你可能感兴趣的:(md5加密字符串和文件)