Olá galera, estou precisando converter um codigo vb para o c# mais estou tendo muitos problemas, já tentei converter pelos sites mais o mesmo não converte corretamente.
O codigo é este:
Essa é uma das funções mais mal escritas que já vi em VB.
Peca em praticamente todas as boas práticas de código:
Uso de “GoTo”
Uso de while onde um for seria mais adequado
Nomes ruins de variáveis
Rebuscando um if
Ele parece que não queria criptografar só o texto, mas ofuscar o código que gera esse texto também. =P
Sem falar que usa uma criptografia extremamente simplória, se é que dá para chamar isso de criptografia.
Em todo caso, eis o código convertido:
namespace Exemplo
{
public static class Criptografia
{
public static string Encrypt(this string texto)
{
int[] chaves = { 3, 6, 7, 5, 2, 8 };
StringBuilder saida = new StringBuilder();
for (int i = 0; i < texto.Length; ++i)
saida.AppendFormat("{0:000}", texto[i] + chaves[i % chaves.Length]);
return saida.ToString();
}
}
class Program
{
static void Main(string[] args)
{
Console.Out.WriteLine("Criptografia: " + "Teste".Encrypt());
}
}
}
M
murilo_oliveira2
Olá ViniGodoy, eu testei o metodo que voce me passou mais o numero gerado não está batendo com o que está no banco de dados.
Eu não conheço vb e estou iniciando com c# então eu não consegui identificar qual é a diferença que está dando
o usuario admin esta cripitografado assim:068074084078080
e no metodo que voce passou está gerando assim :100106116110112
Obrigado!
ViniGodoy
Passe o texto para função usando apenas letras maiúsculas. Testei aqui e deu exatamente o mesmo resultado que você postou como sendo correto.
Se quiser incluir na própria função o maiúsculo, é só mudar incluir essa linha aqui por primeiro:
ViniGodoy
Ou então, você chamaria assim:
namespace Exemplo
{
public static class Criptografia
{
public static string Encrypt(this string texto)
{
int[] chaves = { 3, 6, 7, 5, 2, 8 };
StringBuilder saida = new StringBuilder();
for (int i = 0; i < texto.Length; ++i)
saida.AppendFormat("{0:000}", texto[i] + chaves[i % chaves.Length]);
return saida.ToString();
}
}
class Program
{
static void Main(string[] args)
{
Console.Out.WriteLine("Criptografia: " + "admin".ToUpper().Encrypt());
}
}
}
M
murilo_oliveira2
Muito obrigado ViniGodoy, agora deu certo!
G
GilsonNunes
o cara usou goto pq não sabia q tinha else. deve ser! rsrs!
em asm agente faz isso.
ViniGodoy
GilsonNunes:
o cara usou goto pq não sabia q tinha else. deve ser! rsrs!
em asm agente faz isso.
Não sabia de else, de switch, nem de arrays, nem de for… vai ver só sabia de instruções do assembly mesmo. hehheh
Aliás, até se ele tivesse ordenado diferente esse if, teria deixado o código mais claro.