3

EVP_CIPHER を使用する場合、Zero Paddingを設定できます。

EVP_EncryptInit_exのデフォルトのパディングが有効になっており、PKCS パディングを使用していることは知っています。

またEVP_CIPHER_CTX_set_padding、パディングのみを有効または無効にすることができます。

4

1 に答える 1

2

ウィキペディアが正しく指摘しているように、暗号化ではゼロ パディングは標準化されていません。00平文がバイトで終わる可能性がある場合、決定論的ではない可能性があります。さらに、平文に整数のブロックが含まれている場合にブロックを追加する実装もあれば、ブロックを追加しない実装もあります。

EVP暗号スイートでゼロパディングを見たことはありませんが、パディングを自分で実行してからパディングを無効にするだけで、自分で実装するのは非常に簡単です。1 つの方法は、平文をゼロ値のブロックにコピーすることです。たとえば、memset. このアプローチの唯一の問題は、パディング モードを単純に切り替えることができないことです。これは特殊なケースのままです。

可能であれば、代わりに PKCS#7 互換のパディング スキームを使用してみてください。ゼロ パディングを使用する必要がある場合は、平文のサイズを取得し、追加のゼロ ブロックを追加するかどうかを事前に定義できることを確認してください (たとえば、PHP は追加しませんが、Bouncy Castle は追加します)。

于 2014-06-28T21:42:58.403 に答える