2016-11-01 1 views
2

2005 년부터 BouncyCastle Jar를 사용하여 Java DESede에서 출력 한 내용이 ... 매우 가까이에 있습니다 ...C# DESede Symmetric ECB Encryption (너무 가깝고 약간 다른 문자 임)!

다음은 내 출력이 Java (정확한 내용)이고 그 다음에 C# ... 편집기에서 보면 C#에서 "% 2F", "% 2D"및 C#이있는 끝에 자바에서 슬래시 "/"가있는 것을 제외하고는 거의 일치하는 것을 볼 수 있습니다 "=", Java는 "% 3D"를가집니다. 어떤 아이디어? (나는 그들이 일치 보여 공백을 추가 -.하지만 당신은 단지 편집기에서 표시됩니다)

F3e8sdZ % 2F951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp % 2BDzIbrf2J2dPpXyEXL2QU % 3D (자바 - 올바른)

F3e8sdZ/951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp + DzIbrf2J2dPpXyEXL2QU = (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; 
     } 
    } 

모든 : - 닫기) 여기

내 C# 코드입니다 지도가 크게 감사하겠습니다 !! 나는 2 주 동안이 일을 끝내고 마침내 승리를 맛볼 수있다. (나는 생각한다!)

+2

Java 출력이 urlencoded되었습니다. 나는 * 당신이 System.Uri.EscapeDataString()을 호출하여 일치시킬 수 있다고 생각한다. –

+0

당신이 옳다면 ... 인코딩 할 때 다음과 같은 결과가 나옵니다. F3e8sdZ % 2f951IRiguIAVqfDLyWptqlbWik5tvFzItcxJCEmupzD9wXp % 2bDzIbrf2J2dPpXyEXL2QU % 3d - Java "% 2F"가 "% 2f"(소문자 f)가된다는 사실을 알게되었습니다. ..이게 문제가 될 수 있니? –

+1

"% 2F"은 "/"이고 "% 2D"는 "="이며, 인코딩을 제거하십시오. – zaph

답변

1

자바 출력이 추가적으로 urlencoded 된 것으로 보인다. 현재 출력과 일치하도록 System.Uri.EscapeDataString()으로 전화 할 수 있어야합니다.