Avatar billede bigbenoy Nybegynder
29. september 2004 - 23:22 Der er 6 kommentarer og
1 løsning

Nogen der kan konvertere C koden til VB.NET?

Følgende kode er skrevet i C, og stammer fra PASSWORD() fuktionen i MySQL.

Er der nogen der kan greje den i VB.NET?

- Giver 100 point, og en masse streetcredit!
Avatar billede bigbenoy Nybegynder
29. september 2004 - 23:23 #1
..følgende kode :D

void hash_password(unsigned long *result, const char *password)
{
  register unsigned long nr=1345345333L, add=7, nr2=0x12345671L;
  unsigned long tmp;
  for (; *password ; password++)
  {
    if (*password == ' ' || *password == '\t')
      continue;            /* skipp space in password */
    tmp= (unsigned long) (unsigned char) *password;
    nr^= (((nr & 63)+add)*tmp)+ (nr << 8);
    nr2+=(nr2 << 8) ^ nr;
    add+=tmp;
  }
  result[0]=nr & (((unsigned long) 1L << 31) -1L); /* Don't use sign bit (str2int) */;
  result[1]=nr2 & (((unsigned long) 1L << 31) -1L);
  return;
}
Avatar billede erikjacobsen Ekspert
29. september 2004 - 23:46 #2
VB.NET? Næh, men du kan få den i C# - hvis det ellers hjælper dig:

class Hash {

    static void Password(ref uint[] result, string password) {
      uint nr=1345345333;
      uint add=7;
      uint nr2=0x12345671;
      uint tmp;
      for (int i=0;i<password.Length;i++) {
        char c=password[i];
        if (c==' ' || c=='\t')
          continue;           
        tmp= (uint) (byte) c;
        nr ^= (((nr & 63)+add)*tmp)+ (nr << 8);
        nr2+=(nr2 << 8) ^ nr;
        add+=tmp;
      }
      result[0]=nr & 0x7FFFFFFF;
      result[1]=nr2 & 0x7FFFFFFF;
  }

  static void Main(string[] args)    {
      uint[] res=new uint[2];
      Password(ref res,"hejsa");
      Console.WriteLine(res[0]+" "+res[1]);
      Console.ReadLine();
  }
}
Avatar billede arne_v Ekspert
30. september 2004 - 00:59 #3
Prøv den her:

Imports System

Public Class MySQL
    Public Shared Sub HashPassword(ByVal result As Long(), ByVal password As String)
        Dim nr As Long = 1345345333
        Dim add As Long = 7
        Dim nr2 As Long = 305419889
        Dim pw() As Char = password.ToCharArray
        Dim i As Integer
        For i = 0 To password.Length-1
            If pw(i) <> " " And pw(i) <> Convert.ToChar(9) Then
                Dim tmp As Long = Convert.ToInt64(pw(i))
                nr = nr Xor ((((nr And 63) + add) * tmp) + (nr << 8))
                nr2 = nr2 + ((((nr2 And &HFFFFFFFF) << 8) Xor nr) And &HFFFFFFFF)
                add = add + tmp
            End If
        Next
        result(0) = nr And ((1L << 31) - 1)
        result(1) = nr2 And ((1L << 31) - 1)
    End Sub
End Class

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim hash(2) As Long
        MySQL.HashPassword(hash, "hemmeligt")
        Console.WriteLine(hash(0) & " " & hash(1))
    End Sub
End Class
Avatar billede arne_v Ekspert
30. september 2004 - 01:00 #4
Den er kun testet med det ene password. Men det giver samme resultat som C koden.
Avatar billede ha9953 Nybegynder
30. september 2004 - 10:40 #5
Prøv den her side - http://www.developerfusion.com/utilities/convertcsharptovb.aspx . En skide smart converter :-)
Avatar billede arne_v Ekspert
30. september 2004 - 20:11 #6
Prøv den selv !

Der er 15 fejl i konverteringen af Eriks kode.

Der er fundamental forskel på C# og VB.NET i den her kode.
Avatar billede bigbenoy Nybegynder
30. september 2004 - 20:19 #7
super arne, selvom erik nok også har fortjent en røvfuld point. Opgaven gik jo på VB.NET
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester