Maison >développement back-end >tutoriel php >Comment le remplissage PKCS7 fonctionne-t-il avec le cryptage AES et comment puis-je l'ajouter et le supprimer en PHP ?

Comment le remplissage PKCS7 fonctionne-t-il avec le cryptage AES et comment puis-je l'ajouter et le supprimer en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-05 21:01:12874parcourir

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

Remplissage PKCS7 pour le cryptage AES

Lors de l'utilisation du cryptage AES, il est courant d'utiliser le remplissage PKCS7 pour garantir que la longueur des données cryptées s'aligne sur le bloc taille de l’algorithme de chiffrement sous-jacent. Cependant, l'ajout et la suppression de ce remplissage peuvent ne pas être gérés par l'extension Mcrypt, ce qui en fait une tâche manuelle.

PKCS7 Padding Explained

Tel que défini dans la RFC 5652, Le remplissage PKCS #7 fonctionne en ajoutant des octets avec une valeur égale à la longueur du remplissage. Par exemple, si nous devons remplir trois octets, les octets ajoutés auront tous la valeur 0x03.

Ajout du remplissage PKCS7

Pour ajouter le remplissage manuellement, calculez le différence entre la longueur actuelle des données et la taille de bloc souhaitée. Cette valeur représente le nombre d'octets de remplissage requis. Ensuite, ajoutez autant d'octets avec la longueur de remplissage comme valeur à la fin des données.

Exemple de fonction PHP pour ajouter du remplissage

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

Suppression PKCS7 Padding

Pour supprimer le remplissage, lisez le dernier octet des données déchiffrées. Cette valeur représente la longueur du remplissage. Ensuite, supprimez simplement ce nombre d'octets à la fin des données.

Exemple de fonction PHP pour supprimer le remplissage

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

Notes d'implémentation

  • Les exemples de fonctions PHP utilisent une taille de bloc de 16 octets pour AES-128.
  • Il est crucial de vérifier que le remplissage est correct avant d'utiliser les données déchiffrées en s'assurant que tous les octets de remplissage ont la même valeur que la longueur de remplissage.
  • Le mode ECB n'est pas sécurisé. Encouragez votre client à envisager d'utiliser un mode plus sécurisé comme CBC ou GCM pour cette tâche de cryptage.

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