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é ?
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>
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!