Déchiffrement d’une chaîne dans ColdFusion chiffrée avec 3DES en C #

Nous avons du mal à déchiffrer une chaîne dans ColdFusion qui était auparavant chiffrée avec 3DES et C #. Voici le code que nous avons utilisé pour chiffrer la chaîne initialement:

public static ssortingng EncryptTripleDES(ssortingng plaintext, ssortingng key) { TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider(); MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider(); DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key)); DES.Mode = CipherMode.ECB; ICryptoTransform DESEncrypt = DES.CreateEncryptor(); byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(plaintext); ssortingng EncSsortingng = Convert.ToBase64Ssortingng(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length)); EncSsortingng = EncSsortingng.Replace("+", "@@12"); return EncSsortingng; } 

Nous avons essayé d’utiliser les suggestions ici:

TripleDES Encryption – .NET et ColdFusion ne jouent pas bien

..avec pas de chance. Voici notre code CF et l’erreur:

      

Erreur renvoyée: Une erreur s’est produite lors de la tentative de chiffrement ou de déchiffrement de votre chaîne de saisie: ” Impossible de déchiffrer la chaîne “blahblah”

On dirait donc qu’il s’agit de tenter de déchiffrer la clé et non la chaîne, mais ce n’est pas ainsi que la fonction de déchiffrement est décrite dans ColdFusion. Des idées?

UPDATE: Vous avez tenté d’utiliser le code CF suivant, mais l’erreur renvoyée est toujours “Une erreur s’est produite lors de la tentative de chiffrement ou de déchiffrement de votre chaîne d’entrée: Le dernier bloc n’a pas été correctement rempli.”

          Decrypted Ssortingng:  

METTRE À JOUR:

La solution si vous suivez les commentaires était de changer:

  

À:

  

Le code final est le suivant:

         Decrypted Ssortingng:  

    Il semble y avoir quelques modifications supplémentaires dans votre fonction c # que vous devez gérer pour obtenir la compatibilité:

    1. La fonction .NET modifie la chaîne cryptée. Vous devez inverser ces modifications pour que le déchiffrement le reconnaisse comme base64 valide:

          
    2. La fonction utilise également un hachage qui crée une clé de 16 octets. CF / Java nécessite une clé de 24 octets pour cet algorithme. Donc, vous devez d’abord hacher la clé et l’ ajuster à la bonne longueur . Sinon, decrypt () se plaindra que la clé est trop petite.

      Remarque: CF s’attend également à ce que la clé finale soit codée en base64. L’erreur Impossible de décoder la chaîne “blahblah” suggère que votre clé d’entrée n’est pas en base64.

             
    3. Enfin, les modes de retour doivent correspondre. Etant donné que le code .NET utilise le mode ECB moins sécurisé, le code CF doit également utiliser ce mode.

         Decrypted Ssortingng:  
    4. Un autre problème à surveiller est le codage. Dans CF, chiffrer / déchiffrer interprète toujours la chaîne d’entrée comme UTF8, alors que la fonction .NET utilise ASCII . Pour une compatibilité totale, les deux parties doivent utiliser le même codage, dans ce cas, UTF8.


    Mettre à jour:

    J’ai testé ce qui précède avec une clé arbitraire de 8 caractères (au lieu d’une chaîne base64) et CF9 a toujours déchiffré la chaîne correctement.

     // .NET Code Ssortingng text = "some text to encrypt"; Ssortingng key = "abcdefgh"; Ssortingng encrypted = EncryptTripleDES(text, key); // result: encrypted=Hx41SYUrmnFPa31QCH1ArCHN1YOF8IAL Console.WriteLine("encrypted={0}", encrypted);      ....