Heim >Backend-Entwicklung >PHP-Tutorial >Wie füge ich PKCS7-Auffüllung für die AES-Verschlüsselung im ECB-Modus hinzu und entferne sie?

Wie füge ich PKCS7-Auffüllung für die AES-Verschlüsselung im ECB-Modus hinzu und entferne sie?

Barbara Streisand
Barbara StreisandOriginal
2024-12-03 22:57:20681Durchsuche

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

Hinzufügen und Entfernen von PKCS7-Padding für die AES-Verschlüsselung

Beim Verschlüsseln von Daten mit 128-Bit-AES-Verschlüsselung im ECB-Modus (Electronic Codebook) ist dies der Fall Es ist erforderlich, PKCS7-Padding zum Klartext und Chiffretext hinzuzufügen und zu entfernen. bzw.

PKCS7-Padding ist eine in RFC 5652 definierte Methode, die sicherstellt, dass die Datenlänge ein Vielfaches der Blockgröße ist. Dabei werden so viele Bytes angehängt, wie nötig sind, um den letzten Block zu füllen, wobei jedes Byte auf die Anzahl der hinzugefügten Füllbytes eingestellt wird.

Hinzufügen von PKCS7-Padding

Zum Hinzufügen PKCS7-Auffüllung auf Klartext vor der Verschlüsselung mit AES:

  1. Bestimmen Sie die Blockgröße des AES-Algorithmus (normalerweise 16 Bytes für 128-Bit-AES).
  2. Berechnen Sie die Anzahl der Bytes, die zum Füllen des letzten Blocks benötigt werden: pad = block_size - (plaintext_length % block_size).
  3. Erstellen Sie eine Zeichenfolge mit wiederholtes Zeichen chr(pad), um die Füllbytes darzustellen.
  4. Fügen Sie die Füllzeichenfolge an die an Klartext.

PKCS7-Auffüllung entfernen

So entfernen Sie PKCS7-Auffüllung aus Chiffretext nach der Entschlüsselung mit AES:

  1. Bestimmen Sie die Blockgröße des AES-Algorithmus.
  2. Erhalten Sie das letzte Byte des Chiffretext.
  3. Stellen Sie die Füllgröße pad auf den Wert des letzten Bytes ein.
  4. Schneiden Sie die letzten Füllbytes vom Chiffretext ab.

PHP-Funktionen für Führen Sie diese Vorgänge aus:

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

Beachten Sie, dass zur Sicherheit empfohlen wird, CBC oder andere Verkettungsmodi anstelle von ECB zu verwenden Verschlüsselung.

Das obige ist der detaillierte Inhalt vonWie füge ich PKCS7-Auffüllung für die AES-Verschlüsselung im ECB-Modus hinzu und entferne sie?. 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