Autor Tema: Algortimos Alleged RC4 y Base 64  (Leído 11461 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Ozcarj

  • Bytes
  • *
  • Mensajes: 17
  • Reputación: +1/-1
    • Ver Perfil
Algortimos Alleged RC4 y Base 64
« en: Diciembre 05, 2011, 12:29:18 am »
Saludos a todo el foro, primeramente agradecimientos anticipados a todos los que les interese el tema, les comento que estuve buscando el codigo del algoritmo Alleged RC4 y Base 64 realizado en vb6, pero sin resultados, solo encontre uno realizado en C# y bueno yo soy un novato en programación y me preguntaba se alguno de ustedes compañeros pudiese ayudarme convirtiendo o migrando los siguientes codigos hechos en C# a VB6.

ALLEGEDRC4:
Código: (csharp) [Seleccionar]
public string allegedrc4(string codigo, string llavellegada)
{
int[] State = new int[256 + 1];
string Mensaje = String.Empty;
string llave = String.Empty;
string MsgCif = String.Empty;
int X = 0;
int Y = 0;
int Index1 = 0;
int Index2 = 0;
int NMen = 0;
int i = 0;
short op1 = 0;
int aux = 0;
int op2 = 0;
string nrohex = String.Empty;


X = 0;
Y = 0;
Index1 = 0;
Index2 = 0;
Mensaje = codigo;
llave = llavellegada;
for (i = 0; i <= 255.0; i += 1)
{
State[i] = i;
}
for (i = 0; i <= 255.0; i += 1)
{
op1 = (short)(llave.Substring(Index1 + 1 - 1, 1)[0]);
Index2 = (op1 + State[i] + Index2) % 256;
aux = State[i];
State[i] = State[Index2];
State[Index2] = aux;
Index1 = (Index1 + 1) % llave.Length;
}
for (i = 0; i <= Mensaje.Length - 1; i += 1)
{
X = (X + 1) % 256;
Y = (State[X] + Y) % 256;
aux = State[X];
State[X] = State[Y];
State[Y] = aux;
op1 = (short)(Mensaje.Substring(i + 1 - 1, 1)[0]);
op2 = State[(State[X] + State[Y]) % 256];
NMen = op1 ^ op2;
nrohex = NMen.ToString("X");
if (nrohex.Length == 1)
{
nrohex = "0" + nrohex;
}
MsgCif = MsgCif + nrohex;
}
MsgCif = MsgCif.Substring(MsgCif.Length - (MsgCif.Length));
return MsgCif;
}


BASE 64:
Código: (csharp) [Seleccionar]
string[] diccionario = new string[64] {

"0", "1", "2", "3", "4", "5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K" ,"L","M","N","O","P","Q","R","S","T","U","V" ,"W","X","Y","Z","a","b","c","d","e","f","g" ,"h","i","j","k","l","m","n","o","p","q","r" ,"s","t","u","v","w","x","y","z","+","/"

};

public string base64(int numero)
{
int cociente = 1; int resto; string palabra = "";
while (cociente > 0)
{
cociente = numero / 64;
resto = numero % 64;
palabra = diccionario[resto] + palabra;
numero = cociente;

}
return (palabra);
}

Otras vez muchas gracias por sus respuestas y/o comentarios.
Oscar J. Crespo
La Paz Bolivia
« última modificación: Enero 01, 2012, 06:06:51 pm por Ozcarj »

RHL

  • Bytes
  • *
  • Mensajes: 26
  • Reputación: +3/-15
    • Ver Perfil
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #1 en: Diciembre 05, 2011, 04:19:23 am »
emm esto es C/C++ :P
y aqui es VB :P

xkiz ™

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 283
  • Reputación: +30/-11
    • Ver Perfil
    • xkiz ™
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #2 en: Diciembre 05, 2011, 06:36:46 am »
@RHL no esta pidiendo scr en C# si no que lo ayuden a convertir un scr de C# a VB6.

encontre una clase que tenia guardada:

Código: (VB) [Seleccionar]
Option Explicit

Private Const Equals As Byte = 61    'Asc("=")

Private Const Mask1 As Byte = 3      '00000011
Private Const Mask2 As Byte = 15     '00001111
Private Const Mask3 As Byte = 63     '00111111
Private Const Mask4 As Byte = 192    '11000000
Private Const Mask5 As Byte = 240    '11110000
Private Const Mask6 As Byte = 252    '11111100

Private Const Shift2 As Byte = 4
Private Const Shift4 As Byte = 16
Private Const Shift6 As Byte = 64

Private Base64Lookup() As Byte
Private Base64Reverse() As Byte

Public Function EncodeString(Text As String) As String

   Dim Data() As Byte
   
   Data = StrConv(Text, vbFromUnicode)
   EncodeString = EncodeByteArray(Data)

End Function

Public Function EncodeByteArray(Data() As Byte) As String

   Dim EncodedData() As Byte

   Dim DataLength As Long
   Dim EncodedLength As Long
   Dim Data0 As Long
   Dim Data1 As Long
   Dim Data2 As Long
   Dim l As Long
   Dim m As Long
   Dim Index As Long
   Dim CharCount As Long

   DataLength = UBound(Data) + 1

   EncodedLength = (DataLength \ 3) * 4
   If DataLength Mod 3 > 0 Then EncodedLength = EncodedLength + 4
   EncodedLength = EncodedLength + ((EncodedLength \ 76) * 2)
   If EncodedLength Mod 78 = 0 Then EncodedLength = EncodedLength - 2
   ReDim EncodedData(EncodedLength - 1)

   m = (DataLength) Mod 3

   For l = 0 To UBound(Data) - m Step 3
      Data0 = Data(l)
      Data1 = Data(l + 1)
      Data2 = Data(l + 2)
      EncodedData(Index) = Base64Lookup(Data0 \ Shift2)
      EncodedData(Index + 1) = Base64Lookup(((Data0 And Mask1) * Shift4) Or (Data1 \ Shift4))
      EncodedData(Index + 2) = Base64Lookup(((Data1 And Mask2) * Shift2) Or (Data2 \ Shift6))
      EncodedData(Index + 3) = Base64Lookup(Data2 And Mask3)
      Index = Index + 4
      CharCount = CharCount + 4

      If CharCount = 76 And Index < EncodedLength Then
         EncodedData(Index) = 13
         EncodedData(Index + 1) = 10
         CharCount = 0
         Index = Index + 2
      End If
   Next

   If m = 1 Then
      Data0 = Data(l)
      EncodedData(Index) = Base64Lookup((Data0 \ Shift2))
      EncodedData(Index + 1) = Base64Lookup((Data0 And Mask1) * Shift4)
      EncodedData(Index + 2) = Equals
      EncodedData(Index + 3) = Equals
      Index = Index + 4
   ElseIf m = 2 Then
      Data0 = Data(l)
      Data1 = Data(l + 1)
      EncodedData(Index) = Base64Lookup((Data0 \ Shift2))
      EncodedData(Index + 1) = Base64Lookup(((Data0 And Mask1) * Shift4) Or (Data1 \ Shift4))
      EncodedData(Index + 2) = Base64Lookup((Data1 And Mask2) * Shift2)
      EncodedData(Index + 3) = Equals
      Index = Index + 4
   End If

   EncodeByteArray = StrConv(EncodedData, vbUnicode)

End Function

Public Function DecodeToString(EncodedText As String) As String

   Dim Data() As Byte
   
   Data = DecodeToByteArray(EncodedText)
   DecodeToString = StrConv(Data, vbUnicode)

End Function

Public Function DecodeToByteArray(EncodedText As String) As Byte()

   Dim Data() As Byte
   Dim EncodedData() As Byte

   Dim DataLength As Long
   Dim EncodedLength As Long

   Dim EncodedData0 As Long
   Dim EncodedData1 As Long
   Dim EncodedData2 As Long
   Dim EncodedData3 As Long

   Dim l As Long
   Dim m As Long
   Dim Index As Long
   Dim CharCount As Long

   EncodedData = StrConv(Replace$(Replace$(EncodedText, vbCrLf, ""), "=", ""), vbFromUnicode)

   EncodedLength = UBound(EncodedData) + 1
   DataLength = (EncodedLength \ 4) * 3

   m = EncodedLength Mod 4
   If m = 2 Then
      DataLength = DataLength + 1
   ElseIf m = 3 Then
      DataLength = DataLength + 2
   End If

   ReDim Data(DataLength - 1)

   For l = 0 To UBound(EncodedData) - m Step 4
      EncodedData0 = Base64Reverse(EncodedData(l))
      EncodedData1 = Base64Reverse(EncodedData(l + 1))
      EncodedData2 = Base64Reverse(EncodedData(l + 2))
      EncodedData3 = Base64Reverse(EncodedData(l + 3))
      Data(Index) = (EncodedData0 * Shift2) Or (EncodedData1 \ Shift4)
      Data(Index + 1) = ((EncodedData1 And Mask2) * Shift4) Or (EncodedData2 \ Shift2)
      Data(Index + 2) = ((EncodedData2 And Mask1) * Shift6) Or EncodedData3
      Index = Index + 3
   Next

   Select Case ((UBound(EncodedData) + 1) Mod 4)
   Case 2
      EncodedData0 = Base64Reverse(EncodedData(l))
      EncodedData1 = Base64Reverse(EncodedData(l + 1))
      Data(Index) = (EncodedData0 * Shift2) Or (EncodedData1 \ Shift4)
   Case 3
      EncodedData0 = Base64Reverse(EncodedData(l))
      EncodedData1 = Base64Reverse(EncodedData(l + 1))
      EncodedData2 = Base64Reverse(EncodedData(l + 2))
      Data(Index) = (EncodedData0 * Shift2) Or (EncodedData1 \ Shift4)
      Data(Index + 1) = ((EncodedData1 And Mask2) * Shift4) Or (EncodedData2 \ Shift2)
   End Select

   DecodeToByteArray = Data

End Function

Private Sub Class_Initialize()
   Dim l As Long
   
   ReDim Base64Reverse(255)
   Base64Lookup = StrConv("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", vbFromUnicode)
   
   For l = 0 To 63
      Base64Reverse(Base64Lookup(l)) = l
   Next
   
End Sub

lo otro te lo devo....
« última modificación: Diciembre 05, 2011, 06:39:11 am por xkiz ™ »

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #3 en: Diciembre 05, 2011, 10:45:09 am »
Encontre estos tal ves te sirva:

Base64
http://www.nonhostile.com/howto-encode-decode-base64-vb6.asp
http://www.source-code.biz/snippets/vbasic/12.htm
http://www.mcmillan.org.nz/paradoxes2/code/base64.html

Alleged RC4

Código: (VB) [Seleccionar]
Public Function alleged_RC4(keyASCII As String, menASCII As String) As String
   
    Dim i As Integer
    Dim x As Integer
    Dim y As Integer
    Dim index2 As Integer
    Dim index1 As Integer
    Dim tmp As Integer
    Dim xorIndex As Integer
    Dim men_len As Integer
    Dim key_len As Integer
    Dim rtn As String
   
    Dim key() As Integer
    Dim men() As Integer
    Dim state(256) As String
   
    men_len = Len(menASCII)
    key_len = Len(keyASCII)

    '//ASCII key characters
    ReDim key(key_len)
    For i = 1 To key_len
        key(i - 1) = Asc(Mid$(keyASCII, i, 1))
    Next
   
    '//ASCII men characters
    ReDim men(men_len)
    For i = 1 To men_len
        men(i - 1) = Asc(Mid$(menASCII, i, 1))
    Next

    For i = 0 To 255
        state(i) = i
    Next

    x = 0
    y = 0
    index1 = 0
    index2 = 0

    For i = 0 To 255
        index2 = (key(index1) + state(i) + index2) Mod 256
        'swap_byte(state(i), state(index2))
        tmp = state(i)
        state(i) = state(index2)
        state(index2) = tmp
        '//
        index1 = (index1 + 1) Mod key_len
    Next

    For i = 0 To men_len - 1
        x = (x + 1) Mod 256
        y = (state(x) + y) Mod 256
        'swap_byte(state(x), state(y))
        tmp = state(x)
        state(x) = state(y)
        state(y) = tmp
        '//
        xorIndex = (state(x) + state(y)) Mod 256
        men(i) = men(i) Xor state(xorIndex)
        rtn = rtn + Chr(men(i))
    Next

    '//Return
    alleged_RC4 = rtn

End Function
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

Ozcarj

  • Bytes
  • *
  • Mensajes: 17
  • Reputación: +1/-1
    • Ver Perfil
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #4 en: Diciembre 05, 2011, 10:58:54 am »
Muchas gracias por el aporte pero te comento que encontre eses codigo y no me servio no se por que tiene que ser igual al que esta hecho en C#, de todos modos muchas gracias otra vez

Mr. X

  • Visitante
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #5 en: Diciembre 05, 2011, 11:39:43 am »
Yo ahora veo si lo paso. Aunque solo se lo básico de c#.

PD: el geshi soporta c# creo que es code=csharp
ahora lo averiguo
edito: si, es [code=csharp]aca el código[/code]
« última modificación: Diciembre 05, 2011, 12:00:53 pm por Mr. X »

79137913

  • Megabyte
  • ***
  • Mensajes: 185
  • Reputación: +21/-4
  • 4 Esquinas
    • Ver Perfil
    • Eco.Resumen Resumenes Cs. Economicas
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #6 en: Diciembre 05, 2011, 01:39:50 pm »
HOLA!!!

El base64:

Código: (vb) [Seleccionar]
Public Function base64(numero As Integer) As String
    Dim Diccionario As String: Diccionario = "0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z + /"
    Dim dic() As String: dic = Split(Diccionario)
    Dim Cociente As Long: Cociente = 1
    Dim Resto As Long
    Dim Palabra As String
        While Cociente > 0
            Cociente = numero / 64
            Resto = numero Mod 64
            Palabra = dic(Resto) & Palabra
        Wend
        base64 = Palabra
End Function

El RC4, desconozco "short" asi que no se si funcionara bien aunque con un par de retoques si sabes vb lo haces ;).

