3

openssl で aes256 で暗号化された base64 文字列を復号化しようとしています。私の鍵で暗号化されたセッション鍵と IV が与えられました。次の openssl コマンドを使用できるように、それらを 16 進数に変換しました。

openssl enc -d -aes256 -iv iv.hex -K sessionkey.hex -in message.b64 -out message.txt

IV が非 16 進数値であるというエラーが表示されます。私は自分の鍵で暗号化された base64 の IV とセッション鍵から始めました。だから私は次のことをしました:

// base64 をバイナリに変換

openssl base64 -d -in iv.b64 -out iv.bin
openssl base64 -d -in sessionkey.b64 -out sessionkey.bin

// 秘密鍵を使用して復号化する

openssl rsautl -decrypt -inkey mykey.pem -in sessionkey.bin -out sessionkey_out.bin
openssl rsautl -decrypt -inkey mykey.pem -in iv.bin -out iv_out.bin

//次の C コードを使用して 16 進数に変換します。

含む

main()
{
 int c;
        while ((c=getchar())!=EOF)
                printf("%02X",c);
}

// 16 進数の IV とキーを使用してメッセージを復号化します

openssl enc -d -aes256 -iv iv.hex -K sessionkey.hex -in message.b64 -out message.txt

最後のステップで、IV が非 16 進数であるというエラーが表示されます。何か案は?

4

2 に答える 2

1

問題は、openssl がコマンド ラインで 16 進数として値が提供されることを期待しているときに、IV とキーのファイルを指定していることです。

たとえば、M3U8 ストリーム (HLS) を復号​​化しようとしていて、キーの 16 バイト ファイルには、実行時にキーボードから入力できない印刷不可能な文字が含まれていました (-K を省略すると、キーボードからキーが取得されます)。

-rw-r--r--@ 1 Mufasa  staff       16 Apr 17 10:45 sequence146094144.key
-rw-r--r--  1 Mufasa  staff  3272528 Apr 17 10:48 sequence146094161.ts

そこで、キーファイルを 16 進数に変換しました。

hexdump -e '16/1 "%02x" "\n"' sequence146094144.key 
8d2aeccbefb0955ec9a75f2f051faa6e

そして、私のIVはすでに16進数で提供されていたので、次を削除しました0x

IV=0x00000000000000000000000008B53851

.ts ファイルを正常に復号化した次のコマンドの結果:

openssl aes-128-cbc -d -in sequence146094161.ts -out output.ts -iv 00000000000000000000000008B53851 -K 8d2aeccbefb0955ec9a75f2f051faa6e

ffprobe で出力を確認します。

ffprobe output.ts 
ffprobe version 2.8.git Copyright (c) 2007-2016 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)

...

Input #0, mpegts, from 'output.ts':
  Duration: 00:00:10.04, start: 8414.107644, bitrate: 2607 kb/s
  Program 1 
    Stream #0:0[0x1e1]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 960x540 [SAR 1:1 DAR 16:9], Closed Captions, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x1e2](und): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 60 kb/s
    Stream #0:2[0x100]: Unknown: none ([134][0][0][0] / 0x0086)

そして私のファイルはVLCで再生されました。あなたの場合、iv.bin生成したファイルがプレーン テキストの 16 進文字列である場合は、それ以上変換せずに、コマンド ラインで 16 進値をそのまま使用します。16 進数以外のように見える場合は、ファイルから直接 HEX に変換します。sessionkey.bin生成したファイルにも同じロジックが適用されます。

于 2016-04-17T19:52:06.773 に答える
0

base64 ツールを使用して入力ファイルをバイナリ形式にデコードし、このファイルを openssl にフェッチできます。

または、独自の base64 デコーダーを作成することもできます。

于 2013-03-31T12:34:08.970 に答える