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);
    }
}

 

转载于:https://www.cnblogs.com/aqing1987/p/4212470.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值