将RC4从c#转换为vb

将RC4从c#转换为vb,c#,vb.net,encryption,C#,Vb.net,Encryption,我不得不将RC4代码从c#转换成vb 我试着在网上获取已经制作好的代码,但它们似乎不像我现在拥有的c#代码那样有效。 我对VB很陌生,所以这对我来说很难。也许专业人士会看到我犯的错误。这两种代码给出不同的加密结果 c#代码: 公共静态字符串RC4(字符串pStrMessage,字符串pStrKey) { char[]lbytasciary; int[]二进制; 国际lLngIndex// int-lBytJump; 煤焦温度; 智力低下; 国际lLngT; int lLngX; int lLng

我不得不将RC4代码从c#转换成vb 我试着在网上获取已经制作好的代码,但它们似乎不像我现在拥有的c#代码那样有效。 我对VB很陌生,所以这对我来说很难。也许专业人士会看到我犯的错误。这两种代码给出不同的加密结果

c#代码:

公共静态字符串RC4(字符串pStrMessage,字符串pStrKey)
{
char[]lbytasciary;
int[]二进制;
国际lLngIndex//
int-lBytJump;
煤焦温度;
智力低下;
国际lLngT;
int lLngX;
int lLngKeyLength//
字符串加密;//加密的消息
lLngKeyLength=pStrKey.Length;
如果(lLngKeyLength<1)
返回字符串。空;
if(pStrMessage.Length<1)
返回字符串。空;
lbytasciary=新字符[256];
lBytKeyAry=新整数[256];
对于(lLngIndex=0;lLngIndex<256;lLngIndex++)
{
lBytKeyAry[lLngIndex]=pStrKey[(lLngIndex%llngkeyelength)];
}
对于(lLngIndex=0;lLngIndex<256;lLngIndex++)
{
lbytasciariary[lLngIndex]=转换为字符串(lLngIndex);
}
lBytJump=0;
对于(lLngIndex=0;lLngIndex<256;lLngIndex++)
{
lBytJump=(lBytJump+lbytasciary[lLngIndex]+lBytKeyAry[lLngIndex])%256;
lBytTemp=lbytasciariary[lLngIndex];
lbytasciary[lLngIndex]=lbytasciary[lBytJump];
lbytasciary[lBytJump]=转换为字符串(lBytTemp);
}
lLngIndex=0;
lBytJump=0;
加密=”;
对于(lLngX=0;lLngX
我的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
公共函数RC4(ByVal pStrMessage作为字符串,ByVal pStrKey作为字符串)作为字符串
将lbytasciariary(0到256)设置为字符
Dim LBYTYKEYARY(0到256)作为整数
Dim lLngIndex为整数
作为整数的Dim-lBytJump
Dim lBytTemp作为字符
作为整数的Dim lBytY
作为整数的Dim lLngT
作为整数的Dim lLngX
Dim lLngKeyLength为整数
加密为字符串
lLngKeyLength=pStrKey.Length
如果lLngKeyLength<1,则
返回字符串。空
如果结束
如果PSTR消息长度小于1,则
返回字符串。空
如果结束
对于lLngIndex=0到255
lBytKeyAry(lLngIndex)=Val(pStrKey((lLngIndex Mod llngkeyelength)))
下一个
对于lLngIndex=0到255
lbytasciariary(lLngIndex)=转换为char(lLngIndex)
下一个
lBytJump=0
对于lLngIndex=0到255
lBytJump=(lBytJump+Asc(lbytasciariary(lLngIndex))+lBytKeyAry(lLngIndex))Mod 256
lBytTemp=lbytasciariary(lLngIndex)
lbytasciariary(lLngIndex)=lbytasciariary(lBytJump)
lbytasciary(lBytJump)=转换为字符串(lBytTemp)
下一个
lLngIndex=0
lBytJump=0
encrypt=“”
对于lLngX=0到PSTR消息长度-1
lLngIndex=(lLngIndex+1)模块256
lBytJump=(lBytJump+Asc(lbytasciariary(lLngIndex)))Mod 256
lLngT=Asc(lbytasciary(lLngIndex)+lbytasciary(lBytJump))Mod 256
lBytTemp=lbytasciariary(lLngIndex)
lbytasciariary(lLngIndex)=lbytasciariary(lBytJump)
lbytasciary(lBytJump)=lBytTemp
lBytY=Asc(LBYTASCIARY(lLngT))
encrypt=encrypt+Convert.ToChar(Asc(pStrMessage(lLngX))Xor lBytY)
下一个
返回加密
端函数
尝试使用此C#到VB转换器查看是否获得所需的结果

尝试使用此C#到VB转换器查看是否获得所需的结果

我以前使用过它,它还加密了另一个东西。他们两人都指出的问题是,在c#中可以向整数添加ascii字符,但在vb中不能。不管怎样,我现在已经修正了密码。问题是字符转换。我没有使用Char来强制转换它,而是尝试了Convert.toChar。无论如何谢谢你:)我以前用过这个,它也加密了另一个东西。他们两人都指出的问题是,在c#中可以向整数添加ascii字符,但在vb中不能。不管怎样,我现在已经修正了密码。问题是字符转换。我没有使用Char来强制转换它,而是尝试了Convert.toChar。无论如何谢谢你:)
   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