SHA256 Verschlüsslung

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Preakz

Betreff: SHA256 Verschlüsslung

BeitragDo, Jan 10, 2013 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Liebe Community ich habe ein Problem & zwar kommt wenn ich mit Blitzmax ein SHA256 durchführe etwas anderes raus als wie bei der PHP variante.

Bei PHP wird Rnd Salt erzeugt und dieser dann so Code: [AUSKLAPPEN]
hash("sha256",$pass."".$salt);
verschlüsselt.

Danach wird der Salt und das verschlüsselte PW in die DB gespeichert.
(Bei meiner Homepage klappt alles Prima mit PHP und dem Vergleich...)

So aufjedenfall baue ich jetzt Code: [AUSKLAPPEN]
$salt = getSalt($name);
        $hashed_pass = hash("sha256",$pass."".$salt);

nach dabei hole ich mir den verwendeten SALT aus der DB und verschlüssle das Passwort wieder mit dem SALT um den vergleich zu machen, jedoch kommt ein anderes Ergebnis raus. Hier mal der Code:

Code: [AUSKLAPPEN]
' Connect
MySQL = TMySQL.Create("localhost", "root", "", "blablabla")
If Not MySQL Then
   Print("Error: Can't connect to 'datenbank'")
   End
EndIf

Resulta:Int = CheckLogin("Admin", "blablabl")

' Show all entries
'ShowAllEntries()

Print ""

Print " -- Ready --"
MySQL.Close()
If Resulta Then
   Print (" RICHTIG ! ")
Else
   Print("Falsch ! ")
End If
End

Function ShowAllEntries()
   Query = "SELECT user_name FROM `users`"
   Result = MySQL.Query(Query)
   If Not Result Then
      Print("Error: Query failed")
      Print(" "+MySQL.GetError())
      MySQL.Close()
      End
   EndIf
   
   Print(String(Result.Rows)+" Entrys:")
   For Row = EachIn Result
      Print("Name:   "+Row.GetString(0))
   Next
   Result.Free()
End Function

Function CheckLogin:Int(UserName:String, Passwort:String)
   Local User_Salt:String
   Local HashedPw:String
   Query = "SELECT `user_salt` FROM `users` WHERE `user_name` = '" + UserName + "' LIMIT 1"
   Result = MySQL.Query(Query)
   If Not Result Then
      Print("Error: Query failed bei Checklogin!")
      Print(" " + MySQL.GetError())
      MySQL.Close()
   End If
   For Row = EachIn Result
      User_Salt = Row.GetString(0)
      Print ("User_Salt = " + User_Salt)
   Next
   Passwort = Passwort + User_Salt
   Print("Passwort + Usersalt ohne veränderung: " + Passwort + "")
   HashedPw = SHA256(Passwort)
   Print("Mein PW: " + HashedPw)
   Result.Free()
   
   Query = "SELECT user_password FROM `users` WHERE `user_name` = '" + UserName + "' LIMIT 1"
   Result = MySQL.Query(Query)
   If Not Result Then
      Print("Error: Query failed bei Checklogin PW Vergleich")
      Print(" " + MySQL.GetError())
      MySQL.Close()
   End If
   For Row = EachIn Result
      Print ("ServePW: " + Row.GetString(0))
      If Row.GetString(0) = HashedPw Then
         Return 1
      Else
         Return 0
      End If
   Next
   Result.Free()
End Function





