2011-07-04 5 views
1

RC4コードをVBからVBに変換しなければならない状況に置かれた 私は既にコードをオンラインにしようとしましたが、現在持っているC#の1つとして機能していないようです。 私はVBにとって非常に新しいので、これは私にとっては非常に難しいです。たぶん専門家が私が作っている間違いを見るかもしれない。どちらのコードでも、異なる暗号化結果が得られます。RC4をC#からVBに変換する

C#コード:それの

public static string RC4(string pStrMessage, string pStrKey) 
     { 
      char[] lBytAsciiAry; 
      int[] lBytKeyAry; 
      int lLngIndex; // 
      int lBytJump; 
      char lBytTemp; 
      int lBytY; 
      int lLngT; 
      int lLngX; 
      int lLngKeyLength; // 
      string encrypt; //The encrypted message 

      lLngKeyLength = pStrKey.Length; 
      if (lLngKeyLength < 1) 
       return string.Empty; 

      if (pStrMessage.Length < 1) 
       return string.Empty; 

      lBytAsciiAry = new char[256]; 
      lBytKeyAry = new int[256]; 

      for (lLngIndex = 0; lLngIndex < 256; lLngIndex++) 
      { 
       lBytKeyAry[lLngIndex] = pStrKey[(lLngIndex % lLngKeyLength)]; 
      } 

      for (lLngIndex = 0; lLngIndex < 256; lLngIndex++) 
      { 
       lBytAsciiAry[lLngIndex] = Convert.ToChar(lLngIndex); 
      } 

      lBytJump = 0; 
      for (lLngIndex = 0; lLngIndex < 256; lLngIndex++) 
      { 
       lBytJump = (lBytJump + lBytAsciiAry[lLngIndex] + lBytKeyAry[lLngIndex]) % 256; 
       lBytTemp = lBytAsciiAry[lLngIndex]; 
       lBytAsciiAry[lLngIndex] = lBytAsciiAry[lBytJump]; 
       lBytAsciiAry[lBytJump] = Convert.ToChar(lBytTemp); 
      } 

      lLngIndex = 0; 
      lBytJump = 0; 
      encrypt = ""; 
      for (lLngX = 0; lLngX < pStrMessage.Length; lLngX++) 
      { 
       lLngIndex = (lLngIndex + 1) % 256; // wrap index 
       lBytJump = (lBytJump + lBytAsciiAry[lLngIndex]) % 256; // wrap J+S() 
       lLngT = (lBytAsciiAry[lLngIndex] + lBytAsciiAry[lBytJump]) % 256; 
       //swap 
       lBytTemp = lBytAsciiAry[lLngIndex]; 
       lBytAsciiAry[lLngIndex] = lBytAsciiAry[lBytJump]; 
       lBytAsciiAry[lBytJump] = lBytTemp; 

       lBytY = lBytAsciiAry[lLngT]; 
       //encrypt = encrypt + Chr(Asc(Mid(pStrMessage, lLngX, 1)) Xor lBytY) 
       encrypt = encrypt + Convert.ToChar(pStrMessage[lLngX]^lBytY); 
      } 

      return encrypt; 
     } 

私のVBの翻訳:

Public Function RC4(ByVal pStrMessage As String, ByVal pStrKey As String) As String 
     Dim lBytAsciiAry(0 To 256) As Char 
     Dim lBytKeyAry(0 To 256) As Integer 
     Dim lLngIndex As Integer 
     Dim lBytJump As Integer 
     Dim lBytTemp As Char 
     Dim lBytY As Integer 
     Dim lLngT As Integer 
     Dim lLngX As Integer 
     Dim lLngKeyLength As Integer 
     Dim encrypt As String 

     lLngKeyLength = pStrKey.Length 

     If lLngKeyLength < 1 Then 
      Return String.Empty 
     End If 

     If pStrMessage.Length < 1 Then 
      Return String.Empty 
     End If 

     For lLngIndex = 0 To 255 
      lBytKeyAry(lLngIndex) = Val(pStrKey((lLngIndex Mod lLngKeyLength))) 
     Next 

     For lLngIndex = 0 To 255 
      lBytAsciiAry(lLngIndex) = Convert.ToChar(lLngIndex) 
     Next 

     lBytJump = 0 
     For lLngIndex = 0 To 255 
      lBytJump = (lBytJump + Asc(lBytAsciiAry(lLngIndex)) + lBytKeyAry(lLngIndex)) Mod 256 
      lBytTemp = lBytAsciiAry(lLngIndex) 
      lBytAsciiAry(lLngIndex) = lBytAsciiAry(lBytJump) 
      lBytAsciiAry(lBytJump) = Convert.ToChar(lBytTemp) 
     Next 

     lLngIndex = 0 
     lBytJump = 0 
     encrypt = "" 

     For lLngX = 0 To pStrMessage.Length - 1 
      lLngIndex = (lLngIndex + 1) Mod 256 
      lBytJump = (lBytJump + Asc(lBytAsciiAry(lLngIndex))) Mod 256 
      lLngT = Asc(lBytAsciiAry(lLngIndex) + lBytAsciiAry(lBytJump)) Mod 256 

      lBytTemp = lBytAsciiAry(lLngIndex) 
      lBytAsciiAry(lLngIndex) = lBytAsciiAry(lBytJump) 
      lBytAsciiAry(lBytJump) = lBytTemp 

      lBytY = Asc(lBytAsciiAry(lLngT)) 
      encrypt = encrypt + Convert.ToChar(Asc(pStrMessage(lLngX)) Xor lBytY) 
     Next 

     Return encrypt 
    End Function 

答えて

1
+0

HTTPを得るかどうかを確認するためにVBコンバータに、このC#を使用して試してみてください:// converter.telerik.com/私は以前これを使用して別のものを暗号化しました。両方の問題は、C#では整数にASCII文字を追加できますが、VBではそのことができませんでした。とにかくコードを修正しました。問題は文字変換でした。 Charを使ってそれをキャストする代わりに、私はConvert.toCharを試みました。とにかくありがとうございました:) – Angie

関連する問題