2016-06-15 9 views
0

私は次のような問題があります。キャラクタの問題を防ぐために特定のコンテンツをbase64に変換する必要があります。この変換の後、このデータを1つのAesアルゴリズムで暗号化する必要があります。鍵の長さは16です。この問題は、元のコンテンツのサイズが16の倍数であることを考慮して、base64アルゴリズムの結果が16の倍数ではないサイズの応答を返す場合に発生します。この問題?C++で複数の結果を持つBase64アルゴリズム

+0

これまでパッディングについて聞いたことがありますか? –

答えて

0

パッドあなたの4バイトを取得し、入力データの各3バイトのために16

0

BASE64符号化器は、文字当たり6ビットを使用して、8ビットのデータを符号化するの倍数にbase4符号化の結果出力データ(4バイト境界までのパディング)。したがって、AESアルゴリズムに渡されるデータサイズの長さは16の倍数ではありません。

あなたのAESライブラリのドキュメントをチェックしてください。最後のデータのために特別な関数を呼び出すと、内部でこれを処理できる可能性があります(例:EVP_EncryptFinal_ex OpenSSLで)。別の解決策は、データを暗号化する前にコード内の16バイト境界にデータを埋め込むことです。

0

ほとんどのAES実装では、PKCS#7(néePKCS#5)などのパディングがサポートされています。これにより、暗号化に必要なパディングバイトが追加され、解読時に削除されます。

AESはデータベースの関数なので、任意のバイトを受け入れるので、暗号化の前にBase64エンコードする必要はありません。暗号化されたデータは文字ではなくバイトであるため、出力は、Base64や16進数などの方法でエンコードする必要があります(印刷可能な文字の必要性など)。

関連する問題