SHA1 对文件求信息摘要的实现

{功能描述}
可以用于分析下载文件的SHA1值与网上提供的SHA1值是否相等。

{代码实现}

package sup.orange.learn;



import java.io.FileInputStream;

import java.io.IOException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;



/**

 * Created by re-x on 11/4/14.

 */

public class HashFileTest {

    public static void main(String[] args) throws IOException, NoSuchAlgorithmException {

        boolean result = verifyChecksum("/home/re-x/Downloads/linux-1.0.tar.bz2", "4b3de322714d911c8bb46ceda2dbf541e6ab24f4");

        System.out.println("Does the file's checksum matches the expected one? " + result);

    }



    /**

     * Verifies file's SHA1 checksum.

     * @param file, filepath and namd of a file that is to be verified.

     * @param testChecksum, the expected checksum.

     * @return true if the expeceted SHA1 checksum matches the file's SHA1 checksum; false otherwise

     * @throws java.security.NoSuchAlgorithmException

     * @throws java.io.IOException

     */

    public static boolean verifyChecksum(String file, String testChecksum) throws NoSuchAlgorithmException, IOException {

        MessageDigest messageDigest = MessageDigest.getInstance("SHA1");

        FileInputStream fis = new FileInputStream(file);



        byte[] data = new byte[1024];

        int read = 0;

        while ((read = fis.read(data)) != -1) {

            messageDigest.update(data, 0, read);

        }



        byte[] hashBytes = messageDigest.digest();



        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < hashBytes.length; i++) {

            sb.append(Integer.toString((hashBytes[i] & 0xff) + 0x100, 16).substring(1));

        }



        String fileHash = sb.toString();

        System.out.println(file+" sha1 is: "+fileHash);



        return fileHash.equals(testChecksum);

    }

}

 

你可能感兴趣的:(SHA1)