Announcement

Collapse
No announcement yet.

ASP.net zu VB.net

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ASP.net zu VB.net

    Hallo,

    Ich muss eine kleine Sache von ASP unter VB abbilden, irgendwie komme ich aber gerade nicht drauf.

    hier der Code:
    Code:
        int binary =
            ((hash[offset] & 0x7f) << 24)
            | ((hash[offset + 1] & 0xff) << 16)
            | ((hash[offset + 2] & 0xff) << 8)
            | (hash[offset + 3] & 0xff);
    
        int password = binary % (int)Math.Pow(10, digits);
    Irgendwie klappt es mit der Umsetzung nicht so wirklich.

    kann mir hier jemand einen Tipp geben?
    Gruß

  • #2
    Was nun? VB oder VB.NET? Oder evtl? VBS?

    Oder meinst du eher das du einen C#-Code in VB.NET haben willst?

    Comment


    • #3
      Von ASP.net zu VB.net

      Comment


      • #4
        ASP.net ist eine Technik die man mit VB.Net verwenden kann. Da gibt es nix zu übersetzen. Der Code denn du zeigst ist was C artiges also wahrscheinlich C#.

        Zeig was du in VB.Net daraus gemacht hast und wir sagen dir warum das nicht zum gezeigten C# passt.

        Comment


        • #5
          Ohh, sorry, das ist peinlich ...
          Man sagte mir das es sich um einen ASP Code handelt, da ich einen solchen noch nie gesehen habe nahm ich mal an das das richtig sei.

          Also ich Poste mal die gesamte Funktion:
          Code:
          public static string Generate(string secret, long iterationNumber, int digits = 6)
          {
              byte[] counter = BitConverter.GetBytes(iterationNumber);
          
              if (BitConverter.IsLittleEndian)
                  Array.Reverse(counter);
          
              byte[] key = Encoding.ASCII.GetBytes(secret);
          
              HMACSHA1 hmac = new HMACSHA1(key, true);
          
              byte[] hash = hmac.ComputeHash(counter);
          
              int offset = hash[hash.Length - 1] & 0xf;
          
              int binary =
                  ((hash[offset] & 0x7f) << 24)
                  | ((hash[offset + 1] & 0xff) << 16)
                  | ((hash[offset + 2] & 0xff) << 8)
                  | (hash[offset + 3] & 0xff);
          
              int password = binary % (int)Math.Pow(10, digits); 
          
              return password.ToString(new string('0', digits));
          }
          Meine Umsetzung:
          Code:
          Private Function Generate(ByVal sKey As String, ByVal lTick As Long, Optional ByVal iCount As Integer = 6) As String
                  Dim counter As Byte() = BitConverter.GetBytes(lTick)
          
                  If BitConverter.IsLittleEndian Then Array.Reverse(counter)
          
                  Dim bkey As Byte() = System.Text.Encoding.ASCII.GetBytes(sKey)
                  Dim hmac As HMACSHA1 = New HMACSHA1(bkey, True)
                  Dim hash As Byte() = hmac.ComputeHash(counter)
                  Dim offset As Integer = hash(hash.Length - 1) & CInt("&H" & "0f")
          
          
                  Dim binary As Integer = ((hash(offset) & CInt("&H" & "ff")) << 24) & ((hash(offset + Val(1)) & CInt("&H" & "ff")) << 16) & ((hash(offset + Val(2)) & CInt("&H" & "ff")) << 8) & (hash(offset + Val(3)) & CInt("&H" & "ff"))
          
                  Dim Pass As Integer = binary Mod (Math.Pow(10, iCount))
          
          
          
                  Return Pass.ToString(New String("0", iCount))
              End Function
          Bei Dim binary As Integer = ((... bekomme ich immer folgenden Fehler: Der Index war außerhalb des Arraybereichs.
          Zuletzt editiert von morpheus-dev; 16.11.2012, 19:26.

          Comment


          • #6
            & ist ein binäres UND in C#. | ist ein binäres ODER. Du hast aus beidem in VB.Net ein & gemacht was string concatenation bedeutet.
            Ersetze & durch AND. UND | durch OR.

            Die Konstanten würd ich auch nicht so kompliziert schreiben. Anstatt
            Code:
            CInt("&H" & "0f")
            schreib doch einfach &H0F.

            Comment


            • #7
              Du hast immer noch & im Code. Das ist ein AND. Und z.B &H7F ist ein gültige Zahl kein string. Da braucht es kein casting. Genauso Val() von einer Zahl. Mehr Zahl als eine eindeutige Zahl geht nicht das kann auch weg.

              [Highlight=VB.Net]Dim binary As Integer = ((hash(offset) And &H7F) << 24) Or ((hash(offset + 1) And &HFF) << 16) Or ((hash(offset + 2) And &HFF) << 8) Or (hash(offset + 3) And &HFF)[/Highlight]

              Edit: Hast du gerade den Beitrag gelöscht?

              Comment


              • #8
                Ja habe ich, dein Post wahr wohl Zeitgleich mit der Löschung, ich habe gleich nach dem Post die "&" Zeichen noch gesehen. Der Post stand nur 10 Sec da. Dachte nicht das jemand so schnell ist.

                So es rechnet nun, leider ist die Rechnung falsch.

                Hintergrund, in einer bestehenden Anwendung soll der eine Authentifizierung mittels dem "Google Authenticator" erfolgen.
                Der Ursprüngliche Code stammte wohl von hier LINK

                Comment


                • #9
                  Kommt zumindest das gleich raus wie in der C# Version.

                  [HIGHLIGHT=VB.Net] Private Function Generate(ByVal sKey As String, ByVal lTick As Long, Optional ByVal iCount As Integer = 6) As String
                  Dim counter As Byte() = BitConverter.GetBytes(lTick)
                  If BitConverter.IsLittleEndian Then Array.Reverse(counter)

                  Using hmac As HMACSHA1 = New HMACSHA1(System.Text.Encoding.ASCII.GetBytes(sKey) , True)
                  Dim hash As Byte() = hmac.ComputeHash(counter)
                  Dim offset As Integer = hash(hash.Length - 1) And &HF
                  Dim binary As Integer = ((hash(offset) And &H7F) << 24) Or ((hash(offset + 1) And &HFF) << 16) Or ((hash(offset + 2) And &HFF) << 8) Or (hash(offset + 3) And &HFF)
                  Dim Pass As Integer = binary Mod (Math.Pow(10, iCount))
                  Return Pass.ToString(New String("0", iCount))
                  End Using
                  End Function [/HIGHLIGHT]

                  Comment


                  • #10
                    Dann stimmt irgendwas mit der berechnung nicht, auf der Handyapp kommen ganz andere Zahlen

                    EDIT: Der Code rechnet wirklich falsch.
                    unter LINK kann man sich einen debuger downloaden, der rechnet richtig.
                    Ich schau mir den morgen mal an.
                    Zuletzt editiert von morpheus-dev; 16.11.2012, 22:49.

                    Comment

                    Working...
                    X