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:
Shared Function crypt(ByVal texto As String) As String
Dim conta, posicao, gerado, A
conta = Len(texto)
posicao = 1
gerado = ""
A = 3
Do While posicao <= conta
gerado = gerado & Format((Val(Asc(Mid(texto, posicao, 1)) + A)), “000”)
posicao = posicao + 1
If A = 8 Then
A = 3
GoTo pula
End If
If A = 2 Then
A = 8
GoTo pula
End If
If A = 5 Then
A = 2
GoTo pula
End If
If A = 7 Then
A = 5
GoTo pula
End If
If A = 6 Then
A = 7
GoTo pula
End If
If A = 3 Then
A = 6
GoTo pula
End If
pula:
Loop
crypt = gerado
End Function
e estou com problema principalmente nesta parte:
gerado = gerado & Format((Val(Asc(Mid(texto, posicao, 1)) + A)), “000”)
Se alguem puder me ajugar fico grato.
Obrigado!
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());
}
}
}
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!
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:
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());
}
}
}
Muito obrigado ViniGodoy, agora deu certo!
o cara usou goto pq não sabia q tinha else. deve ser! rsrs!
em asm agente faz isso.
[quote=GilsonNunes]o cara usou goto pq não sabia q tinha else. deve ser! rsrs!
em asm agente faz isso.[/quote]
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.
Vou mover esse código para o tópico do EVGD…