Wie kann ich eine HmacSHA256-Signatur einer Zeichenfolge generieren

Lesezeit: 3 Minuten

Benutzeravatar von tarnfeld
Tarnfeld

Gibt es eine Möglichkeit, eine HmacSHA256-Signatur einer Zeichenfolge in PHP zu erstellen?

Verwenden hash_hmac:

$sig = hash_hmac('sha256', $string, $secret)

Wo $secret ist dein Schlüssel.

  • Was ist in $string?

    – Maha Dev

    6. Oktober 2015 um 7:38 Uhr

  • @MahaDev Wovon auch immer Sie die Signatur haben möchten.

    – Sebastian Paaske Torholm

    6. Oktober 2015 um 11:37 Uhr

  • @SebastianPaaskeTørholm wird hash_hmac immer eine eindeutige Zeichenfolge generieren …?

    – Muhammad Usama Mashkoor

    8. August 2017 um 12:16 Uhr

  • @usama Nein. Aufgrund der Natur einer Hash-Funktion wird es eine Kollision geben. (D. h. zwei Zeichenfolgen, die auf denselben Wert gehasht werden.) Ich schlage vor, dass Sie sich mit Hash-Kollisionen befassen. Das Thema ist zu lang, um es in einem Kommentar zu behandeln.

    – Sebastian Paaske Torholm

    8. August 2017 um 13:17 Uhr


  • Danke @SebastianPaaskeTørholm für die Antwort. Können Sie bitte allgemein erklären, wie wir es einzigartig machen können? Nochmals vielen Dank.

    – Muhammad Usama Mashkoor

    8. August 2017 um 13:40 Uhr

Benutzeravatar von Pascal MARTIN
Pascal Martin

Das hash_hmac() Funktion könnte helfen, hier:

Generieren Sie mithilfe der HMAC-Methode einen verschlüsselten Hashwert

Zum Beispiel der folgende Teil des Codes:

$hash = hash_hmac('sha256', 'hello, world!', 'mykey');
var_dump($hash);

Gibt die folgende Ausgabe:

string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)

Und um die Liste der Hash-Algorithmen zu erhalten, die verwendet werden können, siehe hash_algos().

Hier ist ein Beispiel für Datatrans-Transaktionssignierung (Schweizer E-Payment-Lösung) vor Anruf PSP mit HMAC-SHA-256.

Hoffe es konnte einigen Entwicklern helfen.

$hmacKey    = 30911337928580013;

$merchantId = 1100004624;
$amount     = $total * 100;
$currency   = 'EUR';
$refno      = $orderId;

// HMAC Hex to byte
$secret     = hex2bin("$hmacKey");

// Concat infos
$string     = $merchantId . $amount. $currency . $refno;

// generate SIGN
$sign       = bin2hex(hash_hmac('sha256', $string, $secret)); 

Hinweis: Die Händler-ID und der HMAC-Schlüssel stammen beide aus der Datatrans-Dokumentation, die hier verfügbar ist: https://admin.sandbox.datatrans.com/showcase/doc/Technical_Implementation_Guide.pdf

  • Beachten Sie, dass das bin2hex am Ende ein anderes Ergebnis liefert als das in der Datatrans-Backend-Benutzeroberfläche gezeigte Beispiel!

    – ZPiDER

    21. August 2018 um 12:45 Uhr

  • Hallo, ich möchte ein Datatrans-Zeichen in Javascript generieren. Aber ich bin nicht in der Lage, das zu erreichen. Hast du ein funktionierendes Beispiel dafür.

    – Ninja Schildkröte

    6. September 2020 um 7:59 Uhr

  • @VinitSingh nein tue ich nicht. Aber du kannst das lesen, vielleicht hilft es dir: jokecamp.com/blog/…

    – Melomann

    9. September 2020 um 5:41 Uhr

Ich kann aufgrund mangelnder Reputation nicht antworten, aber @Melomans Weg in Kombination mit der Antwort von ZPiDER führt dazu, nur zu verwenden

$hash       = hash_hmac('sha256', $string, $secret);

für eine korrekte Datatrans Signierung

OK, um Ihre Daten mit hash_hmach zu signieren, müssen Sie nur Folgendes tun

  1. Holen Sie sich Ihren geheimen Schlüssel
  2. Wählen Sie einen Verschlüsselungsmodus oder eine Methode, z. B. sha1, sha256 usw
  3. Erstellen Sie eine Variable, die Ihre verschlüsselten Daten enthält. Nennen Sie sie, wie Sie möchten. Daher sieht der Code so aus
$signData= hash_hmac("sha256",$dataToBeSigned,$yourSecretKey);

Benutzeravatar von Kalemullah
Kalemullah

Das ist der Weg. Wie man hash_hmac in Laravel generiert. Es wird 100% funktionieren.

$sig = hash_hmac('sha256', $request->getContent(), 'secret value' );

1434230cookie-checkWie kann ich eine HmacSHA256-Signatur einer Zeichenfolge generieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy