Heim >Backend-Entwicklung >PHP-Tutorial >Wie funktioniert PKCS7-Padding mit der AES-Verschlüsselung und wie kann ich es in PHP hinzufügen und entfernen?

Wie funktioniert PKCS7-Padding mit der AES-Verschlüsselung und wie kann ich es in PHP hinzufügen und entfernen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-05 21:01:12875Durchsuche

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

PKCS7-Padding für AES-Verschlüsselung

Bei der Verwendung von AES-Verschlüsselung ist es üblich, PKCS7-Padding zu verwenden, um sicherzustellen, dass die Länge der verschlüsselten Daten mit dem Block übereinstimmt Größe des zugrunde liegenden Verschlüsselungsalgorithmus. Das Hinzufügen und Entfernen dieser Auffüllung kann jedoch möglicherweise nicht von der Mcrypt-Erweiterung verarbeitet werden, sodass es sich um eine manuelle Aufgabe handelt.

PKCS7-Auffüllung erklärt

Wie in RFC 5652 definiert, PKCS #7-Padding funktioniert durch das Anhängen von Bytes mit einem Wert, der der Padding-Länge entspricht. Wenn wir beispielsweise drei Bytes auffüllen müssen, hätten die angehängten Bytes alle den Wert 0x03.

Hinzufügen von PKCS7-Auffüllungen

Um die Auffüllung manuell hinzuzufügen, berechnen Sie die Differenz zwischen der aktuellen Datenlänge und der gewünschten Blockgröße. Dieser Wert stellt die Anzahl der erforderlichen Füllbytes dar. Hängen Sie dann so viele Bytes mit der Auffülllänge als Wert an das Ende der Daten an.

Beispiel-PHP-Funktion zum Hinzufügen von Auffüllungen

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;
}

Entfernen PKCS7-Auffüllung

Um die Auffüllung zu entfernen, lesen Sie das letzte Byte der entschlüsselten Daten. Dieser Wert stellt die Länge der Polsterung dar. Entfernen Sie dann einfach diese Anzahl von Bytes vom Ende der Daten.

Beispiel-PHP-Funktion zum Entfernen von Auffüllungen

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

Implementierungshinweise

  • Die Beispiel-PHP-Funktionen verwenden eine Blockgröße von 16 Bytes AES-128.
  • Es ist wichtig zu überprüfen, ob die Auffüllung korrekt ist, bevor die entschlüsselten Daten verwendet werden, indem sichergestellt wird, dass alle Auffüllbytes denselben Wert wie die Auffülllänge haben.
  • Der ECB-Modus ist unsicher. Ermutigen Sie Ihren Kunden, die Verwendung eines sichereren Modus wie CBC oder GCM für diese Verschlüsselungsaufgabe in Betracht zu ziehen.

Das obige ist der detaillierte Inhalt vonWie funktioniert PKCS7-Padding mit der AES-Verschlüsselung und wie kann ich es in PHP hinzufügen und entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn