Android计算文件的MD5和SHA1

来源:互联网 发布:广东房卡麻将源码 编辑:程序博客网 时间:2024/05/22 09:44

    项目需要,计算文件的MD5和SHA1值,找了一些代码效率比较低,有的还晦涩难懂,这里给出测试后通过,速度也相对较快的代码。

        /** * Get the md5 value of the filepath specified file * @param filePath The filepath of the file * @return The md5 value */public String fileToMD5(String filePath) {    InputStream inputStream = null;    try {        inputStream = new FileInputStream(filePath); // Create an FileInputStream instance according to the filepath        byte[] buffer = new byte[1024]; // The buffer to read the file        MessageDigest digest = MessageDigest.getInstance("MD5"); // Get a MD5 instance        int numRead = 0; // Record how many bytes have been read        while (numRead != -1) {            numRead = inputStream.read(buffer);            if (numRead > 0)                digest.update(buffer, 0, numRead); // Update the digest        }        byte [] md5Bytes = digest.digest(); // Complete the hash computing        return convertHashToString(md5Bytes); // Call the function to convert to hex digits    } catch (Exception e) {        return null;    } finally {        if (inputStream != null) {            try {                inputStream.close(); // Close the InputStream            } catch (Exception e) { }        }    }}/** * Get the sha1 value of the filepath specified file * @param filePath The filepath of the file * @return The sha1 value */public String fileToSHA1(String filePath) {    InputStream inputStream = null;    try {        inputStream = new FileInputStream(filePath); // Create an FileInputStream instance according to the filepath        byte[] buffer = new byte[1024]; // The buffer to read the file        MessageDigest digest = MessageDigest.getInstance("SHA-1"); // Get a SHA-1 instance        int numRead = 0; // Record how many bytes have been read        while (numRead != -1) {            numRead = inputStream.read(buffer);            if (numRead > 0)                digest.update(buffer, 0, numRead); // Update the digest        }        byte [] sha1Bytes = digest.digest(); // Complete the hash computing        return convertHashToString(sha1Bytes); // Call the function to convert to hex digits    } catch (Exception e) {        return null;    } finally {        if (inputStream != null) {            try {                inputStream.close(); // Close the InputStream            } catch (Exception e) { }        }    }}/** * Convert the hash bytes to hex digits string * @param hashBytes * @return The converted hex digits string */private static String convertHashToString(byte[] hashBytes) {String returnVal = "";for (int i = 0; i < hashBytes.length; i++) {returnVal += Integer.toString(( hashBytes[i] & 0xff) + 0x100, 16).substring(1);}return returnVal.toLowerCase();}

    从StackOverflow上找到的,为了提高速度,可以将buffer开的大一点,还有的使用JNI编写的,可以参考。

    参考资料:

    点击打开链接

    点击打开链接

原创粉丝点击