Maison >développement back-end >tutoriel php >Comment le remplissage PKCS7 fonctionne-t-il avec le cryptage AES ?

Comment le remplissage PKCS7 fonctionne-t-il avec le cryptage AES ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-05 12:18:11510parcourir

How Does PKCS7 Padding Work with AES Encryption?

Remplissage PKCS7 pour le cryptage AES

Lors du cryptage de données à l'aide du cryptage AES 128 bits en mode ECB, un remplissage PKCS7 peut être nécessaire pour garantir le les données sont un multiple de la taille du bloc. Ce remplissage ajoute un nombre variable d'octets à la fin des données, où la valeur de chaque octet représente le nombre d'octets de remplissage ajoutés.

Ajout du remplissage PKCS7

Pour ajouter un remplissage PKCS7 à une chaîne de texte en clair :

  • Calculez la taille de bloc de l'algorithme de chiffrement (16 octets pour AES)
  • Déterminez le nombre d'octets de remplissage nécessaires en calculant le reste de la longueur du texte en clair divisé par la taille du bloc.
  • Ajoutez le texte en clair avec le caractère représentant la longueur de remplissage, répétez le nombre de fois requis.

Exemple en PHP (Mcrypt)

<?php
$block_size = mcrypt_get_block_size('rijndael_128', 'ecb'); // Block size for AES
$padding_size = $block_size - (strlen($plaintext) % $block_size);
$plaintext .= str_repeat(chr($padding_size), $padding_size);
?>

Suppression du remplissage PKCS7

Pour supprimer le remplissage PKCS7 d'une chaîne de texte chiffré :

  • Déchiffrer le texte chiffré pour obtenir le texte brut rembourré.
  • Calculez la longueur de remplissage comme la valeur du dernier octet du texte en clair.
  • Vérifiez que les derniers octets padding_length du texte en clair sont tous égaux à la longueur de remplissage.
  • Supprimez les derniers octets padding_length du texte en clair.

Exemple en PHP (Mcrypt)

<?php
$ciphertext = ...; // Encrypted ciphertext with PKCS7 padding
$key = ...; // Encryption key
$decrypted_plaintext = mcrypt_decrypt('rijndael_128', $key, $ciphertext, 'ecb');
$padding_length = ord($decrypted_plaintext[strlen($decrypted_plaintext) - 1]);
if (str_repeat(chr($padding_length), $padding_length) === substr($decrypted_plaintext, -1 * $padding_length)) {
    $plaintext = substr($decrypted_plaintext, 0, -1 * $padding_length); // Remove padding
} else {
    // Invalid padding
}
?>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn