We are looking for a PHP version of the google HMAC encrypt method described in this link
[login to view URL]
Our supplier deliverd some keys to test the algorytm.
e_key = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
i_key = bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
data = qMgSYozqy_iTLthA_kqjsm_Y7PlGcHiO4UU9aw==
I wrote a piece of code, but i can't find the answer why it is not working. Probably the php base64 encoding algorithm in PHP is not supporting RFC 3548.
We’re looking for a work-around.
Hereby our code
//[login to view URL]
function hmacEncrypt($price, $iv, $e_key, $i_key) {
$pad = substr(hash_hmac('sha1', $iv, $e_key), 0, 8);
$enc_price = $pad ^ $price;
$signature = substr(hash_hmac('sha1', $price . $iv, $i_key), 0, 4);
$final_message = base64_encode($iv . $enc_price . $signature);
return $final_message;
}
function hmacDecrypt($final_message, $e_key, $i_key) {
//$enc_price = base64_decode($final_message);
$enc_price = base64_decode($final_message, 16);
$iv = substr($enc_price, 0, 16);
$signature = substr($enc_price, strlen($enc_price) - 4, 4);
$p = substr($enc_price, 16, 8);
$price_pad = substr(hash_hmac('sha1', $iv, $e_key), 0, 8);
$price = $p ^ $price_pad;
$conf_sig = substr(hash_hmac('sha1', $price . $iv, $i_key), 0, 4);
return $price;
if ($conf_sig === $signature) {
return floatval($price);
}
}
echo hmacDecrypt('qMgSYozqy_iTLthA_kqjsm_Y7PlGcHiO4UU9aw==', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');