![]() |
Re: DEC und HMAC-SHA-256
Hi Codewalker,
ich hab die letzten Tage auch an diesem Thema gearbeitet ... bisweilen sehr erfolglos. Aber jetzt endlich der Durchbruch - und das Danke Deiner Quellen hier! :thumb: Mit ein paar kleinen Änderungen hat Deine (bzw. Eure) klasse Vorarbeit nun endlich funktioniert und die Authentifizierung läuft glatt durch. Die Sache mit dem php-Vergleich hat mir auch gut gefallen und war recht hilfreich. Hier mal mein Input:
Delphi-Quellcode:
(Base64Str nicht HexStr)
function GenerateHMACSignature(Text, key: ansistring): ansistring;
var ctx: THMAC_Context; phash: PHashDesc; mac: THashDigest; begin phash := FindHash_by_Name('SHA256'); if phash = nil then begin {Action for 'Hash function not found/registered.'} exit; end; hmac_init(ctx, phash, @key[1], length(key)); hmac_update(ctx, @Text[1], length(Text)); hmac_final(ctx, mac); // Result := HexStr(@mac, sizeof(mac)); Result := Base64Str(@mac, sizeof(TSHA256Digest)); end; Diese Einbindung als zusätzlichen TSoapHeader
Delphi-Quellcode:
brachte folgendes funktionierende (!) Ergebnis (AWSAccessKeyID hab ich hier rausgenommen):
// sAWSID = Secret Key
AmazonTimestamp := FormatDateTime('yyyy"-"mm"-"dd"T"hh":"nn":00Z"', emt_now); AmazonString := 'ItemSearch' + AmazonTimestamp; AmazonSignature := GenerateHMACSignature( AmazonString, sAWSID );
Delphi-Quellcode:
Und genau diese Signature kXCgf... bekomme ich auch über das (ebenfalls leicht korrigierte) php-Script
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Header> <AWSAccessKeyId xmlns="http://security.amazonaws.com/doc/2007-01-01/">...</AWSAccessKeyId> <Timestamp xmlns="http://security.amazonaws.com/doc/2007-01-01/">2010-05-04T08:00:00Z</Timestamp> <Signature xmlns="http://security.amazonaws.com/doc/2007-01-01/">kXCgfQHO3Mh1MXDul5o2HwLMYZHtnEBSY6uhnJt+XW4=</Signature> </SOAP-ENV:Header> <SOAP-ENV:Body><ItemSearch xmlns="http://webservices.amazon.com/AWSECommerceService/2009-11-01">...
Delphi-Quellcode:
Output (AWS_Key hab ich entfernt):
<?php
session_start(); $t = $_REQUEST["t"]; $k = $_REQUEST["k"]; if ((empty($t)) || (empty($k))) { die; } // Zum besseren Vergleich, Sek. auf 00 gesetzt $aktuelle = gmdate("Y-m-d\TH:i:\\0\\0\Z"); // $aktuelle = gmdate("Y-m-d\TH:i:s\Z"); $aktuellezeit = urlencode($aktuelle); // ! Zusammengesetzte HashDaten aus Aktion und Timestamp $key = $t.$aktuelle; $signature1 = hash_hmac("sha256", $key, $k, true); $signature2 = base64_encode($signature1); print "HashData: \t $key "; print "Timestamp: \t $aktuelle "; print "Timestamp (URLEnccode): \t $aktuellezeit "; print "Text: \t $t "; print "Key: \t $k "; print "Result: \t $signature1 "; print "Result_Base64: \t $signature2"; ?>
Delphi-Quellcode:
HashData: ItemSearch2010-05-04T08:00:00Z
Timestamp: 2010-05-04T08:00:00Z Timestamp (URLEnccode): 2010-05-04T08%3A00%3A00Z Text: ItemSearch Key: Result: p }ÎÜÈu1pî6Ìaí@Rc«¡~]n Result_Base64: kXCgfQHO3Mh1MXDul5o2HwLMYZHtnEBSY6uhnJt+XW4= Gruss nru Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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