だから私は openssl:パスフレーズでキーとIVを回復する に従い、opensslの-P
を使用して私のソルト、キー、IVを取得することができました。
openssl enc -aes-256-cbc -in encrypted -pass "pass:password" -out m.jpg
これにより、適切なm.jpg
ファイルが得られるので、
openssl enc -aes-256-cbc -d -in encrypted -pass "pass:password" -out m.jpg -P
適切なソルト、キー、IVを提供します。
salt=7A01E44D968CEBD0
key=6F4C7DD6F49D0605095CAD7EA2745913E83B71A52C34F2ED260544286FDEE78A
iv =0BBD122901B13F76D03ED2EBE4E8D1CC
今私が上記のソルト、キー、IVで暗号化されたファイルを復号化しようとしたとき
openssl enc -aes-256-cbc -d -in encrypted -K 6F4C7DD6F49D0605095CAD7EA2745913E83B71A52C34F2ED260544286FDEE78A -iv 0BBD122901B13F76D03ED2EBE4E8D1CC -S 7A01E44D968CEBD0 -out m.jpg
ファイルを復号化できませんでした。たぶんフォーマットに問題がありますか?だから私はそれらを引用符に入れてみました
openssl enc -aes-256-cbc -d -in encrypted -K "6F4C7DD6F49D0605095CAD7EA2745913E83B71A52C34F2ED260544286FDEE78A" -iv "0BBD122901B13F76D03ED2EBE4E8D1CC" -S "7A01E44D968CEBD0" -out m.jpg
そして無駄に。
--help
は、
-iv IV IV to use, specified as a hexidecimal string
-K key Key to use, specified as a hexidecimal string
-S salt Salt to use, specified as a hexidecimal string
これはまさに私がやったことです。 16進文字列を渡す特別な方法がない限り?
または、IV、キー、ソルトを取得するプロセスで何か問題がありましたか? (またはファイルの暗号化を解除中)?
answer が参照するように、明確にするためにopenssl enc
はかなりひどく、テスト以外の目的で使用することを意図したものではありません。
問題は、フォーマットの不整合にあります。パスワードで暗号化する場合、16バイトを使用しますSalted__
ヘッダーには、キーの派生で使用されるソルトが含まれます。キーとIVを直接使用する場合、ソルトを指定する必要はなく、ソルトヘッダーは使用されません。パスワードで暗号化し、後でキーとIVを取得したので、復号化する前に最初の16バイトを取り除く必要があります。
$ echo test | openssl enc -aes-256-cbc -pass pass:password -base64
U2FsdGVkX1/hmWydD0WX5S5n369MQhQ6Q3w4pxLYrh8=
$ echo 'U2FsdGVkX1/hmWydD0WX5S5n369MQhQ6Q3w4pxLYrh8=' | openssl enc -aes-256-cbc -d -pass pass:password -base64 -P
salt=E1996C9D0F4597E5
key=90C6AF89C13459AD5F55B9CD72705249BC494F4539D2FA75B4C6E5B343D7FDB2
iv =3D29E6F33CBBDA72B6757B5078003B53
$ echo 'U2FsdGVkX1/hmWydD0WX5S5n369MQhQ6Q3w4pxLYrh8=' | base64 -d | tail -c+17 | openssl enc -aes-256-cbc -d -K 90C6AF89C13459AD5F55B9CD72705249BC494F4539D2FA75B4C6E5B343D7FDB2 -iv 3D29E6F33CBBDA72B6757B5078003B53
test