string GetKey(string appid, string privateKey, string areaId, string date, string type)
{//使用SHA1的HMAC
HMAC hmac = HMACSHA1.Create();
var publicKey = "http://webapi.weather.com.cn/data/?areaid={0}&type={1}&date={2}&appid={3}";
var data = System.Text.Encoding.UTF8.GetBytes(string.Format(publicKey, areaId, type, date, appid));
//密钥
var key = System.Text.Encoding.UTF8.GetBytes(privateKey);
hmac.Key = key;
//对数据进行签名
var signedData = hmac.ComputeHash(data);
return Convert.ToBase64String(signedData);
}
SmartWeatherAPI_Lite_WebAPI C# 获取key加密
C++ 版本:
#include <openssl/hmac.h>
unsigned char *digest;
digest = HMAC(EVP_sha1(), key, strlen(key), (unsigned char*)weather_api, strlen(weather_api), NULL, NULL);
#include <openssl/bio.h>
#include <openssl/buffer.h>
char *base64(const unsigned char* input, int length)
{
BIO *bmem, *b64;
BUF_MEM *bptr;
b64 = BIO_new(BIO_f_base64());
bmem = BIO_new(BIO_s_mem());
b64 = BIO_push(b64, bmem);
BIO_write(b64, input, length);
BIO_flush(b64);
BIO_get_mem_ptr(b64, &bptr);
char *buff = (char *)malloc(bptr->length);
memcpy(buff, bptr->data, bptr->length-1);
buff[bptr->length-1] = 0;
BIO_free_all(b64);
return buff;
}
char *base64Digest = base64(digest, strlen((char *)digest));
#inlcude “curl/curl.h”
CURL * curl;
curl = curl_easy_init();
char *encode_key = curl_easy_escape(curl, base64Digest, 0);