好吧,所以我在很多地方检查过但仍无法找到答案。所以我想逐块验证一个文件,而不是将它全部加载到内存中。我知道我可以使用bufferedreader来逐个更新签名,但这不是我想要的。我想缓冲部分数据,然后使用签名和证书来验证数据的一部分然后重复,直到整个文件被验证为止我每次只将一小部分文件加载到内存中。如果我有1GB文件,我无法有效地将其加载到内存中以签名/验证文件。
答案 0 :(得分:1)
对于如何验证经过数字签名的文件存在一些疑惑。
诀窍是,非常精确,文件本身没有签名。相反,表示文件的哈希值已签名。应使用SHA-2散列算法创建散列值。
因此,涉及整个文件的唯一操作是为文件创建哈希值的过程。通常使用SHA-2变体之一。
所以真正的问题是将SHA-2哈希计算为流操作。这是您需要解决的真正问题。
获得文件的哈希值后,您需要执行验证数字签名的其他方面。 - 但它们都不涉及整个文件。
答案 1 :(得分:1)
签名包括散列操作(例如SHA-256),后跟填充方案(例如PSS),然后是单向函数(例如,使用RSA的私钥进行模幂运算)。
现在哈希总是在整个数据量上,并且不能被分割。哈希通常在Signature.update
方法之一中计算,这些方法已经提供了流支持。填充和单向函数在sign
或verify
方法之一执行。
因此,只有这种结构,您无法执行数据的部分验证。
执行部分数据验证的一种方法如下:
现在阅读数据时:
并且presto。