2016-11-01 1 views
2

Ma sortie que je dois correspondre est de Java DESede en utilisant un BouncyCastle Jar de 2005 ... Je suis très proche ...C# DESede Symmetric ECB Encryption (Je suis si proche - des caractères légèrement différents)!

Voici ma sortie en Java (ce qui est correct) suivi de ma sortie en C# ... si vous affichez dans un éditeur, vous verrez qu'ils correspondent presque, sauf dans C# où il a une barre oblique "/" en Java il a "% 2F", "% 2D" et à la fin où C# est un "=", Java a "% 3D". Des idées? (J'ai ajouté des espaces pour montrer qu'ils correspondent -. Mais vous ne les voir dans un éditeur)

F3e8sdZ% 2F951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp% 2BDzIbrf2J2dPpXyEXL2QU% 3D (Java - Correct)

F3e8sdZ/951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp + DzIbrf2J2dPpXyEXL2QU = (C# ? - Fermer)

Voici mon code C#:

public static string DoubleTrippleDESede(string strToEncode, ref string symKey, ref ICryptoTransform cipher) 
    { 
     try 
     { 
      //byte[] input = Encoding.UTF8.GetBytes("DESede (3DES) Encryption in RAILO CFML"); 
      byte[] input = Encoding.UTF8.GetBytes(strToEncode); 
      //byte[] key = Convert.FromBase64String("ru8femXhTm9jwdGdhb/4Sw=="); 
      byte[] key = Convert.FromBase64String(symKey); 
      TripleDESCryptoServiceProvider algorithm = new TripleDESCryptoServiceProvider(); 
      algorithm.Mode = CipherMode.ECB; 
      algorithm.BlockSize = 64; 
      algorithm.KeySize = 192; // 24 byte key 
      algorithm.Key = key; //Original 
      //algorithm.Key = key.CopyTo(algorithm.Key,) 
      cipher = algorithm.CreateEncryptor(); 
      byte[] encrypted = cipher.TransformFinalBlock(input, 0, input.Length); 
      Debug.WriteLine("encrypted (.NET): {0}", Convert.ToBase64String(encrypted)); 
      return Convert.ToBase64String(encrypted); 
     } 
     catch (Exception ex) 
     { 
      return ex.Message; 
     } 
    } 

Tous les conseils seraient grandement appréciés !!!! J'y suis depuis 2 semaines et finalement goûter à la victoire (je pense !?)

+2

Il semble que la sortie Java a été codée en url. Je * pense * que vous pouvez appeler 'System.Uri.EscapeDataString()' pour correspondre. –

+0

Vous avez tellement raison ... alors quand je l'ai encodé, je reçois ce qui suit: F3e8sdZ% 2f951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp% 2bDzIbrf2J2dPpXyEXL2QU% 3d - notez que la seule différence est que Java "% 2F" devient "% 2f" (minuscule f). .. cela pourrait-il poser un problème? –

+1

"% 2F" est "/" et "% 2D" est "=", supprimez l'encodage. – zaph

Répondre

1

Votre sortie Java semble avoir été encodée en plus. Vous devriez être en mesure d'appeler System.Uri.EscapeDataString() pour correspondre à votre production actuelle.