Código: (vb) [Seleccionar]
Public Function allegedrc4(codigo As String, llavellegada As String) As String
    Dim Mensaje As String: Mensaje = vbNullString
    Dim Llave As String: Llave = vbNullString
    Dim MsgCif As String: MsgCif As String
    Dim x As Long
    Dim y As Long
    Dim Index1 As Long
    Dim Index2 As Long
    Dim NMen As Long
    Dim i As Long
    Dim op1 As Single
    Dim aux As Long
    Dim op2 As Single
    Dim nroHEX As String: nroHEX = vbNullString
        Mensaje = codigo
        Llave = llavellegada
        For i = 0 To 255
            State(i) = i
        Next
        For i = 0 To 255
            op1 = Asc((Mid(Llave, Index1 + 1, 1))) 'no se que es short suplanto por asc
            Index2 = (op1 + State(i) + Index2) Mod 256
            aux = State(i)
            State(i) = State(Index2)
            State(Index2) = aux
            Index1 = (Index1 + 1) Mod Len(Llave)
        Next
        For i = 0 To Len(Mensaje) - 1
            x = (x + 1) Mod 256
            y = (State(x) + y) Mod 256
            aux = State(x)
            State(x) = State(y)
            State(y) = aux
            op1 = Asc((Mid(Llave, Index1 + 1, 1))) 'no se que es short suplanto por asc
            op2 = State((State(x) + State(y)) Mod 256)
            NMen = op1 ^ op2
            nroHEX = DecToHEX(NMen) ' Dec to HEX no incluida
            If Len(nroHEX) = 1 Then
                nroHEX = "0" & nroHEX
            End If
            MsgCif = MsgCif & nroHEX
        Next
        'MsgCif = MsgCif.Substring(MsgCif.Length - (MsgCif.Length)); no le veo logica
        allegedrc4 = MsgCif
