Java计算文件sha-256校验和

1.linux系统
## 方式1
sha256sum example.file
## 方式2
sha256sum example.file
2.Java程序
    public static void main(String[] args) {
        MessageDigest digest;
        byte[] byteArray;
        try (FileInputStream fis = new FileInputStream("C:\\ideaIU-2024.2.1.exe")) {
            digest = MessageDigest.getInstance("SHA-256");

            byteArray = new byte[1024];
            int bytesCount = 0;

            while ((bytesCount = fis.read(byteArray)) != -1) {
                digest.update(byteArray, 0, bytesCount);
            }
            byte[] bytesDigest = digest.digest();

            // 将字节转换为十六进制格式
            StringBuilder sb = new StringBuilder();
            for (byte aByte : bytesDigest) {
                sb.append(String.format("%02x", aByte));
            }
            System.out.println(sb);  
        } catch (IOException | NoSuchAlgorithmException e) {
            System.err.println("Could not open file: " + e.getMessage());
        }



    }

### 计算或验证文件SHA-256校验和 #### 文件SHA-256校验和的概念 SHA-256属于SHA-2系列哈希算法之一,能够生成一段数据的固定长度的消息摘要。该算法产生的输出是一个256位(32字节)的数据指纹[^3]。 #### Java实现SHA-256校验和计算Java环境中可以利用`MessageDigest`类来执行SHA-256校验和运算: ```java import java.io.*; import java.security.*; public class SHA256Checksum { public static String calculateFileChecksum(File file) throws NoSuchAlgorithmException, IOException { MessageDigest digest = MessageDigest.getInstance("SHA-256"); try (InputStream fis = new FileInputStream(file)) { byte[] byteArray = new byte[1024]; int bytesCount; while ((bytesCount = fis.read(byteArray)) != -1) { digest.update(byteArray, 0, bytesCount); } } byte[] bytes = digest.digest(); StringBuilder sb = new StringBuilder(); for (byte aByte : bytes) { sb.append(Integer.toString((aByte & 0xff) + 0x100, 16).substring(1)); } System.out.println("Calculating SHA-256 checksum......"); return sb.toString(); } } ``` 上述代码展示了如何读取文件并逐块更新消息摘要对象,最后转换成十六进制字符串表示形式作为最终的校验码[^2]。 #### 验证文件完整性 为了确保接收到的文件未被篡改,接收方应重复同样的过程以获得新的校验值并与发送者提供的原始校验值对比。如果两者一致,则说明文件传输过程中没有发生错误;反之则可能存在差异,需重新获取文件副本。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值