私は次のような問題があります。キャラクタの問題を防ぐために特定のコンテンツをbase64に変換する必要があります。この変換の後、このデータを1つのAesアルゴリズムで暗号化する必要があります。鍵の長さは16です。この問題は、元のコンテンツのサイズが16の倍数であることを考慮して、base64アルゴリズムの結果が16の倍数ではないサイズの応答を返す場合に発生します。この問題?C++で複数の結果を持つBase64アルゴリズム
0
A
答えて
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進数などの方法でエンコードする必要があります(印刷可能な文字の必要性など)。
関連する問題
- 1. Zip Pythonで複数の結果を持つ複数のファイル
- 2. 目的C - 複数の連続した結果を持つ1つのボタン
- 3. は、base64でMD5はここアルゴリズム間違った結果
- 4. 対称アルゴリズムDES C#。 Base64で
- 5. 複数のフィールドを持つMongoDBテキスト検索重複結果セット
- 6. 複数の結果セットを返すストアドプロシージャを持つSimple.data
- 7. 複数の結果を持つaddClassを検索する
- 8. 複数のメンバーIDを持つMongoの結果
- 9. C#色複数の結果の検出
- 10. 複数のテーブルを持つ複雑なINNER JOINクエリの結果をエコーする
- 11. 複数のクエリの結果を1つの結果に結合する方法
- 12. Python:結果と同じ変数を持つ複数の行をプロットする
- 13. 複数の結合を持つページネーティブクエリ
- 14. 複数の結合を持つOracle ROWNUM
- 15. Android base64が別の結果を返す
- 16. 複数のダイスロール、複数の結果
- 17. c#Base64エンコーディング誤った結果をデコードする
- 18. BASE64エンコード、nodejs C++、Pythonの結果は切り抜いある
- 19. 'Sed'が複数のパラメータを持つ 'find'の結果に作用しません
- 20. Oracle SQL:1行と複数の列を持つテーブル結果の転置/回転
- 21. 複数のクエリの結果
- 22. 空の結果を返す検索変数パラメータを持つNpgsqlクエリC#Postgres
- 23. DataTable.Load複数結果のDataReaderで次の結果セットにスキップ
- 24. 複数の引数を持つアルゴリズムからクローズドフォームを見つける
- 25. innerHTMLで複数の結果を返す
- 26. sqlReaderで複数の結果を取得
- 27. JdbcTemplate複数の結果セット
- 28. BLToolkit:複数の結果セット?
- 29. OMDb API複数の結果
- 30. 複数の列を持つWinFormsコンボボックス(C#)?
これまでパッディングについて聞いたことがありますか? –