如何加密帖子参数

时间:2018-01-09 19:25:46

标签: api post encryption

我试图获得网站的api响应。 这个网站说encrypted POST parameters with HMAC-SHA512 alghoritm using your secret API key,但我没有丝毫的线索如何做到这一点。我尝试的每种方法都会产生相同的错误:"缺少密钥或签名。

<?php
error_reporting(E_ALL);

$key = 'API_KEY';
$secret = 'SECRET_KEY';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://bitgrail.com/api/v1/balances");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $key);

$ch = hash_hmac('sha512',$ch,$secret);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

print_r($output);

1 个答案:

答案 0 :(得分:0)

来自api docs:

  

所有私人呼叫必须由HTTP POST呼叫组成,包含以下2个标头:
  KEY - 公共API密钥
  SIGNATURE - 使用您的秘密API密钥使用HMAC-SHA512 alghoritm加密的POST参数
  私人呼叫需要额外的POST参数,即nonce
  nonce - 整数,总是大于先前调用的nonce。

所以你必须创建两个标题,KEY(你的密钥)和SIGNATURE(发布数据的HMAC哈希,你的秘密作为密钥)。

  

天平
  要获得BitGrail上存在的所有硬币的余额,除了认证之外,您不需要参数。

我认为这意味着您不必提交任何发布数据,但现有数据除外。

代码:

$key = 'API_KEY';
$secret = 'SECRET_KEY';
$url = "https://bitgrail.com/api/v1/balances";
$data = http_build_query(array("nonce" => time()));
$sig = hash_hmac('sha512', $data, $secret);
$headers = array("KEY: $key", "SIGNATURE: $sig");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$output = curl_exec($ch);
curl_close($ch);
echo $output;