如何用SHA256哈希文件获取字节数组,实现RSA图片数字签名?
解决Java中SHA256哈希字节数组获取及相关问题
一、正确获取SHA256哈希字节数组
你当前的Java代码存在关键问题:调用sha256.digest(array)后再次调用sha256.digest(),第二次调用会返回空数组(MessageDigest对象在第一次digest后会自动重置)。正确写法需直接接收第一次digest的返回值,同时注意路径反斜杠的转义:
import java.nio.file.Files; import java.nio.file.Path; import java.security.MessageDigest; import java.util.Arrays; public class HashExample { public static void main(String[] args) throws Exception { MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); byte[] fileBytes = Files.readAllBytes(Path.of("C:\\Users\\User\\IdeaProjects\\CryptoLab1\\src\\crypto\\dino.png")); // 直接接收返回值,这就是SHA256哈希对应的字节数组 byte[] hashBytes = sha256.digest(fileBytes); System.out.println(Arrays.toString(hashBytes)); } }
二、能否修改SHA256哈希的大小?
SHA-256的哈希长度是固定的256位(即32字节),这是该算法的固有属性,无法修改。所有符合SHA-256标准的实现都会生成32字节的哈希值,固定长度输出是哈希算法的核心特征之一。
若需更短的哈希值,可选择SHA-1(20字节)、MD5(16字节)等算法,但这类算法安全性远低于SHA-256,不建议用于数字签名这类高安全要求场景。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

