【问题标题】:Check the signature on large data sets efficiently using JCA使用 JCA 有效地检查大型数据集的签名
【发布时间】:2009-01-02 20:53:31
【问题描述】:

我必须验证可能大至 2Gb 的文件上的签名,并且我希望以尽可能节省内存的方式进行验证。由于各种原因,该文件已经完全加载到内存中,并由应用程序使用InputStream 访问。我想使用流接口验证签名,但是JCA Signature类的update方法只接受byte[]和相关类。

我怎样才能有效地做到这一点?我不想将野兽加载到第二个字节数组中,否则我们会看到一些严重的高内存使用,但界面似乎不支持它。

更新

如果重要的话,签名算法是 SHA-1

【问题讨论】:

    标签: java security performance digital-signature jca


    【解决方案1】:

    为什么不一次读取输入流一个块(4096 字节或任何方便的大小),为每个块调用 update()。

    【讨论】:

    • 我喜欢它的声音; update() 会刷新之前更新的块吗?
    • 我会假设它是为了迭代地更新给定输入的签名,最后你调用一些“finish()”方法......你有一个链接到描述的页面吗签名类?除了一些模糊的描述,我找不到它。
    • 更改每个签名更新的不同字节数组缓冲区大小得到不同的base64签名结果是否正确?
    【解决方案2】:

    创建一个字节数组作为缓冲区,并从 InputStream 中一次读取缓冲区,每次在 Signature 上调用 update()。如果缓冲区的大小合理,则将数据从一个进程传输到另一个进程所消耗的 CPU 时间(我猜这就是您正在做的事情?)与计算时间相比可能可以忽略不计。在从磁盘读取的情况下,CPU 使用率回报可忽略不计的截止点似乎是大约 8K 的缓冲区大小,我怀疑这或多或少也适用于您的情况。 (如果有趣,请参阅我在InputStream buffer sizes 上整理的页面。)

    【讨论】:

      猜你喜欢
      • 2017-08-02
      • 2014-05-24
      • 1970-01-01
      • 2015-02-18
      • 2016-09-21
      • 2016-01-11
      • 2018-06-20
      • 2019-11-17
      • 1970-01-01
      相关资源
      最近更新 更多