Maison > développement back-end > C++ > Pourquoi le décryptage de Rijndael échoue-t-il avec un « remplissage invalide » et comment peut-il être corrigé ?

Pourquoi le décryptage de Rijndael échoue-t-il avec un « remplissage invalide » et comment peut-il être corrigé ?

Mary-Kate Olsen
Libérer: 2025-01-08 22:21:41
original
280 Les gens l'ont consulté

Why Does Rijndael Decryption Fail with

Remplissage invalide en cryptographie

Question :

Lorsque j'ai utilisé Rijndael pour décrypter un document XML crypté, j'ai rencontré une exception : "Le remplissage n'est pas valide et ne peut pas être supprimé".

Réponse :

Rijndael (également connu sous le nom d'AES) est un chiffrement par blocs qui crypte les données en blocs de 16 caractères. Le remplissage est utilisé pour garantir que le dernier morceau d'un message a toujours la taille appropriée.

Le remplissage par défaut pour Rijndael dans .NET est le remplissage PKCS#7. Cependant, le code fourni dans la question ne spécifie pas explicitement le mode de remplissage, ce qui entraîne des divergences entre les opérations de chiffrement et de décryptage.

Pour résoudre ce problème, le mode de remplissage pour le cryptage et le déchiffrement doit être défini explicitement. Plus précisément, la propriété Padding de l'objet RijndaelManaged doit être définie sur PaddingMode.PKCS7.

Voici un extrait de code modifié qui inclut explicitement la définition du remplissage :

<code class="language-csharp">public void Cryptography(XmlDocument doc, bool cryptographyMode)
{
    RijndaelManaged key = null;
    try
    {
        // 创建一个新的Rijndael密钥。
        key = new RijndaelManaged()
        {
            Padding = PaddingMode.PKCS7 //显式设置PKCS7填充模式
        };
        // ... 代码其余部分保持不变 ...
    }
    catch (Exception ex)
    {
        // ... 异常处理保持不变 ...
    }
    finally
    {
        // ... 密钥清理保持不变 ...
    }
}</code>
Copier après la connexion

En définissant explicitement le mode de remplissage, vous pouvez vous assurer que les processus de cryptage et de déchiffrement utilisent le même mécanisme de remplissage, résolvant ainsi les exceptions liées au remplissage. Cela évite les échecs de décryptage dus à des modèles de remplissage incohérents.

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