web-dev-qa-db-ja.com

Linuxでキーと初期化ベクトルを使用してファイルを復号化する

私はSalesforceの開発者ですが、セキュリティの世界やLinuxの初心者です。 Salesforceでキーと初期化ベクトルを使用してファイルを暗号化しました(Salesforceでは対称暗号化のみが可能です)。いいえ、パートナーチームと協力して、LinuxシステムでgpgとOpenSSLを使用して同じものを復号化しています。しかし、できませんでした。

注:使用しているキーとベクターは16進数です。暗号化に使用したアルゴリズムはAES128です。

GPGアプローチ:

GPGには、暗号化に使用したキーではないように見えるパスフレーズが必要なようです。gpgでキーとIVだけを使用してファイルを復号化することはできますか?

OpenSSLアプローチ:

私たちのケースでGPGが機能しない場合は、OpenSSLの探索も試みています。 Salesforce製品サポートから以下のコマンドを受け取りましたが、それも機能しません。不正な解読として応答を受け取りました。

OpenSSL> enc -aes-128-cbc -d -a -nosalt -in C:\ Testfiles\input.txt.enc -out C:\ Testfiles\output.txt -K mywhateverkey -iv mywhateveriv

opensslまたはGPGのエキスパートが光を当てることはできますか?

1
Bahu SF

まず、GPGには独自のメッセージ形式があります。これが生成されたものでない限り、復号化に使用することはできません。

Opensslの方が適切なオプションです。提供したドキュメントのリンクによると、暗号化は[〜#〜] aes [〜#〜]暗号を[〜#〜] cbc [〜#〜]モードでPKCS#5パディング(すべてAES128は、使用できる完全な暗号化方式ではありません)。

質問で指定したコマンドは問題ないようです。問題の原因を推測する必要があります(暗号化されたファイル、キー、およびIVが正しいと仮定)。

  1. BASE64エンコーディング:-a BASE64デコードを示すスイッチ。暗号文はBASE64でエンコードされていますか?
  2. キー/ IVフォーマット:KEYとIVを正しいフォーマットで配置しましたか?

ガイドとして、opensslを使用したこのような暗号化と復号化のMWEを次に示します。

$ echo "foo" > input.txt

$ openssl enc -aes-128-cbc -e -a -nosalt -K 0102030405060708090a0b0c0d0e0f10 -iv 00112233445566778899aabbccddeeff -in input.txt -out input.txt.enc

$ cat input.txt.enc                                                                                                                                                                                            
oo9TBVgBrcfUHd5wE3gctw==

$ openssl enc -aes-128-cbc -d -a -nosalt -K 0102030405060708090a0b0c0d0e0f10 -iv 00112233445566778899aabbccddeeff -in input.txt.enc                                                                            
foo
0
mat