Hoi,
Om gebruik te maken van de API van AWS moet bij iedere request een authenticatie-string worden meegestuurd. En het lukt me maar niet om die juist te berekenen. Gelukking geeft Amazon in de manual een duidelijk voorbeeld, dus ik heb even al mn code teruggebracht tot het simpele voorbeeld (bron)
Simpel gezegd: Als je de string utf8-encode en vervolgens HMAC-SHA1-hasht met de secret access key als sleutel en dit geheel base64-encode dan zou de signature uit het voorbeeld hierboven moeten verschijnen. Klinkt simpel toch???
Mijn code:
Geeft een compleet andere string. Op php.net staat in de comments for some reason een eigen-gebrouwde hmac-sha1 functie. Goed, ik ben geen encryptie-deskundige dus die ook maar even getest:
Geeft een weer een andere code (ook een andere dan in poging 1). Iemand enig idee hoe ik dit goed kan implementeren?
Om gebruik te maken van de API van AWS moet bij iedere request een authenticatie-string worden meegestuurd. En het lukt me maar niet om die juist te berekenen. Gelukking geeft Amazon in de manual een duidelijk voorbeeld, dus ik heb even al mn code teruggebracht tot het simpele voorbeeld (bron)
code:
1
2
3
| String: Thu, 14 Aug 2008 17:08:48 GMT Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY Base64 encoded signature: 4cP3hCesdCQJ1jP11111YSu0g=EXAMPLE |
Simpel gezegd: Als je de string utf8-encode en vervolgens HMAC-SHA1-hasht met de secret access key als sleutel en dit geheel base64-encode dan zou de signature uit het voorbeeld hierboven moeten verschijnen. Klinkt simpel toch???
Mijn code:
PHP:
1
| echo base64_encode(hash_hmac("sha1", utf8_encode("Thu, 14 Aug 2008 17:08:48 GMT"), "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY", true)); |
Geeft een compleet andere string. Op php.net staat in de comments for some reason een eigen-gebrouwde hmac-sha1 functie. Goed, ik ben geen encryptie-deskundige dus die ook maar even getest:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| echo base64_encode(hmac_sha1(utf8_encode("Thu, 14 Aug 2008 17:08:48 GMT"), "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY", true)); function hmac_sha1($data, $key){ #adjust key to exactly 64 bytes if (strlen($key) > 64) { $key = str_pad(sha1($key, true), 64, chr(0)); } if (strlen($key) < 64) { $key = str_pad($key, 64, chr(0)); } #outer and inner pad $opad = str_repeat(chr(0x5C), 64); $hostnamead = str_repeat(chr(0x36), 64); #xor key with opad & ipad for ($i = 0; $i < strlen($key); $i++) { $opad[$i] = $opad[$i] ^ $key[$i]; $hostnamead[$i] = $hostnamead[$i] ^ $key[$i]; } #return return sha1( $opad . sha1($hostnamead.$data, true)); } |
Geeft een weer een andere code (ook een andere dan in poging 1). Iemand enig idee hoe ik dit goed kan implementeren?