Maison > développement back-end > tutoriel php > Comment ajouter et supprimer le remplissage PKCS7 pour le cryptage AES en mode ECB ?

Comment ajouter et supprimer le remplissage PKCS7 pour le cryptage AES en mode ECB ?

Barbara Streisand
Libérer: 2024-12-03 22:57:20
original
677 Les gens l'ont consulté

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

Ajout et suppression du remplissage PKCS7 pour le cryptage AES

Lors du cryptage de données à l'aide du cryptage AES 128 bits en mode Electronic Codebook (ECB), il est nécessaire d'ajouter et de supprimer le remplissage PKCS7 au texte brut et au texte chiffré, respectivement.

Le remplissage PKCS7 est une méthode définie dans la RFC 5652 qui garantit que la longueur des données est un multiple de la taille du bloc. Cela implique d'ajouter autant d'octets que nécessaire pour remplir le dernier bloc, où chaque octet est défini sur le nombre d'octets de remplissage ajoutés.

Ajout du remplissage PKCS7

Pour ajouter Remplissage PKCS7 du texte en clair avant le chiffrement à l'aide d'AES :

  1. Déterminer la taille de bloc de l'algorithme AES (généralement 16 octets pour AES 128 bits).
  2. Calculez le nombre d'octets nécessaires pour remplir le dernier bloc : pad = block_size - (plaintext_length % block_size).
  3. Créez une chaîne avec le caractère répété chr(pad) pour représenter les octets de remplissage.
  4. Ajoutez la chaîne de remplissage au texte en clair.

Suppression du remplissage PKCS7

Pour supprimer le remplissage PKCS7 du texte chiffré après le déchiffrement à l'aide d'AES :

  1. Déterminez la taille du bloc de l'algorithme AES.
  2. Obtenir le dernier octet du texte chiffré.
  3. Définissez la taille de remplissage du texte chiffré.
  4. Coupez les derniers octets du texte chiffré.

Fonctions PHP pour effectuez ces opérations :

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);
}
Copier après la connexion

Notez qu'il est recommandé d'utiliser CBC ou d'autres modes de chaînage au lieu d'ECB pour des raisons de sécurité. 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal