欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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