java - 缓冲数字签名/验证非常大的文件 Java

标签 java digital-signature digital-certificate

好吧,我查了很多地方,还是找不到答案。所以我想逐个验证文件而不是将其全部加载到内存中。我知道我可以使用 bufferedreader 逐段更新签名,但这不是我想要的。我想缓冲部分数据,然后使用签名和证书来验证该部分数据,然后重复直到验证整个文件,这样我每次只将文件的一小部分加载到内存中。如果我有一个 1GB 的文件,我无法有效地将其加载到内存中来签名/验证该文件。

最佳答案

签名由哈希运算(例如 SHA-256)、填充方案(例如 PSS)和单向函数(例如 RSA 私钥的模幂运算)组成。

现在哈希值总是覆盖整个数据量,并且不能被分割。哈希值通常是在Signature.update之一期间计算的。方法,它已经提供了流支持。填充和单向函数在 sign 之一期间执行。或verify方法。

因此,仅使用这种结构,您就无法执行数据的部分验证。

<小时/>

执行部分数据验证的一种方法如下:

  1. 创建一个新结构,其中包含数据片段的 (SHA-256) 哈希值;
  2. 用签名对上述结构体进行签名,并将签名添加到该结构体中;
  3. 将新结构添加到数据前面,而不是签名。

现在读取数据时:

  1. 首先使用签名读取并验证整个结构;
  2. 读取任何给定的片段,并根据结构中的哈希进行验证。

然后很快。

关于java - 缓冲数字签名/验证非常大的文件 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24049885/

相关文章:

java - 复制构造函数不起作用

c# - 需要有关多循环效率的帮助

java - 当我启动我的 java 应用程序时,我可以在我的 linux 控制台上获取路径吗?

java - 如何在 Fragment 中解决这个问题?

java - 如何解密X509证书签名

c++ - 打印数字签名信息

java - 使用iText(signdeferred)创建PDF数字签名,验证签名时出现invalid signature问题

Android数字签名使用keystore证书

java - jar 的认证(不包含小程序)

java - 读取数字证书的友好名称