ホームページ >バックエンド開発 >PHPチュートリアル >ECB モードで AES 暗号化の PKCS7 パディングを追加および削除するにはどうすればよいですか?

ECB モードで AES 暗号化の PKCS7 パディングを追加および削除するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-03 22:57:20675ブラウズ

How to Add and Remove PKCS7 Padding for AES Encryption in ECB Mode?

AES 暗号化の PKCS7 パディングの追加と削除

電子コードブック (ECB) モードで 128 ビット AES 暗号化を使用してデータを暗号化する場合、 PKCS7 パディングを平文と暗号文に追加および削除するために必要です。

PKCS7 パディングは、RFC 5652 で定義されている方法で、データ長がブロック サイズの倍数であることを保証します。これには、最後のブロックを埋めるために必要なだけバイトを追加することが含まれます。各バイトは、追加されたパディング バイト数に設定されます。

PKCS7 パディングの追加

追加するにはAES を使用した暗号化前の平文への PKCS7 パディング:

  1. ブロック サイズの決定AES アルゴリズムの値 (通常、128 ビット AES の場合は 16 バイト)。
  2. 最後のブロックを埋めるのに必要なバイト数を計算します: Pad = block_size - (plaintext_length % block_size)。
  3. Createパディングを表す繰り返し文字 chr(pad) を含む文字列
  4. 平文にパディング文字列を追加します。

PKCS7 パディングの削除

復号化後に暗号文から PKCS7 パディングを削除するには、次を使用します。 AES:

  1. AES アルゴリズムのブロック サイズを決定します。
  2. 暗号文の最後のバイトを取得します。
  3. パディング サイズ Pad を次の値に設定します。最後のバイト。
  4. 最後のパッドバイトを切り取ります。 ciphertext.

これらの操作を実行する PHP 関数:

function encrypt($plaintext, $key) {
    $block = mcrypt_get_block_size('aes', 'ecb');
    $pad = $block - (strlen($plaintext) % $block);
    $plaintext .= str_repeat(chr($pad), $pad);
    return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_ECB);
}

function decrypt($ciphertext, $key) {
    $ciphertext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_ECB);
    $block = mcrypt_get_block_size('aes', 'ecb');
    $pad = ord($ciphertext[strlen($ciphertext) - 1]);
    return substr($ciphertext, 0, -1 * $pad);
}

安全な暗号化には、ECB の代わりに CBC または他のチェーン モードを使用することをお勧めします。

以上がECB モードで AES 暗号化の PKCS7 パディングを追加および削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。