web-dev-qa-db-ja.com

暗号化されたファイルを圧縮できますか?

暗号化されたファイル(AES対称暗号化)があります。バックアップの目的で、ディスクスペースを節約するために、復号化を台無しにすることを心配せずにファイルを圧縮(ロスレス)できますか?もしそうなら、あなたはこの目的のためにいくつかの良い圧縮プログラムをお勧めできますか?

5
BlueGene

圧縮することはできますが、ディスク容量を大幅に節約することはできません。その性質上、暗号化によってファイルが圧縮可能になることはめったにありません。

ファイルサイズの節約があるかどうかを自分で試してみてください。

1つのデータポイント:

-rw-r----- 1 gene    gene    2428671 2009-06-02 12:39 test.log
-rw-r----- 1 gene    gene     134524 2009-06-02 12:39 test.log.bz2
-rw-r----- 1 gene    gene     217162 2009-06-02 12:38 test.log.gz
-rw-r--r-- 1 gene    gene     263229 2009-06-02 12:47 test-AES.gpg
-rw-r--r-- 1 gene    gene     264833 2009-06-02 12:42 test-AES.gpg.bz2
-rw-r--r-- 1 gene    gene     263302 2009-06-02 12:41 test-AES.gpg.gz
-rw-r--r-- 1 gene    gene     134609 2009-06-02 12:43 test-bz2-AES.gpg
-rw-r--r-- 1 gene    gene     217246 2009-06-02 12:43 test-gz-AES.gpg

test.logはオリジナルであり、test.log.bz2およびtest.log.gzは、それぞれbzip2とgzipで単純に圧縮されます。

暗号化すると(gpg --symmetric --cipher-algo AES --output test-AES.gpg test.log)暗号化されたファイル(test-AES.gpg)圧縮バージョンよりわずかに大きいです。暗号化されたファイルを圧縮すると、実際には少しサイズが追加されます(test-AES.gpg.bz2およびtest-AES.gpg.gz)。

最初に圧縮してから暗号化すると、ある程度の節約が見られます(test-bz2-AES.gpgおよびtest-gz-AES.gpg)、特にbzip2の場合。

もちろん、暗号化ソフトウェアや圧縮ソフトウェアが異なると、エクスペリエンスが異なる場合があります。

単に暗号化によって得られるファイルサイズの節約で十分かどうか、または圧縮してから暗号化することがプロセスの追加ステップに値するかどうかを検討する必要があります。

15
CoverosGene

暗号化が適切かどうかはわかりません。圧縮では、データ内のパターンを認識し、後で抽出するためにそれらのパターンを参照する「省略形」を作成します。

暗号化が適切であれば、ファイルはランダムノイズのように見えますが、パターンがないため、あまり圧縮されません。もちろん、アーカイブファイル(.Zip、.gzなど)に入れることはできますが、それほど小さくすることはほとんどありません。

11
Brad Beyenhof

圧縮プログラムは実際のデータを変更することはありません。変更したとしても、役に立たないでしょう。 (音声と画像の圧縮は例外です。人間の目にはそのような小さな変化は見られませんが、コンピューターは1つの反転ビットで窒息する可能性があります。)そうです、暗号化されたファイルを圧縮できます。

ただし、暗号化されたデータはランダムデータと非常によく似ているため、圧縮率が低くなります。可能であれば、暗号化する前に圧縮してください。そうでなければ、「圧縮」はかなり役に立たないでしょう。

圧縮プログラムの場合、Unixの世界ではtargzip/bzip2(通常はtar czf foo.tar.gz fooのようにtar内から使用されます)が優先されますが、Windowsユーザーは- Zip[〜#〜] rar [〜#〜] または 7z

7
user1686

圧縮プログラム(7z、Zip、gzip、bzip2)を使用してもロスレスであり、データを復号化する機能に影響を与えません。

ただし、暗号化されたデータの性質上、おそらくそれから多くを得ることができません。

適切な方法は、暗号化ステップの前に圧縮することです。 gpgなどの既存のユーティリティがこれを行います。暗号化の前に圧縮する動作がデフォルトです。

michael:~> dd if=/dev/zero of=testfile bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00300552 s, 349 MB/s
michael:~> gpg --symmetric --cipher-algo aes --batch --passphrase cheesestring testfile
michael:~> ls -al testfile testfile.gpg
-rw-r--r-- 1 michael users 1048576 2009-06-02 12:42 testfile
-rw-r--r-- 1 michael users    1123 2009-06-02 12:43 testfile.gpg
4
MikeyB

暗号化されたファイルは、圧縮を機能させる統計的プロパティを失うため、暗号化されたファイルを圧縮しても、スペースを節約することはほとんどありません。圧縮ファイルを暗号化する前に、まずファイルを圧縮する必要があります(ファイルは引き続き適切に圧縮されます)。それを除けば、圧縮を解除しても、ファイルの元のコンテンツには影響しません。

通常、これらの状況では、最初に圧縮してから暗号化します。そうすることで、圧縮率が向上します。

2
Evan

暗号化後に圧縮できるファイルは、定義上、暗号化されていませんでした。おそらく、それは「スクランブル」または「難読化」されていました。暗号化されたデータは、ランダムなデータと区別できません。

暗号化を行う前に最初にファイルを圧縮しない暗号化ソフトウェアは、過失行為を犯しています。

データを破壊することなく、ロスレス圧縮アルゴリズムを介して暗号化されたファイルを実行できます。これは圧縮の保証です。入力として指定したデータはすべて、解凍からの出力として復元されます。定義上、ロスレス圧縮アルゴリズムは、圧縮および解凍した場合にデータを返します。

2
carlito

はい、問題は発生しません。暗号化プログラムに関する限り、それは単なるデータです。ただし、データを回復するのは難しいため、アーカイブを作成した後にPAR2を使用することをお勧めします。

0
Kyle Brandt

バランスをとると、節約できるスペースの量は、それが引き起こす潜在的な問題の価値がないと思います。

もちろん、これは、使用しているオペレーティングシステム、ファイルがローカルかネットワークか、実行しているバックアップの種類、暗号化に使用しているもの、使用しているファイルの種類によって異なります。

主な問題はアクセス速度です。最初に解凍してから復号化する必要があり、ファイルが大きいか小さいかによってプロセスが追加されます。また、プロセスを追加することにより、失敗のリスクを悪化させます。

最後に、復号化ソフトウェアが非圧縮ファイルを復号化することを忘れないでください。そうすると、圧縮バージョンと非圧縮バージョンが同時に存在することになり、その時点でディスク容量が2倍になります。

0
davidcoxon