IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: PHP hmac Autentizační token

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
dejma
Člen
Avatar
dejma:9.2.2021 15:53

Ahoj,

Snažím se vytvořit Autentizační token, dle manuálu
https://dropa.docs.apiary.io/#…

Potřebuji to udělat v PHP, klient bude v PHP
Zkusil jsem

$digest0 = base64_encode(hash_hmac("sha1", "1+POST+/rest/api/v1/order/1122334455/delivery+2017-01-23T19:33:43.511", "s3Cr37!" ));

kde mi vyjde, že

digest0 = NWZlYTcyMGNkNGZkYjdlNDM2MGFkOGFjOWIyYTFlNzNkMzg0ZTIyOA==

ale v v příkladu (Example of digest calculation) píšou, že by mělo vyjít

// digest = X+pyDNT9t+Q2Ctismyoec9OE4ig=

Nedaří se mi v PHP napodobit to, co tam dělají v tom C#
ani nic podobného aby mi vyšlo to co mají v příkladu patrně C#

docela nepříjemný zásek do začátku :(, už se s tím mořím hodiny a patrně mi uniká něco fundamentálního, co nedokáži vidět.

Umíte mi poradit?

Děkuji

 
Odpovědět
9.2.2021 15:53
Avatar
dejma
Člen
Avatar
dejma:9.2.2021 16:00

jak to již bývá, když to sepíšu, vždy mě ještě něco napadne
jistě to tak taky máte :)

takže když jsem si postěžoval jak to nejde, našel jsem funkci, která vrací to co očekávám
má vyjít : digest = X+pyDNT9t+Q2Ctis­myoec9OE4ig=

echo "custom_hmac: ".base64_encode(custom_hmac("sha1", "1+POST+/rest/api/v1/order/1122334455/delivery+2017-01-23T19:33:43.511", "s3Cr37!", $raw_output = true));

a vyjde X+pyDNT9t+Q2Ctis­myoec9OE4ig=

třeba to někomu pomůže ;)

function custom_hmac($algo, $data, $key, $raw_output = false)
{
    $algo = strtolower($algo);
    $pack = 'H'.strlen($algo('test'));
    $size = 64;
    $opad = str_repeat(chr(0x5C), $size);
    $ipad = str_repeat(chr(0x36), $size);

    if (strlen($key) > $size) {
        $key = str_pad(pack($pack, $algo($key)), $size, chr(0x00));
    } else {
        $key = str_pad($key, $size, chr(0x00));
    }

    for ($i = 0; $i < strlen($key) - 1; $i++) {
        $opad[$i] = $opad[$i] ^ $key[$i];
        $ipad[$i] = $ipad[$i] ^ $key[$i];
    }

    $output = $algo($opad.pack($pack, $algo($ipad.$data)));

    return ($raw_output) ? pack($pack, $output) : $output;
}
Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
9.2.2021 16:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.