web-dev-qa-db-ja.com

クロスプラットフォームのOpenSSL AES暗号化

stackoverflow answer から次のコマンドを使用してファイルを暗号化しました。

openssl enc -in file_name -aes-256-cbc -pass stdin -out file_name.aes;

次のコマンドを実行して、このファイルを復号化できます。

openssl enc -in file_name.aes -d -aes-256-cbc -pass stdin -out file_name

ただし、復号化コマンドは、ファイルを暗号化したマシン(CentOS)でのみ機能します。暗号化されたファイルをコピーした場合file_name.aes他のマシン(Fedoraで実行中)に転送し、それを復号化しようとすると、エラーメッセージが表示されます。

140667230762896:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:592:

これは、間違ったパスワードを入力していることを示しています。 OpenSSL AES暗号化システムは依存していますか? CentOSでのみファイルを復号化でき、Fedoraではできないのはなぜですか?

1
sergio

ほとんどの場合、2つのシステムに互換性のないバージョンのOpenSSLがあります。確認するには、openssl versionを実行します。

失敗の理由は通常、デフォルトのメッセージダイジェストが2つのバージョン間で変更されており、古いバージョンはMD5を使用し、新しいバージョンはSHA256を使用しているためです。 OpenSSLは出力メッセージにハッシュタイプを保存せず、デフォルト以外のものを使用したい場合は、コマンドで明示的に指定することを想定しています。両方のコマンドに-md sha256を追加してみてください。

5
Polynomial