2012-06-20 52 views
0

我已反編譯與反射器該代碼在VB淨

所有串的vb.net應用用這種方法進行加密:

Public Shared Function smethod_0(ByVal string_0 As String) As String 
    Dim length As Integer = string_0.Length 
    Dim chArray As Char() = New Char(length - 1) {} 
    Dim i As Integer 
    For i = 0 To chArray.Length - 1 
     Dim ch As Char = string_0.Chars(i) 
     Dim num3 As Byte = CByte((ch Xor (length - i))) 
     Dim num4 As Byte = CByte(((ch >> 8) Xor i)) 
     chArray(i) = DirectCast(((num4 << 8) Or num3), Char) 
    Next i 
    Return String.Intern(New String(chArray)) 
End Function 

這個方法接收的輸入串是這樣的:

"j" & ChrW(354) & ChrW(623) & ChrW(868) 

並返回一個可讀的字符串。

如何將此代碼轉換爲vb.net或c#?

Vb.net編譯器抱怨說這段代碼不正確,因爲xor沒有爲char/int組合定義。

+1

嘗試切換反射到C#輸出 - 它往往除了事實,這不太可能是一個強大的加密產生比它VB.NET – Polynomial

+8

更準確的C#代碼(如果有的話)我傾向於發現**借用** someones代碼是不禮貌的 - 如果你知道這是VB,請求作者給你原始代碼 - 如果他拒絕繼續寫下它! – Carsten

回答

0

C#版本(僅適用於教育的原因 - 讓類似的代碼越好):

public static string encrypt(string s) 
{ 
    int length = s.Length, i = 0; 
    char[] chArray = new char[length]; 
    byte b1, b2; 
    char ch; 
    for (i = 0; i <= chArray.Length - 1; i++) 
    { 
     ch = s[i]; 
     b1 = Convert.ToByte((ch^(length - i))); 
     b2 = Convert.ToByte(((ch >> 8)^i)); 
     chArray[i] = (char)((b2 << 8) | b1); 
    } 
    return string.Intern(new string(chArray)); 
} 
+0

line b1 = Convert.t((ch ^(length - i)));返回此錯誤:對於無符號字節,值太大或太小 – marino

+0

很明顯,當您要編碼的字符串超過255個字符時會發生這種情況。您找到的代碼適用於長度較短的字符串。較大的字符串最初應該分成短路字符串。 – 2012-06-20 10:29:26

+0

我已這樣解決: – marino

0

我已經以這種方式解決:

public static string encrypt(string string_0) 
    { 
     int length = string_0.Length; 
     char[] chArray = new char[length]; 
     for (int i = 0; i < chArray.Length; i++) 
     { 
      char ch = string_0[i]; 
      byte num3 = (byte)(ch^(length - i)); 
      byte num4 = (byte)((ch >> 8)^i); 
      chArray[i] = (char)((num4 << 8) | num3); 
     } 

     File.AppendAllText("decript.txt", Environment.NewLine + string_0 + " = " + string.Intern(new string(chArray))); 

回報中的String.intern(新的字符串(沙爾賴) );

} 

感謝您的幫助