Java C#DESede对称ECB加密(我非常接近-字符略有不同)!

Java C#DESede对称ECB加密(我非常接近-字符略有不同)!,java,c#,bouncycastle,3des,Java,C#,Bouncycastle,3des,我必须匹配的输出来自JavaDesede,使用2005年的BouncyCastle Jar。。。我非常接近 下面是我的Java输出(这是正确的),后面是我的C输出。。。如果您在编辑器中查看,您将看到它们几乎匹配,除了在C中有一个正斜杠“/”在Java中有“%2F”和“%2D”,在C的末尾有一个“=”,Java有“%3D”。有什么想法吗?(我添加了空格以显示它们的匹配-但您只能在编辑器中看到它们。) F3e8sdZ%2F951RIGUIAVQFDLYWPTQLBWIK5TVFZITCXJCEMUP

我必须匹配的输出来自JavaDesede,使用2005年的BouncyCastle Jar。。。我非常接近

下面是我的Java输出(这是正确的),后面是我的C输出。。。如果您在编辑器中查看,您将看到它们几乎匹配,除了在C中有一个正斜杠“/”在Java中有“%2F”和“%2D”,在C的末尾有一个“=”,Java有“%3D”。有什么想法吗?(我添加了空格以显示它们的匹配-但您只能在编辑器中看到它们。)

F3e8sdZ%2F951RIGUIAVQFDLYWPTQLBWIK5TVFZITCXJCEMUPZD9WXP%2DZIBRF2J2DPPXYEXL2QU%3D(Java-正确)

F3e8sdZ/951RIGIAVQFDLYWPTQLBWIK5TVFZITCXJCEMUPZD9WXP+DzIbrf2J2dPpXyEXL2QU=(C#-关闭?)

这是我的C#代码:


任何指导都将不胜感激!!!!我已经做了两个星期了,终于可以尝到胜利的滋味了(我想!?)

您的Java输出似乎已经进行了额外的URL编码。您应该能够调用以匹配当前输出

Java输出似乎已被URL编码。我想你可以调用
System.Uri.EscapeDataString()
来匹配。“%2F”是“/”而“%2D”是“=”,删除编码。corse 3DE的编码不应该在新代码中使用,而应该在旧代码中转换为AES。@DanB很多事情可能会出现问题,我试着关注现在。如果你关心它,大写是编码结果,当它与输入不同时。是的,我知道,这是同一个老故事。我想我们将在2050年在遗留系统中使用3DES。
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;
        } 
    }