![]() |
PHP hmac+salt in Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
wir haben ein in PHP geschriebenes Projekt. Das Login erfolgt über Nutzername und Passwort. In meinem Delphi Projekt soll nun die gleiche Anmeldung erfolgen, weil beide Projekte mit der gleichen Tabelle arbeiten. Mir liegt dazu folgender PHP Quelltext vor: Damit wird der Hash erzeugt
Code:
Die Abfrage nach dem korrekten Passwort die ich auch durchführen muss.
public static function bcrypt_encode($password, $global_salt, $rounds='12')
{ if (@CRYPT_BLOWFISH != 1) {throw new Exception("CRYPT_BLOWFISH != 1");} # 22 byte unique random token within symbol-range $individual_salt = substr(str_shuffle('./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 22); return crypt(hash_hmac("whirlpool",$password,$global_salt,true),'$2a$'.$rounds.'$'.$individual_salt); }
Code:
Mein Problem ist dieser Teil crypt(hash_hmac("whirlpool",$password,$global_salt,true),substr($stored, 0, 30))
public static function bcrypt_check($password, $global_salt, $stored)
{ if (@CRYPT_BLOWFISH != 1) {throw new Exception("CRYPT_BLOWFISH != 1");} return crypt(hash_hmac("whirlpool",$password,$global_salt,true),substr($stored, 0, 30)) == $stored; } Ich muss an dieser Stelle zugeben, dass meine PHP Kenntnisse sehr dürftig sind. In einem Beitrag habe ich einen Verweis auf units von Wolfgang Ehrhardt gefunden. Ich habe mir den Ordner crc_hash_2010-12-19 heruntergeladen habe aber keinen Plan, wie ich das mit den darin enthaltenen units umsetzen kann. Bitte um Hilfe. |
AW: PHP hmac+salt in Delphi
Kennt sich damit keiner aus?
|
AW: PHP hmac+salt in Delphi
Was genau ist denn Dein Problem?
Mit dem CRC/Hash-Archiv wirst Du nur den HMAC_Whirlpool berechnen können. Da schwirrt doch noch ein Crypt/Blowfish mit 'rum! Wenn Du genaue Specs (am besten mit Testdaten) angeben kannst, wie die PHP-Funktionen arbeiten, kann ich Dir sagen, wie Du dies in Delphi nachbilden kannst. Besonders wichtig sind detailierte Angaben zur Crypt-Funktion: Padding, Betriebsmodus, was ist rounds etc. Ich denke mit Grausen an das sogenannte MD5-Crypt... |
AW: PHP hmac+salt in Delphi
Hallo gammatester,
also "if (@CRYPT_BLOWFISH != 1)" soll scheinbar nur ausgeführt werden, wenn noch kein Passwort vorhanden ist.(Denke ich in meinem jugendlichen Leichtsinn). In dem Teil
Code:
Ich denke, dass ich nur diesen Code nachvollziehen muss, da die Passworte im PHP Projekt auf Server 2008 erzeugt werden. (Das ist nicht meine Idee). Ich werde also zunächst einmal versuchen Testdaten zu bekommen und mich um die Function "Crypt" kümmern.
crypt(hash_hmac("whirlpool",$password,$global_salt,true),substr($stored, 0, 30)) == $stored;
Danke auf jeden Fall für Deine Wortmeldung. |
AW: PHP hmac+salt in Delphi
Hier ein Testprogramm mit dem Fallbeispiel von PHP-Net-Manula zu hash_hmac:
Delphi-Quellcode:
Die Ausgabe ist:
{-Test prog for HMACs, we 06.Feb.2012}
program t_hmac1; {$i STD.INC} {$ifdef APPCONS} {$apptype console} {$endif} uses hash,hmac,whirl512,rmd160,BTypes,mem_util; {---------------------------------------------------------------------------} procedure Test_RMD160; const DigLen = sizeof(TRMD160Digest); const fox : Bstring = 'The quick brown fox jumped over the lazy dog.'; key : BString = 'secret'; var ctx : THMAC_Context; mac : THashDigest; phash: PHashDesc; begin writeln('Test from http://php.net/manual/en/function.hash-hmac.php'); writeln('hash_hmac(''ripemd160'', ''The quick brown fox jumped over the lazy dog.'', ''secret'')'); phash := FindHash_by_Name('RIPEMD160'); if phash=nil then begin writeln('Hash function not found/registered.'); exit; end; hmac_init(ctx, phash, @key[1], length(key)); hmac_update(ctx, @fox[1], length(fox)); hmac_final(ctx, mac); writeln('Calc: ',HexStr(@mac, DigLen)); writeln(' Ref: ','b8e7ae12510bdfb1812e463a7f086122cf37e4f7'); end; {---------------------------------------------------------------------------} procedure Test_Whirlpool; const DigLen = sizeof(TWHirlDigest); const fox : Bstring = 'The quick brown fox jumped over the lazy dog.'; key : BString = 'secret'; var ctx : THMAC_Context; mac : THashDigest; phash: PHashDesc; begin writeln('Test from http://php.net/manual/en/function.hash-hmac.php'); phash := FindHash_by_Name('Whirlpool'); if phash=nil then begin writeln('Hash function not found/registered.'); exit; end; hmac_init(ctx, phash, @key[1], length(key)); hmac_update(ctx, @fox[1], length(fox)); hmac_final(ctx, mac); writeln('Calc: ',HexStr(@mac, DigLen)); end; begin Test_RMD160; writeln; Test_Whirlpool; end.
Code:
Test from http://php.net/manual/en/function.hash-hmac.php
hash_hmac('ripemd160', 'The quick brown fox jumped over the lazy dog.', 'secret') Calc: b8e7ae12510bdfb1812e463a7f086122cf37e4f7 Ref: b8e7ae12510bdfb1812e463a7f086122cf37e4f7 Test from http://php.net/manual/en/function.hash-hmac.php Calc: 8bcb967604ee2f25718b1e9a9f9a87f16d41b678fb1537a56a0456400c78d6dc1b6ffe6d7a17761396f55119d853647e5746e88e7b3a3629b497d4e5f953cf0b |
AW: PHP hmac+salt in Delphi
Wahnsinn!!!:cheer:
Das hilft mir weiter und ich kann die Verwendung der units daran nachvollziehen. Ich danke Dir für Deine Hilfe! |
Dieses Thema wurde am "26. Apr 2012, 18:36 Uhr" von "fkerber" aus dem Forum "Neuen Beitrag zur Code-Library hinzufügen" in das Forum "Algorithmen, Datenstrukturen und Klassendesign" verschoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz