2016-11-01 4 views
2

Мой вывод, который я должен соответствовать от Java DESede с использованием Jar BouncyCastle с 2005 года ... Я очень близко ...C# DESede Симметричное шифрование ECB (я так близко - немного отличающиеся символы)!

Вот мой выход в Java (что правильно), а затем мой выход в C# ... если вы просмотрите в редакторе, вы увидите, что они ALMOST совпадают, за исключением C#, где он имеет косую черту «/» в Java, он имеет «% 2F», «% 2D» и в конце, где C# имеет a "=", Java имеет "% 3D". Есть идеи? (Я добавил пространства, чтобы показать, что они совпадают. - но вы будете видеть их только в редакторе)

F3e8sdZ% 2F951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp% 2BDzIbrf2J2dPpXyEXL2QU% 3D (Java - Корректное)

F3e8sdZ/951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp + DzIbrf2J2dPpXyEXL2QU = (C# ? - Закрыть)

Вот мой 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; 
     } 
    } 

Любой руководство будет принята с благодарностью !!!! Я был на этом в течение 2 недель и, наконец, могу попробовать победу (я думаю !?)

+2

Похоже, что выход Java был укоренен. Я * думаю * вы могли бы назвать 'System.Uri.EscapeDataString()' для соответствия. –

+0

Вы так правы ... поэтому, когда я его кодирую, я получаю следующий F3e8sdZ% 2f951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp% 2bDzIbrf2J2dPpXyEXL2QU% 3d - обратите внимание, что только различие в том, что Java «% 2F» становится «% 2f» (нижний регистр f). .. может ли это проблема? –

+1

«% 2F» - «/» и «% 2D» - «=», удалите кодировку. – zaph

ответ

1

Ваш выход на Java, похоже, дополнительно был уркодекодом. Вы должны иметь возможность позвонить System.Uri.EscapeDataString() в соответствии с вашим текущим выпуском.

Смежные вопросы