2012-05-21 3 views
0

.net 응용 프로그램에서 알려진 텍스트 키를 사용하여 텍스트 문자열을 암호화 한 다음 동일한 알려진 키를 사용하여 Ruby에서 해독해야합니다. 그러나 문제가 있습니다. 이것은 일어난다. 문자열 인코딩 문제와 관련 있다고 생각합니다. .Net to Ruby RC4 예제는 파악하기 어려운 것으로 입증되었습니다.Ruby의 암호 해독을위한 .net.

Ruby 측에서 복호화가 수신되었지만 유효하지 않습니다. 암호화/암호 해독은 .net 구현에서 잘 작동합니다. 그러나 암호화 된 값을 Ruby 구현으로 복사하고 동일한 키를 사용하면 원래 값을 얻지 못합니다. 다음은

내 .NET의 RC4 구현 (이 최고 수준의 보안을 필요로하지 않지만, 일부는 좋은)입니다 :)

루비 측면에서

것은 내가 루비 RC4를 사용하고 https://github.com/caiges/Ruby-RC4

 public string keytext = "thisismykey"; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    public void RC4(ref Byte[] bytes, Byte[] key) 
    { 

     Byte[] s = new Byte[256]; 
     Byte[] k = new Byte[256]; 
     Byte temp; 
     int i, j; 

     for (i = 0; i < 256; i++) 
     { 
      s[i] = (Byte)i; 
      k[i] = key[i % key.GetLength(0)]; 
     } 

     j = 0; 
     for (i = 0; i < 256; i++) 
     { 
      j = (j + s[i] + k[i]) % 256; 
      temp = s[i]; 
      s[i] = s[j]; 
      s[j] = temp; 
     } 

     i = j = 0; 
     for (int x = 0; x < bytes.GetLength(0); x++) 
     { 
      i = (i + 1) % 256; 
      j = (j + s[i]) % 256; 
      temp = s[i]; 
      s[i] = s[j]; 
      s[j] = temp; 
      int t = (s[i] + s[j]) % 256; 
      bytes[x] ^= s[t]; 
     } 
    } 
    static byte[] GetBytes(string str) 
    { 
     Byte[] bytes = new byte[str.Length * sizeof(char)]; 
     System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
     return bytes; 
    } 
    static string GetString(byte[] bytes) 
    { 
     char[] chars = new char[bytes.Length/sizeof(char)]; 
     System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length); 
     return new string(chars); 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     Byte[] content = Encoding.ASCII.GetBytes(textBox1.Text); 
     RC4(ref content, Encoding.ASCII.GetBytes(keytext)); 
     textBox2.Text = Encoding.ASCII.GetString(content); 
     RC4(ref content, Encoding.ASCII.GetBytes(keytext)); 
     label1.Text = Encoding.ASCII.GetString(content); 
    } 
+0

정확히 어떤 문제가 있는지 자세히 설명해 주시겠습니까? 오류 메시지? 잘못된 결과입니까? – PinnyM

+0

업데이트 된 질문 : Ruby 측에서 복호화가 잘못되었습니다. 암호화/암호 해독은 .net 구현에서 잘 작동합니다. 그러나 암호화 된 값을 Ruby 구현으로 복사하고 동일한 키를 사용하면 원래 값을 얻지 못합니다. – Webjedi

+0

.net에서 ruby로 해시를 전송하는 데 사용 하시겠습니까? 거기에 루비 끝 (ASCII 대신 UTF-8)에서 사용하는 특정 인코딩 있나요? – PinnyM

답변

0

ASCII 인코딩이 7 비트이고 127 이상의 값으로 문자를 재생성하는 데 문제가있어 문제가 발생할 가능성이 높습니다. UTF-8로 인코딩하거나 바이트 배열을 Base64 문자열로 변환하십시오.