Function SHA256$(in$)
  Local h0:Long = $6A09E667, h1:Long = $BB67AE85, h2:Long = $3C6EF372, h3:Long = $A54FF53A
  Local h4:Long = $510E527F, h5:Long = $9B05688C, h6:Long = $1F83D9AB, h7:Long = $5BE0CD19
 
  Local k:Int[] = [$428A2F98, $71374491, $B5C0FBCF, $E9B5DBA5, $3956C25B, $59F111F1,..
                $923F82A4, $AB1C5ED5, $D807AA98, $12835B01, $243185BE, $550C7DC3,..
                $72BE5D74, $80DEB1FE, $9BDC06A7, $C19BF174, $E49B69C1, $EFBE4786,..
                $0FC19DC6, $240CA1CC, $2DE92C6F, $4A7484AA, $5CB0A9DC, $76F988DA,..
                $983E5152, $A831C66D, $B00327C8, $BF597FC7, $C6E00BF3, $D5A79147,..
                $06CA6351, $14292967, $27B70A85, $2E1B2138, $4D2C6DFC, $53380D13,..
                $650A7354, $766A0ABB, $81C2C92E, $92722C85, $A2BFE8A1, $A81A664B,..
                $C24B8B70, $C76C51A3, $D192E819, $D6990624, $F40E3585, $106AA070,..
                $19A4C116, $1E376C08, $2748774C, $34B0BCB5, $391C0CB3, $4ED8AA4A,..
                $5B9CCA4F, $682E6FF3, $748F82EE, $78A5636F, $84C87814, $8CC70208,..
                $90BEFFFA, $A4506CEB, $BEF9A3F7, $C67178F2]

  Local intCount:Long = (((in$.length + 8) Shr 6) + 1) Shl 4
  Local data:Long[intCount]
 
   Local a:Long = 0
   Local b:Long = 0
   Local c:Long = 0
   Local d:Long = 0
   Local e:Long = 0
   Local f:Long = 0
   Local i:Long = 0
   Local t:Long = 0
   Local g:Long = 0
   Local h:Long = 0
   Local t0:Long = 0
   Local t1:Long=0
   
  For c=0 Until in$.length
    data[c Shr 2] = (data[c Shr 2] Shl 8) | (in$[c] & $FF)
  Next
  data[in$.length Shr 2] = ((data[in$.length Shr 2] Shl 8) | $80) Shl ((3 - (in$.length & 3)) Shl 3)
  data[data.length - 2] = (Long(in$.length) * 8) Shr 32
  data[data.length - 1] = (Long(in$.length) * 8) & $FFFFFFFF
 
  For Local chunkStart:Long=0 Until intCount Step 16
   a = h0
   b = h1
   c = h2
   d = h3
   e = h4
   f = h5
   g = h6
   h = h7

    Local w:Long[] = data[chunkStart..chunkStart + 16]
    w = w[..64]
   
    For i=16 To 63
      w[i] = w[i - 16] + (Ror(w[i - 15], 7) ~ Ror(w[i - 15], 18) ~ (w[i - 15] Shr 3))..
            + w[i - 7] + (Ror(w[i - 2], 17) ~ Ror(w[i - 2], 19) ~ (w[i - 2] Shr 10))
    Next
   
    For i=0 To 63
      t0 = (Ror(a, 2) ~ Ror(a, 13) ~ Ror(a, 22)) + ((a & b) | (b & c) | (c & a))
      t1 = h + (Ror(e, 6) ~ Ror(e, 11) ~ Ror(e, 25)) + ((e & f) | (~e & g)) + k[i] + w[i]
     
      h = g ; g = f ; f = e ; e = d + t1
      d = c ; c = b ; b = a ;  a = t0 + t1 
    Next
   
    h0 :+ a ; h1 :+ b ; h2 :+ c ; h3 :+ d
    h4 :+ e ; h5 :+ f ; h6 :+ g ; h7 :+ h
  Next
 
  Return (Hex(h0) + Hex(h1) + Hex(h2) + Hex(h3) + Hex(h4) + Hex(h5) + Hex(h6) + Hex(h7)).ToLower()
End Function

Function Rol:Long(val:Long, shift:Long)
  Return (val Shl shift) | (val Shr (32 - shift))
End Function

Function Ror:Long( val:Long, shift:Long )
  Return (val Shr shift) | (val Shl (32 - shift))
End Function

Function LEHex:String( val:Long )
  Local out:String = Hex( val )
 
  Return out[6..8] + out[4..6] + out[2..4] + out[0..2]
End Function


Ergebnis: (PW ist natürlich nicht blablal)
Code: [AUSKLAPPEN]


Mein VerschlüsseltesPW:
8d9dd3b6607f10eb9be449f9a48cbc46dad772c6c43832a716d0af92ea4b3267

PWwie es verschlüsselt in der DB ist: da449d7c4c5caad004d55ced4efdd6545cc35c8c953586dcc392a2ae16c94ba9



 -- Ready --

Falsch !



So liegt das jetzt an der SHA256 Function oder mach ich irgendeinen Fehler ?

Xeres

Moderator

BeitragDo, Jan 10, 2013 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Das lässt sich eigentlich recht simpel eingrenzen; Ist ein Leerer String äquivalent zu
Code: [AUSKLAPPEN]
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

...dann ist die SHA256 korrekt und es muss an was anderem liegen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Hummelpups

BeitragDo, Jan 10, 2013 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein ist es nicht.

Genau das hätte ich ihn auch machen lassen.

Anstatt schwierige Strings hin und herzusenden erstmal mit einfachen
Strings gucken, ob die PHP und BMax SHA256 die gleiche Ausgabe zurück gibt.

Die BMax Version scheint nicht in Ordnung zu sein.

BMax SHA256 mit "": e3e013b125c79700477ac3fb78026930134570b5590e766331f5527e958e37fe

Grüße



Das is ne SHA256 FUnktion die auch funktioniert

