Java实现计算指定文件的SHA256

SHA-256

SHA-256(Secure Hash Algorithm 256-bit)是一种密码学安全哈希算法,用于将任意长度的数据转换为固定长度的哈希值,通常为256位(32字节)。SHA-256是SHA-2(Secure Hash Algorithm 2)系列算法的一部分,被广泛应用于密码学和数据完整性验证等领域。

我们可以使用SHA-256验证文件的完整性

Java实现方式

java 复制代码
public class DigestUtils {
    public static String calculateSHA256(String filePath) throws IOException, NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        try (FileInputStream fis = new FileInputStream(filePath)) {
            byte[] buffer = new byte[8192];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                md.update(buffer, 0, bytesRead);
            }
        }

        byte[] bytes = md.digest();
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}

Kotlin实现

Kotlin 复制代码
object DigestUtils {
    @Throws(IOException::class, NoSuchAlgorithmException::class)
    fun calculateSHA256(filePath: String): String {
        val md = MessageDigest.getInstance("SHA-256")
        FileInputStream(filePath).use { fis ->
            val buffer = ByteArray(8192)
            var bytesRead: Int
            while (fis.read(buffer).also { bytesRead = it } != -1) {
                md.update(buffer, 0, bytesRead)
            }
        }

        val bytes = md.digest()
        val sb = StringBuilder()
        for (b in bytes) {
            sb.append(String.format("%02x", b))
        }
        return sb.toString()
    }
}

MD5

MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,用于将任意长度的数据转换为固定长度的哈希值,通常为128位(16字节)。MD5 的主要特点是产生的哈希值具有较高的唯一性和不可逆性,通常用于验证数据的完整性、密码存储、数字签名等领域。

Java

java 复制代码
public class MD5Utils {
    public static String calculateMD5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] hashBytes = md.digest(input.getBytes(StandardCharsets.UTF_8));

            // Convert the byte array to a hexadecimal string representation
            BigInteger number = new BigInteger(1, hashBytes);
            StringBuilder hexString = new StringBuilder(number.toString(16));
            while (hexString.length() < 32) {
                hexString.insert(0, "0");
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
}

Kotlin实现

Kotlin 复制代码
object MD5Utils {
    
    fun calculateMD5(input: String): String {
        try {
        val md = MessageDigest.getInstance("MD5")
        val hashBytes = md.digest(input.toByteArray(StandardCharsets.UTF_8))
        val number = BigInteger(1, hashBytes)
        val hexString = StringBuilder(number.toString(16))
        while (hexString.length < 32) {
            hexString.insert(0, "0")
        }
        return hexString.toString()
        } catch (e: NoSuchAlgorithmException) {
        e.printStackTrace()
        }    
        return ""
    }
}
相关推荐
阿拉丁的梦1 小时前
教程1:用vscode->ptvsd-创建和调试一个UI(python)-转载官方翻译(有修正)
开发语言·python
木宇(记得热爱生活)2 小时前
一键搭建开发环境:制作bash shell脚本
开发语言·bash
麦兜*2 小时前
Spring Boot 集成 Docker 构建与发版完整指南
java·spring boot·后端·spring·docker·系统架构·springcloud
Cisyam^2 小时前
Go环境搭建实战:告别Java环境配置的复杂
java·开发语言·golang
CHENFU_JAVA2 小时前
使用EasyExcel实现Excel单元格保护:自由锁定表头和数据行
java·excel
IAR Systems3 小时前
在IAR Embedded Workbench for Arm中实现Infineon TRAVEO™ T2G安全调试
开发语言·arm开发·安全·嵌入式软件开发·iar
青云交3 小时前
Java 大视界 -- 基于 Java 的大数据实时流处理在智能电网分布式电源接入与电力系统稳定性维护中的应用(404)
java·大数据·分布式·智能电网·flink 实时流处理·kafka 数据采集·iec 61850 协议
jayzhang_3 小时前
SPARK入门
大数据·开发语言
蹦极的考拉3 小时前
网站日志里面老是出现{pboot:if((\x22file_put_co\x22.\x22ntents\x22)(\x22temp.php\x22.....
android·开发语言·php
fured3 小时前
[调试][实现][原理]用Golang实现建议断点调试器
开发语言·后端·golang