End Function

GRACIAS POR LEER!!!
« última modificación: Diciembre 06, 2011, 08:31:46 am por 79137913 »
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*                                                          Resumenes Cs.Economicas

_katze_

  • Bytes
  • *
  • Mensajes: 49
  • Reputación: +2/-0
    • Ver Perfil
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #7 en: Diciembre 05, 2011, 11:21:10 pm »
el short es un tipo de dato numericio pequeño, pero creo que corresponde al integer de vb6, ya que el integer de c# es el long de vb6

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #8 en: Diciembre 06, 2011, 12:32:19 am »
Short/float = single, numero con coma de precision simple
Double se mantiene con el mismo nombre xD

79137913

  • Megabyte
  • ***
  • Mensajes: 185
  • Reputación: +21/-4
  • 4 Esquinas
    • Ver Perfil
    • Eco.Resumen Resumenes Cs. Economicas
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #9 en: Diciembre 06, 2011, 08:33:11 am »
HOLA!!!

XD Single es el ULTIMO tipo que uso es muy limitado e inutil a mi parecer, igual corregi, espero que lo que le hice le arregle las cosas.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*                                                          Resumenes Cs.Economicas

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #10 en: Diciembre 06, 2011, 09:15:18 am »
XD Single es el ULTIMO tipo que uso es muy limitado e inutil a mi parecer
Se ve que nunca programaste 3d por código no? x'D