Code: [AUSKLAPPEN]
Function SHA256$(in$)
  Local h0 = $6A09E667, h1 = $BB67AE85, h2 = $3C6EF372, h3 = $A54FF53A
  Local h4 = $510E527F, h5 = $9B05688C, h6 = $1F83D9AB, h7 = $5BE0CD19
 
  Local k[] = [$428A2F98, $71374491, $B5C0FBCF, $E9B5DBA5, $3956C25B, $59F111F1,..
                $923F82A4, $AB1C5ED5, $D807AA98, $12835B01, $243185BE, $550C7DC3,..
                $72BE5D74, $80DEB1FE, $9BDC06A7, $C19BF174, $E49B69C1, $EFBE4786,..
                $0FC19DC6, $240CA1CC, $2DE92C6F, $4A7484AA, $5CB0A9DC, $76F988DA,..
                $983E5152, $A831C66D, $B00327C8, $BF597FC7, $C6E00BF3, $D5A79147,..
                $06CA6351, $14292967, $27B70A85, $2E1B2138, $4D2C6DFC, $53380D13,..
                $650A7354, $766A0ABB, $81C2C92E, $92722C85, $A2BFE8A1, $A81A664B,..
                $C24B8B70, $C76C51A3, $D192E819, $D6990624, $F40E3585, $106AA070,..
                $19A4C116, $1E376C08, $2748774C, $34B0BCB5, $391C0CB3, $4ED8AA4A,..
                $5B9CCA4F, $682E6FF3, $748F82EE, $78A5636F, $84C87814, $8CC70208,..
                $90BEFFFA, $A4506CEB, $BEF9A3F7, $C67178F2]

  Local intCount = (((in$.length + 8) Shr 6) + 1) Shl 4
  Local data[intCount]
 
  For Local c=0 Until in$.length
    data[c Shr 2] = (data[c Shr 2] Shl 8) | (in$[c] & $FF)
  Next
  data[in$.length Shr 2] = ((data[in$.length Shr 2] Shl 8) | $80) Shl ((3 - (in$.length & 3)) Shl 3)
  data[data.length - 2] = (Long(in$.length) * 8) Shr 32
  data[data.length - 1] = (Long(in$.length) * 8) & $FFFFFFFF
 
  For Local chunkStart=0 Until intCount Step 16
    Local a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7

    Local w[] = data[chunkStart..chunkStart + 16]
    w = w[..64]
   
    For Local i=16 To 63
      w[i] = w[i - 16] + (Ror(w[i - 15], 7) ~ Ror(w[i - 15], 18) ~ (w[i - 15] Shr 3))..
            + w[i - 7] + (Ror(w[i - 2], 17) ~ Ror(w[i - 2], 19) ~ (w[i - 2] Shr 10))
    Next
   
    For Local i=0 To 63
      Local t0 = (Ror(a, 2) ~ Ror(a, 13) ~ Ror(a, 22)) + ((a & b) | (b & c) | (c & a))
      Local t1 = h + (Ror(e, 6) ~ Ror(e, 11) ~ Ror(e, 25)) + ((e & f) | (~e & g)) + k[i] + w[i]
     
      h = g ; g = f ; f = e ; e = d + t1
      d = c ; c = b ; b = a ;  a = t0 + t1 
    Next
   
    h0 :+ a ; h1 :+ b ; h2 :+ c ; h3 :+ d
    h4 :+ e ; h5 :+ f ; h6 :+ g ; h7 :+ h
  Next
 
  Return (Hex(h0) + Hex(h1) + Hex(h2) + Hex(h3) + Hex(h4) + Hex(h5) + Hex(h6) + Hex(h7)).ToLower() 
End Function

Function Rol(val, shift)
  Return (val Shl shift) | (val Shr (32 - shift))
End Function

Function Ror(val, shift)
  Return (val Shr shift) | (val Shl (32 - shift))
End Function

Function LEHex$(val)
  Local out$ = Hex(val)
 
  Return out$[6..8] + out$[4..6] + out$[2..4] + out$[0..2]
End Function


Ausgabe von "" ist e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

Preakz

BeitragDo, Jan 10, 2013 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja teste ich gleich... allerdings ist deine Methode nicht SuperStrict und ich weiß nicht welche datentypen ich geben soll... auch long ?

Also bei "" bei der Funktion die ich verwende kommt :

Code: [AUSKLAPPEN]
e3e013b125c79700477ac3fb78026930134570b5590e766331f5527e958e37fe


raus ... stimmt also nicht überein

die von Hummelpups stimmt:
Code: [AUSKLAPPEN]

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855


WHEY ES KLAPPT Shocked vielen DANK Smile

Jetzt muss ich nurnoch die Function i.w. in Superstrict bekommn Smile


Okay habs auch hinbekommn hier die SHA256 Function in SuperStrict:

