none
Cambiar mi función Encripta hecha en VB y pasarlo a C# RRS feed

  • Pregunta

  • Saludos amigos del foro, les traigo un inconveniente, en este caso estoy tratando de cambiar mi función Encripta hecha en VB y al pasarlo a C# tengo problemas con "Len, UCase, Asc y Mid" me podran ayudar porfavor.

            public string Encripta(string lcEncrypt, string lcstring, string lcClave)
            {
                int lnlen, lnlencript, maxca, c;
                string lcnewstring, retval, lcchar;

                lnlencript = len(lcEncrypt.Trim);
                if (UCase(lcEncrypt) != "ONN" && UCase(lcEncrypt) != "OFF" && lnlencript > 3) ;
                {
                    MessageBox.Show("Metodo de Encriptación Invalida", "Encripta", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    return "";
                }

                retval = "";
                maxca = 100;
                c = 1;
                if (lcEncrypt == "ONN")
                {
                    lnlen = Len(lcstring.Trim);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = ((Asc(Mid(lcstring, j, 1)) + Asc(Mid(lcClave, c, 1))) % 256).ToString;
                        lcnewstring = (lcnewstring + Convert.ToChar(Convert.ToInt32(lcchar)));
                        c = (c + 1);
                        if (c >= Len(lcClave))
                        {
                            c = 1;
                        }
                    }

                    retval = lcnewstring;
                }

                if (lcEncrypt == "OFF")
                {
                    lnlen = Len(lcstring.Trim);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = (((256 + Asc(Mid(lcstring, j, 1))) - Asc(Mid(lcClave, c, 1))) % 256).ToString;
                        c = (c + 1);
                        if (c >= Len(lcClave))
                        {
                            c = 1;
                        }
                        lcnewstring = (lcnewstring + Convert.ToChar(Convert.ToInt32(lcchar)));
                    }

                    retval = lcnewstring;
                }

                return retval;
            }

    lunes, 11 de diciembre de 2017 23:10

