Converter codigo vb para c#

7 respostas
M

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!

7 Respostas

ViniGodoy

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 &lt; texto.Length; ++i) saida.AppendFormat(&quot;{0:000}&quot;, texto[i] + chaves[i % chaves.Length]); return saida.ToString(); } } class Program { static void Main(string[] args) { Console.Out.WriteLine(&quot;Criptografia: &quot; + &quot;Teste&quot;.Encrypt()); } } }

M

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 &lt; texto.Length; ++i) saida.AppendFormat(&quot;{0:000}&quot;, texto[i] + chaves[i % chaves.Length]); return saida.ToString(); } } class Program { static void Main(string[] args) { Console.Out.WriteLine(&quot;Criptografia: &quot; + &quot;admin&quot;.ToUpper().Encrypt()); } } }

M

Muito obrigado ViniGodoy, agora deu certo!

G

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.

Vou mover esse código para o tópico do EVGD:smiley:

Criado 27 de julho de 2012
Ultima resposta 28 de jul. de 2012
Respostas 7
Participantes 3