2016-11-01 4 views
2

私の出力は、2005年のBouncyCastle Jarを使用したJava DESedeからのものです...私は非常に近いです...C#DESEDe対称ECB暗号化(私はとても近い - 若干異なる文字です)!

ここで私の出力はJava(正しい) ...エディタで表示すると、C#以外でスラッシュ "/"があり、 "%2F"、 "%2D"、最後にC#がある場所を除き、ALMOSTと一致します"="、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の出力がurlencodedされているようです。私は*あなたが 'System.Uri.EscapeDataString()'を呼び出すことで一致すると思う*。 –

+0

あなたはとてもそうです...私はそれをエンコードすると、次のようになります。F3e8sdZ%2f951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp%2bDzIbrf2J2dPpXyEXL2QU%3d - Javaの "%2F"が "%2f"(小文字のf)になるということです。 ..これは問題を提示することができますか? –

+1

"%2F"は "/"で、 "%2D"は "="で、エンコーディングを削除します。 – zaph

答えて

1

あなたのJava出力は、さらにurlencodedされているようです。現在の出力と一致するようにSystem.Uri.EscapeDataString()に電話することができます。

関連する問題