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

PKCS7 パディングは AES 暗号化でどのように機能しますか?また、PHP でそれを追加および削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-05 21:01:12875ブラウズ

How Does PKCS7 Padding Work with AES Encryption, and How Can I Add and Remove It in PHP?

AES 暗号化用の PKCS7 パディング

AES 暗号化を使用する場合、暗号化されたデータの長さがブロックと一致するようにするために PKCS7 パディングを使用するのが一般的です。基礎となる暗号化アルゴリズムのサイズ。ただし、このパディングの追加と削除は Mcrypt 拡張機能では処理できない場合があり、手動タスクとして残されます。

PKCS7 パディングの説明

RFC 5652 で定義されているように、 PKCS #7 パディングは、パディング長に等しい値を持つバイトを追加することによって機能します。たとえば、3 バイトをパディングする必要がある場合、追加されるバイトはすべて 0x03 の値になります。

PKCS7 パディングの追加

パディングを手動で追加するには、現在のデータ長と必要なブロック サイズの差。この値は、必要なパディングバイト数を表します。次に、パディング長を値として指定したバイト数をデータの末尾に追加します。

パディングを追加するためのサンプル PHP 関数

function addPKCS7Padding($data)
{
    $block_size = 16;
    $pad_length = $block_size - (strlen($data) % $block_size);
    $padding = str_repeat(chr($pad_length), $pad_length);
    return $data . $padding;
}

削除PKCS7 Padding

パディングを削除するには、最後の部分を読んでください復号化されたデータのバイト。この値はパディングの長さを表します。次に、データの末尾からそのバイト数を削除するだけです。

パディングを削除するサンプル PHP 関数

function removePKCS7Padding($data)
{
    $pad_length = ord($data[strlen($data) - 1]);
    return substr($data, 0, -1 * $pad_length);
}

実装ノート

  • PHP 関数の例では、次のブロック サイズが使用されます。 AES-128 の場合は 16 バイト。
  • 復号化されたデータを使用する前に、すべてのパディング バイトがパディング長と同じ値であることを確認して、パディングが正しいことを検証することが重要です。
  • ECB モードは不安な。この暗号化タスクには CBC や GCM などのより安全なモードの使用を検討するようクライアントに勧めてください。

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

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