好吧,我查了很多地方,还是找不到答案。所以我想逐个验证文件而不是将其全部加载到内存中。我知道我可以使用 bufferedreader 逐段更新签名,但这不是我想要的。我想缓冲部分数据,然后使用签名和证书来验证该部分数据,然后重复直到验证整个文件,这样我每次只将文件的一小部分加载到内存中。如果我有一个 1GB 的文件,我无法有效地将其加载到内存中来签名/验证该文件。
最佳答案
签名由哈希运算(例如 SHA-256)、填充方案(例如 PSS)和单向函数(例如 RSA 私钥的模幂运算)组成。
现在哈希值总是覆盖整个数据量,并且不能被分割。哈希值通常是在Signature.update
之一期间计算的。方法,它已经提供了流支持。填充和单向函数在 sign
之一期间执行。或verify
方法。
因此,仅使用这种结构,您就无法执行数据的部分验证。
<小时/>执行部分数据验证的一种方法如下:
- 创建一个新结构,其中包含数据片段的 (SHA-256) 哈希值;
- 用签名对上述结构体进行签名,并将签名添加到该结构体中;
- 将新结构添加到数据前面,而不是签名。
现在读取数据时:
- 首先使用签名读取并验证整个结构;
- 读取任何给定的片段,并根据结构中的哈希进行验证。
然后很快。
关于java - 缓冲数字签名/验证非常大的文件 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24049885/