JCAを使用して大きなデータセットの署名を効率的に確認する
-
03-07-2019 - |
質問
2Gb程度の大きさのファイルの署名を検証する必要があります。可能な限りメモリ効率のよい方法で検証したいと思います。さまざまな理由により、ファイルはすでにメモリに完全にロードされており、アプリケーションは InputStream
を使用してアクセスします。ストリームインターフェイスを使用して署名を確認したいのですが、JCA Signature
クラスの update
メソッドは byte []
および関連クラスのみを受け入れます。
これを効率的に行うにはどうすればよいですか?獣を2番目のバイト配列にロードしたくはありません。さもないと、かなりのメモリ使用量が見られますが、インターフェースはそれをサポートしていないようです。
更新
重要な場合、署名アルゴリズムはSHA-1です
解決
入力ストリームを1ブロック(4096バイトまたは任意の便利なサイズ)で一度に読み取るのではなく、ブロックごとにupdate()を呼び出します。
他のヒント
バッファとして機能するバイト配列を作成し、InputStreamから一度にバッファを読み取り、毎回Signatureでupdate()を呼び出します。バッファーのサイズが妥当であれば、プロセス間でデータを転送するのに消費されるCPU時間(これがあなたがしていることだと思いますか?)は、計算時間と比較して無視できる可能性があります。ディスクからの読み取りの場合、CPU使用率の無視できるリターンのカットオフポイントは約8Kのバッファーサイズであるように思われます。 (興味深い場合は、 InputStreamバッファーサイズにまとめたページをご覧ください。 。)
所属していません StackOverflow