para que usar double cuando podes usar single cuando no necesitas tanta precisión? (no siempre necesitaras números de 20 cifras o con 30 decimales :P)

79137913

  • Megabyte
  • ***
  • Mensajes: 185
  • Reputación: +21/-4
  • 4 Esquinas
    • Ver Perfil
    • Eco.Resumen Resumenes Cs. Economicas
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #11 en: Diciembre 06, 2011, 09:44:39 am »
HOLA!!!

XD!!!

No,solo he hecho  un par de figuras 3d por codigo pero nada del otro mundo.

No se te hace mas comodo usar un long y la coma flotante se la creas vos?
(igual yo uso double y pero eso de hacer comas flotantes caseras lo usaba en batch XD)

P.Ej:
single = 3,6
long = 36

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*                                                          Resumenes Cs.Economicas

Ozcarj

  • Bytes
  • *
  • Mensajes: 17
  • Reputación: +1/-1
    • Ver Perfil
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #12 en: Diciembre 06, 2011, 07:48:16 pm »
79137913 muchisimas gracias el codigo Base 64 con dos modificaciones corrio perfecto, estoy muy agradecido con tu persona con respecto a Alleged RC4, lo arregle pero no me dio los resultados que queria, estoy desconsertado

Bueno muchas gracias a todos por sus comentarios y los aportes una vez que termine la aplicaciòn de facturación con el protocolo de CODIGO DE CONTROL que se rige en Bolivia lo subire para compartirlo.

