DOBON.NET DOBON.NETプログラミング掲示板過去ログ

大きいファイルを暗号化するには

環境/言語:[C#]
分類:[.NET]

http://dobon.net/vb/dotnet/string/encryptfile.html
この方法でメモリより大きなサイズのファイルを暗号化しようとすると
メモリが不足するエラーが発生します。
メモリのサイズよりも大きなファイルを暗号化するにはどうすればいいのでしょうか?
■No10997に返信(みかんのみさんの記事)
> http://dobon.net/vb/dotnet/string/encryptfile.html
> この方法でメモリより大きなサイズのファイルを暗号化しようとすると
> メモリが不足するエラーが発生します。
> メモリのサイズよりも大きなファイルを暗号化するにはどうすればいいのでしょうか?
メモリサイズに収まるくらい読み込んで暗号化する、という機能を作って、
ファイル全体を順次読み取って、それぞれを暗号化していく…のは無理なのかな?
■No10998に返信(ガッさんの記事)
> メモリサイズに収まるくらい読み込んで暗号化する、という機能を作って、
> ファイル全体を順次読み取って、それぞれを暗号化していく…のは無理なのかな?

全体を一度に暗号化するのと、一定のサイズごとに暗号化するのとでは、
元が同じデータでも暗号化したデータが異なるということはないのでしょうか?
> 全体を一度に暗号化するのと、一定のサイズごとに暗号化するのとでは、
> 元が同じデータでも暗号化したデータが異なるということはないのでしょうか?

暗号方式によって違うとしかいえません。
ブロックごとに暗号化しているものであればそのブロックのサイズ内は一定になるでしょうが、境界は2つに分断されることにより、ずれるかもしれません。
■No11000に返信(中博俊さんの記事)
> ブロックごとに暗号化しているものであればそのブロックのサイズ内は一定になるでしょうが、境界は2つに分断されることにより、ずれるかもしれません。

全体を一度に暗号化したときと同じく、ブロックごとに暗号化したときでも
ずれないようにする方法はないのでしょうか。

暗号形式やキーなどは変えないで、ただ全体からブロックごとにするだけで
暗号化したデータに変わりはないようにしたいのです。
> 暗号形式やキーなどは変えないで、ただ全体からブロックごとにするだけで
> 暗号化したデータに変わりはないようにしたいのです。

前回の投稿にも匂わせたのですが伝わっていないようですね。

***何で暗号化するかによります。***
>>メモリサイズに収まるくらい読み込んで暗号化する、という機能を作って、
>>ファイル全体を順次読み取って、それぞれを暗号化していく…のは無理なのかな?
>
> 全体を一度に暗号化するのと、一定のサイズごとに暗号化するのとでは、
> 元が同じデータでも暗号化したデータが異なるということはないのでしょうか?

常識的には、Streamを使用している場合は、この点は考慮されていると考えてよいのではないでしょうか(断言はできません)。実際にやってみて問題があったのでしょうか?
■No11002に返信(中博俊さんの記事)
> ***何で暗号化するかによります。***

ご存知のように例のページではDESを使って解説されていますので、DESの場合です。
例のページの方法ですと、大きいサイズのファイルを一度に読み込んで暗号化して
書き込むことはできません。これをできるようにし、さらに一度に処理したときと
全く同じデータになるようにしたいということです。

■No11003に返信(管理人さんの記事)
>>全体を一度に暗号化するのと、一定のサイズごとに暗号化するのとでは、
>>元が同じデータでも暗号化したデータが異なるということはないのでしょうか?
>
> 常識的には、Streamを使用している場合は、この点は考慮されていると考えてよいのではないでしょうか(断言はできません)。実際にやってみて問題があったのでしょうか?

やってみたところできました。
また、一度に全体を暗号化したときのデータと比較すると全く同じでした。

例のページの解説は、大きなサイズのファイルにも対応できるように改良すべきだと
私は思います。おそらくあのサンプルをお使いになられた多くの方がそう思うのでは
ないでしょうか。せっかくマイクロソフトサポート技術情報のサンプルの欠点を
修正していても、どのようなファイルにも対応していなければ私は惜しい気がします。

皆さんご協力いただきありがとうございました。
解決済み!
> やってみたところできました。
> また、一度に全体を暗号化したときのデータと比較すると全く同じでした。
おめでとうございます。
…DESってブロック毎に暗号化するような気がしましたので、
何らかの団子をつくる処理を入れなければならないかと思っていました(orz
情報thxです。

> 例のページの解説は、大きなサイズのファイルにも対応できるように改良すべきだと
> 私は思います。おそらくあのサンプルをお使いになられた多くの方がそう思うのでは
> ないでしょうか。せっかくマイクロソフトサポート技術情報のサンプルの欠点を
> 修正していても、どのようなファイルにも対応していなければ私は惜しい気がします。
>
> 皆さんご協力いただきありがとうございました。
まぁ、サンプルはあくまでサンプルであり、
提供者さんが「コレくらいの例がちょうどいいかな?」という部分で止まって結構なものだと私は考えます。
…ところで、疑問な点があってそれを修正した実績があるのでしたら、
貴方がサンプルの提供者になってもよろしかったのでは?(無償提供が嫌なら結構ですが(orz
2005/05/31(Tue) 04:16:46 編集(投稿者)

> 例のページの解説は、大きなサイズのファイルにも対応できるように改良すべきだと
> 私は思います。おそらくあのサンプルをお使いになられた多くの方がそう思うのでは
> ないでしょうか。せっかくマイクロソフトサポート技術情報のサンプルの欠点を
> 修正していても、どのようなファイルにも対応していなければ私は惜しい気がします。

この方法が間違いないという確信がもてましたら、書き直すことを検討します。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板