Code: [AUSKLAPPEN]
Function SHA256$(in$)
  Local h0% = $6A09E667, h1% = $BB67AE85, h2:Int = $3C6EF372, h3% = $A54FF53A
  Local h4% = $510E527F, h5% = $9B05688C, h6:Int = $1F83D9AB, h7% = $5BE0CD19
 
  Local k%[] = [$428A2F98, $71374491, $B5C0FBCF, $E9B5DBA5, $3956C25B, $59F111F1,..
                $923F82A4, $AB1C5ED5, $D807AA98, $12835B01, $243185BE, $550C7DC3,..
                $72BE5D74, $80DEB1FE, $9BDC06A7, $C19BF174, $E49B69C1, $EFBE4786,..
                $0FC19DC6, $240CA1CC, $2DE92C6F, $4A7484AA, $5CB0A9DC, $76F988DA,..
                $983E5152, $A831C66D, $B00327C8, $BF597FC7, $C6E00BF3, $D5A79147,..
                $06CA6351, $14292967, $27B70A85, $2E1B2138, $4D2C6DFC, $53380D13,..
                $650A7354, $766A0ABB, $81C2C92E, $92722C85, $A2BFE8A1, $A81A664B,..
                $C24B8B70, $C76C51A3, $D192E819, $D6990624, $F40E3585, $106AA070,..
                $19A4C116, $1E376C08, $2748774C, $34B0BCB5, $391C0CB3, $4ED8AA4A,..
                $5B9CCA4F, $682E6FF3, $748F82EE, $78A5636F, $84C87814, $8CC70208,..
                $90BEFFFA, $A4506CEB, $BEF9A3F7, $C67178F2]

  Local intCount% = (((in$.length + 8) Shr 6) + 1) Shl 4
  Local data%[intCount]
 
  For Local c%=0 Until in$.length
    data[c Shr 2] = (data[c Shr 2] Shl 8) | (in$[c] & $FF)
  Next
  data[in$.length Shr 2] = ((data[in$.length Shr 2] Shl 8) | $80) Shl ((3 - (in$.length & 3)) Shl 3)
  data[data.length - 2] = (Long(in$.length) * 8) Shr 32
  data[data.length - 1] = (Long(in$.length) * 8) & $FFFFFFFF
 
  For Local chunkStart%=0 Until intCount Step 16
    Local a% = h0, b% = h1, c% = h2, d% = h3, e% = h4, f% = h5, g% = h6, h% = h7

    Local w%[] = data[chunkStart..chunkStart + 16]
    w = w[..64]
   
    For Local i%=16 To 63
      w[i] = w[i - 16] + (Ror(w[i - 15], 7) ~ Ror(w[i - 15], 18) ~ (w[i - 15] Shr 3))..
            + w[i - 7] + (Ror(w[i - 2], 17) ~ Ror(w[i - 2], 19) ~ (w[i - 2] Shr 10))
    Next
   
    For Local i%=0 To 63
      Local t0% = (Ror(a, 2) ~ Ror(a, 13) ~ Ror(a, 22)) + ((a & b) | (b & c) | (c & a))
      Local t1% = h + (Ror(e, 6) ~ Ror(e, 11) ~ Ror(e, 25)) + ((e & f) | (~e & g)) + k[i] + w[i]
     
      h = g ; g = f ; f = e ; e = d + t1
      d = c ; c = b ; b = a ;  a = t0 + t1
    Next
   
    h0 :+ a ; h1 :+ b ; h2 :+ c ; h3 :+ d
    h4 :+ e ; h5 :+ f ; h6 :+ g ; h7 :+ h
  Next
 
  Return (Hex(h0) + Hex(h1) + Hex(h2) + Hex(h3) + Hex(h4) + Hex(h5) + Hex(h6) + Hex(h7)).ToLower()
End Function

Function Rol:Int(val%, shift%)
  Return (val Shl shift) | (val Shr (32 - shift))
End Function

Function Ror:Int(val%, shift%)
  Return (val Shr shift) | (val Shl (32 - shift))
End Function

Function LEHex$(val%)
  Local out$ = Hex(val)
 
  Return out$[6..8] + out$[4..6] + out$[2..4] + out$[0..2]
End Function
 

Hangman

BeitragFr, Jan 11, 2013 6:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ab ins Codearchiv damit Exclamation Wink
Ich habe Berthold gebrochen.
 

PhillipK

BeitragFr, Jan 11, 2013 8:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Preakz: Erstmal gratz Smile

Und dann ne kleien anmerkung: Soweit ich mich erinner, ist blitzmax faul.
Wenn irgendwo was nicht definiert is, wirds int. Ergo: alles wo er meckert, einfach zum int machen Smile Bei der rückgabe dann schauen, was er zurückgibt - evoila, superstrict.

Ps: Ja ins codearchiv damit Smile

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group