AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PHP hmac+salt in Delphi

Ein Thema von simmi · begonnen am 3. Feb 2012 · letzter Beitrag vom 26. Apr 2012
Antwort Antwort
Benutzerbild von simmi
simmi

Registriert seit: 24. Nov 2004
Ort: Röbel/Müritz
112 Beiträge
 
Delphi XE5 Professional
 
#1

PHP hmac+salt in Delphi

  Alt 3. Feb 2012, 09:33
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:
   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);
    }
Die Abfrage nach dem korrekten Passwort die ich auch durchführen muss.
Code:
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;
    }
Mein Problem ist dieser Teil crypt(hash_hmac("whirlpool",$password,$global_salt,true),substr($stored, 0, 30))

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.
Angehängte Dateien
Dateityp: zip crc_hash_2010-12-19.zip (238,5 KB, 9x aufgerufen)
Uwe

Geändert von simmi ( 6. Feb 2012 um 08:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von simmi
simmi

Registriert seit: 24. Nov 2004
Ort: Röbel/Müritz
112 Beiträge
 
Delphi XE5 Professional
 
#2

AW: PHP hmac+salt in Delphi

  Alt 6. Feb 2012, 08:22
Kennt sich damit keiner aus?
Uwe
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#3

AW: PHP hmac+salt in Delphi

  Alt 6. Feb 2012, 09:15
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...
  Mit Zitat antworten Zitat
Benutzerbild von simmi
simmi

Registriert seit: 24. Nov 2004
Ort: Röbel/Müritz
112 Beiträge
 
Delphi XE5 Professional
 
#4

AW: PHP hmac+salt in Delphi

  Alt 6. Feb 2012, 11:20
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:
crypt(hash_hmac("whirlpool",$password,$global_salt,true),substr($stored, 0, 30)) == $stored;
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.

Danke auf jeden Fall für Deine Wortmeldung.
Uwe
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

AW: PHP hmac+salt in Delphi

  Alt 6. Feb 2012, 14:01
Hier ein Testprogramm mit dem Fallbeispiel von PHP-Net-Manula zu hash_hmac:
Delphi-Quellcode:
{-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.
Die Ausgabe ist:
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
  Mit Zitat antworten Zitat
Benutzerbild von simmi
simmi

Registriert seit: 24. Nov 2004
Ort: Röbel/Müritz
112 Beiträge
 
Delphi XE5 Professional
 
#6

AW: PHP hmac+salt in Delphi

  Alt 6. Feb 2012, 14:10
Wahnsinn!!!

Das hilft mir weiter und ich kann die Verwendung der units daran nachvollziehen. Ich danke Dir für Deine Hilfe!
Uwe
  Mit Zitat antworten Zitat
26. Apr 2012, 18:36
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.
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz