zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    k8s之创建etcd集群
    完美解决微信video视频隐藏控件和内联播放问题
    JS工具库封装:Video转换成Canvas
    H5 video 标签 播放事件
    iSlider 如丝般高性能H5全屏滑动组件
    设计模式之 适配器模式
    c++ STL常用算法使用方法
    快速排序与二分查找
    CLOSE_WAIT TIME_WAIT
    erlang erl文件编译的三种脚本
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4212470.html
Copyright © 2011-2022 走看看