1

プロジェクトで圧縮と暗号化の両方を使用する必要があります。プロジェクトには 2 つのプログラムがあります。

最初のプログラムでは、ASCII テキスト ファイルが最初に圧縮され、次に暗号化されます。この暗号化されたバージョンのファイルに対して、さらに操作が続きます。ただし、プロジェクトの 2 番目のプログラムは逆のプロセスに従います。つまり、最初に復号化してから解凍し、元の ASCII テキスト ファイルを取得します。

暗号化モジュール (openssl 経由の aes) を実装しましたが、正常に動作します。しかし、Linux で圧縮オプションを探したところ、gzip、zlib などが独自のバージョンのファイル、つまり filename.gz またはその他の拡張子をスローすることがわかりました。その内容は純粋に ascii ではありません。(たとえば、ターミナルで出力を表示すると、ひし形の記号が表示されます) このため、C プログラムで圧縮ファイルを完全に読み取ることができません。

つまり、ASCII 文字のみを含む圧縮ファイルが必要です。これはどうしても可能ですか?

4

2 に答える 2

2

最終的に問題を解決しました。プログラムはすべてを正しく処理しています。

送信側:

compression: gzip -c secret.txt -9 > compressed.txt.gz
encryption: openssl enc -aes-256-cbc -a -salt -in compressed.txt.gz -out encrypted.txt

圧縮出力(gz)は、テキストファイルを出力する暗号化の入力として提供されます。結果の出力は純粋にASCIIです。

受信側:

decryption: openssl enc -d -aes-256-cbc -a -in decryptme.txt -out decrypted.txt.gz
decompression: gunzip -c decrypted.txt.gz > message.txt
于 2012-10-24T13:21:06.457 に答える
0

圧縮と暗号化の間に uuencode / uudecode フィルターを追加できます。または、圧縮データの制限を ASCII 形式に緩和することもできます。

  • C プログラムからバイナリ データを読み取ります。(例 char buffer[256]; c=fread(buffer,1,256,stdin);)
  • データを 16 進形式に変換する
    static char encrypted_file[]={ 0x01,0x6e, ... };
于 2012-10-23T14:40:01.543 に答える