Respuestas

  • Buenas

    Para acceder a los metodos de string que te ha comentado Sergio, tienes que tener 

    using System;

    Los cambios que te propone, son por ejemplo

    if (c >= Len(lcClave))
    //Por
    if (c >= lcClave.Lenght)                
                      

    Comentanos si tienes dudas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    martes, 12 de diciembre de 2017 11:07
  • Eso es. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta Rudolf Heiner martes, 12 de diciembre de 2017 20:10
    martes, 12 de diciembre de 2017 12:04
  • Buenas,

    Con el cambio que has hecho, no has corregido el error, sigues sin respetar el tipado de los datos

    Prueba asi:

    public static string Encripta(string lcEncrypt, string lcstring, string lcClave)
            {
                int lnlen, lnlencript, c;
                string lcnewstring, retval;
                string lcchar;
    
                lcEncrypt = lcEncrypt.ToUpper();
                lcstring = lcstring.Trim();
    
                lnlencript = (lcEncrypt.Length);
                if (lcEncrypt != "ONN" && lcEncrypt != "OFF" && lnlencript > 3)
                {
                    MessageBox.Show("Metodo de Encriptación Invalida", "Encripta", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    return "";
                }
    
                retval = "";
                c = 1;
                if (lcEncrypt == "ONN")
                {
                    lnlen = (lcstring.Length);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = (((int)Convert.ToChar(lcstring.Substring(j, 1)) + (int)Convert.ToChar(lcClave.Substring(c, 1))) % 256).ToString();
    
                        lcnewstring = (lcnewstring + lcchar);
                        c = (c + 1);
                        if (c >= lcClave.Length)
                        {
                            c = 1;
                        }
                    }
    
                    retval = lcnewstring;
                }
    
                if (lcEncrypt == "OFF")
                {
                    lnlen = (lcstring.Length);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = (((256 + (int)Convert.ToChar(lcstring.Substring(j, 1)) - (int)Convert.ToChar(lcClave.Substring(c, 1)))) % 256).ToString();
                        if (c >= lcClave.Length)
                        {
                            c = 1;
                        }
                        lcnewstring = (lcnewstring + lcchar);
                    }
    
                    retval = lcnewstring;
                }
    
                return retval;
            }

    Nos comentas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta Rudolf Heiner martes, 12 de diciembre de 2017 23:42
    martes, 12 de diciembre de 2017 21:33
  • Ya esta funcionando al 100 por ciento la Función, se los dejo para que si alguien lo necesita lo utilice:

            public static string Encripta(string lcEncrypt, string lcstring, string lcClave)
            {
                int lnlen, lnlencript, c;
                string lcnewstring, retval, lcchar;
            
                lcEncrypt = lcEncrypt.ToUpper();

                lnlencript = (lcEncrypt.Length);
                if (lcEncrypt != "ONN" && lcEncrypt != "OFF" && lnlencript > 3)
                {
                    MessageBox.Show("Metodo de Encriptación Invalida", "Encripta", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    return "";
                }

                retval = "";
                c = 0;
                if (lcEncrypt == "ONN")
                {
                    lnlen = lcstring.Length - 1;
                    lcnewstring = "";
                    for (int j = 0; j <= lnlen; j++)
                    {
                        lcchar = Convert.ToChar(((int)Convert.ToChar(lcstring.Substring(j, 1)) + (int)Convert.ToChar(lcClave.Substring(c, 1))) % 256).ToString();
                        
                        lcnewstring = lcnewstring + lcchar;

                        c++;
                        if (c >= lcClave.Length)
                        {
                            c = 0;
                        }

                    }

                    retval = lcnewstring;
                }

                c = 0;
                if (lcEncrypt == "OFF")
                {
                    lnlen = lcstring.Length - 1;
                    lcnewstring = "";
                    for (int j = 0; j <= lnlen; j++)
                    {
                        lcchar = Convert.ToChar((256 + (int)Convert.ToChar(lcstring.Substring(j, 1)) - (int)Convert.ToChar(lcClave.Substring(c, 1))) % 256).ToString();

                        c++;
                        if (c >= lcClave.Length)
                        {
                            c = 0;
                        }
                        lcnewstring = lcnewstring + lcchar;
                    }

                    retval = lcnewstring;
                }

                return retval;
            }

    • Marcado como respuesta Rudolf Heiner miércoles, 13 de diciembre de 2017 2:05
    miércoles, 13 de diciembre de 2017 2:05

Todas las respuestas

  • Hola. Lo primero es comentarte que esas funciones que indicas son de VB.

    Len()  se puede traducir como Propiedad String.Length

    UCase() se puede traducir como Método String.ToUpper

    Mid() se puede traducir como Método String.Substring

    Asc() es una conversión de un char a un int

    char c = 's';
    int asc = (int)c;


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Propuesto como respuesta Jorge TurradoMVP martes, 12 de diciembre de 2017 8:01
    martes, 12 de diciembre de 2017 1:56
  • También puedes tener esas funciones disponibles si importas el espacio de nombres

    Microsoft.VisualBasic (en Microsoft.VisualBasic.dll

    Y usas la clase Strings


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Propuesto como respuesta Jorge TurradoMVP martes, 12 de diciembre de 2017 8:01
    martes, 12 de diciembre de 2017 2:00
  • Saludos y gracias por responder Sergio, una pregunta como se llama el espaciado ?,

    quedo de ti y saludos.

    martes, 12 de diciembre de 2017 9:45
  • No entendí tu último comentario....

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 12 de diciembre de 2017 10:39
  • Saludos Sergio, la pregunta es como se llama el using .... que debo utilizar para tener acceso a las propiedades de Strings.

    quedo de ti y saludos.

    martes, 12 de diciembre de 2017 11:00
  • Buenas

    Para acceder a los metodos de string que te ha comentado Sergio, tienes que tener 

    using System;

    Los cambios que te propone, son por ejemplo

    if (c >= Len(lcClave))
    //Por
    if (c >= lcClave.Lenght)                
                      

    Comentanos si tienes dudas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    martes, 12 de diciembre de 2017 11:07
  • Eso es. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta Rudolf Heiner martes, 12 de diciembre de 2017 20:10
    martes, 12 de diciembre de 2017 12:04
  • Gracias Jorge y Sergio por responder, hasta el momento he logrado cambiar como debe de ser en C# pero me falta el Asc, les muestro la funcion y lo que esta con negrilla como lo puedo hacer, quedo de ustedes,

    saludos.

            //Funcion que encripta un valor
            public string Encripta(string lcEncrypt, string lcstring, string lcClave)
            {
                int lnlen, lnlencript, maxca, c;
                string lcnewstring, retval, lcchar;

                lcEncrypt = lcEncrypt.ToUpper();
                lcstring = lcstring.Trim();

                lnlencript = (lcEncrypt.Length);
                if (lcEncrypt != "ONN" && lcEncrypt != "OFF" && lnlencript > 3)
                {
                    MessageBox.Show("Metodo de Encriptación Invalida", "Encripta", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    return "";
                }

                retval = "";
                maxca = 100;
                c = 1;
                if (lcEncrypt == "ONN")
                {
                    lnlen = (lcstring.Length);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = ((Asc(lcstring.Substring(j,1)) + Asc(lcClave.Substring(c,1))) % 256).ToString;
                        lcnewstring = (lcnewstring + Convert.ToChar(Convert.ToInt32(lcchar)));
                        c = (c + 1);
                        if (c >= lcClave.Length)
                        {
                            c = 1;
                        }
                    }

                    retval = lcnewstring;
                }

                if (lcEncrypt == "OFF")
                {
                    lnlen = (lcstring.Length);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = (((256 + Asc(lcstring.Substring(j,1)) - Asc(lcClave.Substring(c,1)))) % 256).ToString;
                        if (c >= lcClave.Length)
                        {
                            c = 1;
                        }
                        lcnewstring = (lcnewstring + Convert.ToChar(Convert.ToInt32(lcchar)));
                    }

                    retval = lcnewstring;
                }

                return retval;
            }

    martes, 12 de diciembre de 2017 17:15
  • Hola Rudolf Heiner

    Para que las soluciones brindadas por los colaboradores del foro puedan ser útiles para el resto del la comunidad, favor de marcarlas.

    Quedamos al pendiente de cualquier actualización de tu parte.

    Saludos Cordiales.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    martes, 12 de diciembre de 2017 18:50
    Moderador
  • Hola. En una respuesta mía anterior te comenté cómo hacer Asc() desde C#.

    En tu caso sería 

    (int)Convert.ToChar(lcstring.Substring(j,1)) 
    Conviertes a char el carácter y a su vez lo conviertes a int


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 12 de diciembre de 2017 20:28
  • 
    martes, 12 de diciembre de 2017 20:44
  • Claro,

    te da fallo porque estas definiendo lcchar como string, y luego quieres meter un int, en c# el tipado es más fuerte que en VB, y hay que tenerlo en cuenta

    string lcnewstring, retval, lcchar;

    Si lo que quieres es que se almacene como string, tienes que poner ToString() al final.

    Si lo que quieres es que sea un int, tienes que definir lo como int.

    Viendo un poco tu codigo, creo que lo que quieres es almacenar el numero como string para después concatenarlo, asi que prueba añadiendo .ToString() detras del ultimo parentesis de cada linea con fallo.

    Nos comentas el resultado


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    martes, 12 de diciembre de 2017 20:49
  •         public static string Encripta(string lcEncrypt, string lcstring, string lcClave)
            {
                int lnlen, lnlencript, c;
                string lcnewstring, retval;
                char lcchar;

                lcEncrypt = lcEncrypt.ToUpper();
                lcstring = lcstring.Trim();

                lnlencript = (lcEncrypt.Length);
                if (lcEncrypt != "ONN" && lcEncrypt != "OFF" && lnlencript > 3)
                {
                    MessageBox.Show("Metodo de Encriptación Invalida", "Encripta", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    return "";
                }

                retval = "";
                c = 1;
                if (lcEncrypt == "ONN")
                {
                    lnlen = (lcstring.Length);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = (((int)Convert.ToChar(lcstring.Substring(j, 1)) + (int)Convert.ToChar(lcClave.Substring(c, 1))) % 256);

                        lcnewstring = (lcnewstring + lcchar);
                        c = (c + 1);
                        if (c >= lcClave.Length)
                        {
                            c = 1;
                        }
                    }

                    retval = lcnewstring;
                }

                if (lcEncrypt == "OFF")
                {
                    lnlen = (lcstring.Length);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = (((256 + (int)Convert.ToChar(lcstring.Substring(j, 1)) - (int)Convert.ToChar(lcClave.Substring(c, 1)))) % 256);
                        if (c >= lcClave.Length)
                        {
                            c = 1;
                        }
                        lcnewstring = (lcnewstring + lcchar);
                    }

                    retval = lcnewstring;
                }

                return retval;
            }

                        
    martes, 12 de diciembre de 2017 21:28
  • Buenas,

    Con el cambio que has hecho, no has corregido el error, sigues sin respetar el tipado de los datos

    Prueba asi:

    public static string Encripta(string lcEncrypt, string lcstring, string lcClave)
            {
                int lnlen, lnlencript, c;
                string lcnewstring, retval;
                string lcchar;
    
                lcEncrypt = lcEncrypt.ToUpper();
                lcstring = lcstring.Trim();
    
                lnlencript = (lcEncrypt.Length);
                if (lcEncrypt != "ONN" && lcEncrypt != "OFF" && lnlencript > 3)
                {
                    MessageBox.Show("Metodo de Encriptación Invalida", "Encripta", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    return "";
                }
    
                retval = "";
                c = 1;
                if (lcEncrypt == "ONN")
                {
                    lnlen = (lcstring.Length);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = (((int)Convert.ToChar(lcstring.Substring(j, 1)) + (int)Convert.ToChar(lcClave.Substring(c, 1))) % 256).ToString();
    
                        lcnewstring = (lcnewstring + lcchar);
                        c = (c + 1);
                        if (c >= lcClave.Length)
                        {
                            c = 1;
                        }
                    }
    
                    retval = lcnewstring;
                }
    
                if (lcEncrypt == "OFF")
                {
                    lnlen = (lcstring.Length);
                    lcnewstring = "";
                    for (int j = 1; j == lnlen; j++)
                    {
                        lcchar = (((256 + (int)Convert.ToChar(lcstring.Substring(j, 1)) - (int)Convert.ToChar(lcClave.Substring(c, 1)))) % 256).ToString();
                        if (c >= lcClave.Length)
                        {
                            c = 1;
                        }
                        lcnewstring = (lcnewstring + lcchar);
                    }
    
                    retval = lcnewstring;
                }
    
                return retval;
            }

    Nos comentas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta Rudolf Heiner martes, 12 de diciembre de 2017 23:42
    martes, 12 de diciembre de 2017 21:33
  • Ya esta funcionando al 100 por ciento la Función, se los dejo para que si alguien lo necesita lo utilice:

            public static string Encripta(string lcEncrypt, string lcstring, string lcClave)
            {
                int lnlen, lnlencript, c;
                string lcnewstring, retval, lcchar;
            
                lcEncrypt = lcEncrypt.ToUpper();

                lnlencript = (lcEncrypt.Length);
                if (lcEncrypt != "ONN" && lcEncrypt != "OFF" && lnlencript > 3)
                {
                    MessageBox.Show("Metodo de Encriptación Invalida", "Encripta", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    return "";
                }

                retval = "";
                c = 0;
                if (lcEncrypt == "ONN")
                {
                    lnlen = lcstring.Length - 1;
                    lcnewstring = "";
                    for (int j = 0; j <= lnlen; j++)
                    {
                        lcchar = Convert.ToChar(((int)Convert.ToChar(lcstring.Substring(j, 1)) + (int)Convert.ToChar(lcClave.Substring(c, 1))) % 256).ToString();
                        
                        lcnewstring = lcnewstring + lcchar;

                        c++;
                        if (c >= lcClave.Length)
                        {
                            c = 0;
                        }

                    }

                    retval = lcnewstring;
                }

                c = 0;
                if (lcEncrypt == "OFF")
                {
                    lnlen = lcstring.Length - 1;
                    lcnewstring = "";
                    for (int j = 0; j <= lnlen; j++)
                    {
                        lcchar = Convert.ToChar((256 + (int)Convert.ToChar(lcstring.Substring(j, 1)) - (int)Convert.ToChar(lcClave.Substring(c, 1))) % 256).ToString();

                        c++;
                        if (c >= lcClave.Length)
                        {
                            c = 0;
                        }
                        lcnewstring = lcnewstring + lcchar;
                    }

                    retval = lcnewstring;
                }

                return retval;
            }

    • Marcado como respuesta Rudolf Heiner miércoles, 13 de diciembre de 2017 2:05
    miércoles, 13 de diciembre de 2017 2:05