Saludos a todos y otra vez muchas gracias
La Paz - Bolivia
« última modificación: Diciembre 07, 2011, 01:20:33 pm por Ozcarj »

Ozcarj

  • Bytes
  • *
  • Mensajes: 17
  • Reputación: +1/-1
    • Ver Perfil
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #13 en: Diciembre 07, 2011, 01:02:44 pm »
Hola otra vez, les comento que acabo de hacer los cambios para que me genere la encriptaciòn Alleged RC4 de acuerdo al pseudocodigo pero cuando la pruebo no me sale los datos de la prueba me podrian ayudar por favor.

RESULTADO QUE DEBERIA TENER:
1.  allegedrc4(“d3Ir6”, “sesamo”)                                                      -> Resultado: CadenaCifrada = EB06AEF892
2.  allegedrc4 (“piWCp”, “Aa1-bb2-Cc3-Dd4”)                                    -> Resultado: CadenaCifrada = 37712E14A0
3. allegedrc4(“IUKYo”, “XBCPY-GKGX4-PGK44-8B632-X9P33”)           -> Resultado: CadenaCifrada = 8362FCB0F0

codigo del compañero 79137913 modificado que corre bien pero no me da los resultados de los ejemplos de arriba:
Código: (csharp) [Seleccionar]
Public Function allegedrc4(codigo As String, llavellegada As String) As String
    Dim Mensaje As String: Mensaje = vbNullString
    Dim Llave As String: Llave = vbNullString
    Dim MsgCif As String:
    Dim x As Long
    Dim y As Long
    Dim Index1 As Long
    Dim Index2 As Long
    Dim NMen As Long
    Dim I As Long
    Dim op1 As Integer
    Dim aux As Long
    Dim op2 As Integer
    Dim state(256) As String
    Dim nroHEX As String: nroHEX = vbNullString
        Mensaje = codigo
        Llave = llavellegada
       
        For I = 0 To 255
            state(I) = I
        Next
       
       
        For I = 0 To 255
            op1 = CStr(Asc(Mid(Llave, Index1 + 1, 1))) 'no se que es short suplanto por asc
            Index2 = (op1 + state(I) + Index2) Mod 256
            aux = state(I): state(I) = state(Index2): state(Index2) = aux:
            Index1 = (Index1 + 1) Mod Len(Llave)
        Next
       
        For I = 0 To Len(Mensaje) - 1
           
            x = (x + 1) Mod 256
           
            y = (state(x) + y) Mod 256
            'intercambia valor
            aux = state(x): state(x) = state(y): state(y) = aux
           
           
            xorIndex = (state(x) + state(y)) Mod 256
           
                       
            NMen = Asc(Mid(Mensaje,i + 1, 1)) Xor state(xorIndex)
           
            nroHEX = DecToHex(NMen) '
           
            If Len(nroHEX) = 1 Then
                nroHEX = "0" & nroHEX
            End If
         

            MsgCif = MsgCif & nroHEX
        Next
        'MsgCif = Mid(MsgCif, 1, Len(Mensaje) - 1)
       allegedrc4 = MsgCif
