Gibt es eine Möglichkeit, eine HmacSHA256-Signatur einer Zeichenfolge in PHP zu erstellen?
Wie kann ich eine HmacSHA256-Signatur einer Zeichenfolge generieren
Tarnfeld
-
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
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
- Holen Sie sich Ihren geheimen Schlüssel
- Wählen Sie einen Verschlüsselungsmodus oder eine Methode, z. B. sha1, sha256 usw
- 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);
Kalemullah
Das ist der Weg. Wie man hash_hmac in Laravel generiert. Es wird 100% funktionieren.
$sig = hash_hmac('sha256', $request->getContent(), 'secret value' );