Java:如何为文件创建SHA-1?

在纯Java6中为非常大的文件创建SHA-1的最佳方法是什么? 如何实现此方法:

public abstract String createSha1(java.io.File file); 

使用MessageDigest类并逐个提供数据。 下面的示例忽略了将byte []转换为字符串并关闭文件等细节,但应该给出一般的想法。

 public byte[] createSha1(File file) throws Exception { MessageDigest digest = MessageDigest.getInstance("SHA-1"); InputStream fis = new FileInputStream(file); int n = 0; byte[] buffer = new byte[8192]; while (n != -1) { n = fis.read(buffer); if (n > 0) { digest.update(buffer, 0, n); } } return digest.digest(); } 

操作系统请求函数返回SHA1的字符串,所以我接受了@jeffs的答案并将缺少的转换添加到String:

 /** * Read the file and calculate the SHA-1 checksum * * @param file * the file to read * @return the hex representation of the SHA-1 using uppercase chars * @throws FileNotFoundException * if the file does not exist, is a directory rather than a * regular file, or for some other reason cannot be opened for * reading * @throws IOException * if an I/O error occurs * @throws NoSuchAlgorithmException * should never happen */ private static String calcSHA1(File file) throws FileNotFoundException, IOException, NoSuchAlgorithmException { MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); try (InputStream input = new FileInputStream(file)) { byte[] buffer = new byte[8192]; int len = input.read(buffer); while (len != -1) { sha1.update(buffer, 0, len); len = input.read(buffer); } return new HexBinaryAdapter().marshal(sha1.digest()); } }