End Function

Public Function DecToHex(ByVal DecNum As Double) As String
    Dim remainder As Integer
    Dim HexStr As String
    HexStr = ""
    Do While DecNum <> 0
        remainder = DecNum Mod 16
        If remainder <= 9 Then
            HexStr = Chr(Asc(remainder)) & HexStr
        Else
            HexStr = Chr(Asc("A") + remainder - 10) & HexStr
        End If
        DecNum = DecNum \ 16
    Loop
    If HexStr = "" Then HexStr = "0"
    DecToHex = HexStr
End Function
« última modificación: Diciembre 08, 2011, 01:49:44 pm por Ozcarj »

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Algortimos Alleged RC4 y Base 64
« Respuesta #14 en: Diciembre 08, 2011, 10:48:30 pm »
Un poquito aburrido de la vida, me puse a pasarlo de pseudo código a vb6, y lo logre :)

Código: (vb) [Seleccionar]
Private Sub Form_Load()
    Dim s As String
    s = AllegedRC4("d3Ir6", "sesamo")
    Debug.Print s, s = "EB-06-AE-F8-92"
    s = AllegedRC4("piWCp", "Aa1-bb2-Cc3-Dd4")
    Debug.Print s, s = "37-71-2E-14-A0"
    s = AllegedRC4("IUKYo", "XBCPY-GKGX4-PGK44-8B632-X9P33")
    Debug.Print s, s = "83-62-FC-B0-F0"
    End
End Sub

Function AllegedRC4(text As String, key As String) As String
    Dim state(256) As Integer
    Dim x As Integer, y As Integer
    Dim Index1 As Integer, Index2 As Integer
    Dim NMen As Integer, I As Integer, k As Integer
    Dim mensajeCifrado As String
    k = Len(key)
    For I = 0 To 255
        state(I) = I
    Next
    For I = 0 To 255
        Index2 = (Asc(Mid$(key, Index1 + 1)) + state(I) + Index2) Mod 256
        Call iSwap(state(I), state(Index2))
        Index1 = (Index1 + 1) Mod k
    Next
    k = Len(text) - 1
    For I = 0 To k
        x = (x + 1) Mod 256
        y = (state(x) + y) Mod 256
        Call iSwap(state(x), state(y))
        NMen = Asc(Mid$(text, I + 1)) Xor state((state(x) + state(y)) Mod 256)
        mensajeCifrado = mensajeCifrado & "-" & Format$(Hex$(NMen), "00")
    Next
    AllegedRC4 = Mid$(mensajeCifrado, 2)
End Function

Private Sub iSwap(ByRef iVal1 As Integer, ByRef iVal2 As Integer)
    '   //  Autor: BlackZeroX
    '   //  Intercambia {iVal1} por {iVal2} y {iVal2} a {iVal1} sin variable temporal
    iVal1 = iVal1 Xor iVal2
    iVal2 = iVal2 Xor iVal1
    iVal1 = iVal1 Xor iVal2
End Sub

Salida:
Código: [Seleccionar]
EB-06-AE-F8-92              True
37-71-2E-14-A0              True
83-62-FC-B0-F0              True

Y una pregunta, para decodificarlo? El pdf dice que es simétrico, pero parece un tipo de hash :P
« última modificación: Diciembre 08, 2011, 10:51:34 pm por raul338 »