-1

特定の暗号文 (AES を使用したランダム IV を使用した CBC モードから) が 16 進数であり、その平文が ASCII エンコードされている場合、暗号化の前にその ASCII 平文を 16 進数にエンコードする必要がありますか?

平文は"Pay Bob $100"
ASCII080 097 121 032 066 111 098 032 036 049 048 048

そして私は暗号文を与えられます20814804c1767293b99f1d9cab3bc3e7 ac1e37bfb15599e5f40eef805488281d

4

1 に答える 1

1

いいえ、平文の 16 進数表現を作成する必要はありません。

アプリケーション内の文字列である可能性が高いテキストから始めています。この文字列には、ASCII や UTF-16LE などのデフォルトの文字エンコードがまだ含まれていない可能性があります。デフォルトのエンコーディングがない場合は、平文をバイト (バイト配列またはオクテット文字列とも呼ばれます) にエンコードする必要があります。UTF-8 は、現在最も広く使用されている文字エンコーディングです。

これをもう少し興味深いものにするために、ほとんどの IDE とデバッガーは、表示時にバイトを 16 進数で表示します。これはメモリ内のバイト値の単なる表現です。バイトはメモリ内で 16 進数としてエンコードされていません。

現代の暗号は平文のバイトを取り、それらを暗号文のバイトに変換します。文字列を返す場合、API にはアルゴリズムに含まれるデフォルトのエンコード方法があります (たとえば、PHP は自動的にエンコードすることが知られています)。これは、暗号自体ではなく、その API の一部です。

繰り返しになりますが、暗号文が自動的にエンコードされない場合は、自分でバイトをエンコードする必要がある場合があります。16 進数 (暗号文のサイズを簡単に確認できるのでデバッグが容易) またはより効率的な Base64 エンコーディングを使用できます。ただし、バイトではなく文字列の暗号文が必要な場合にのみエンコードする必要があります。文字列が必要な例の 1 つは XML です。XML はテキスト形式です (通常、暗号文はCDATAセクション内にあります)。

于 2014-05-16T14:00:46.247 に答える