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