{功能描述}
可以用于分析下载文件的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); } }
时间: 2024-11-01 11:36:33