NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

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.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
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.