01 NET 加密版本

/**
* 生成签名数据
*
* @param sourceData 数据源
* @param secretKey 密匙
*
* returns 签名后数据
*/
private string HmacSha1(string sourceData, string secretKey)
{
    HMAC hmac = HMACSHA1.Create();
    hmac.Key = Encoding.UTF8.GetBytes(secretKey);
    var result = hmac.ComputeHash(Encoding.UTF8.GetBytes(sourceData));
    return Convert.ToBase64String(result).TrimEnd('=').Replace("+", "-").Replace("/", "_");
}

02 PHP 加密版本

/**
* 生成签名数据
*
* @param sourceData 待加密的数据源
* @param secretKey 密匙
*
* return 签名后数据
*/
function HmacSha1($sourceJson, $secretKey)
{
    $signature = base64_encode((hash_hmac("sha1",$sourceJson, $secretKey, true)));
    $signature = str_replace(array('+','/','='),array('-','_',''),$signature);
    return $signature;
}

03 JAVA 加密版本

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

/**
* 生成签名数据
*
* @param sourceData 待加密的数据源
* @param secretKey 密匙
*
* return 签名后数据
*/
public static String getSignature(String sourceData,String secretKey) throws Exception{
    byte[] keyBytes = secretKey.getBytes();
    SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
    Mac mac = Mac.getInstance("HmacSHA1");
    mac.init(signingKey);
    byte[] rawHmac = mac.doFinal(sourceData.getBytes("UTF8"));
    String result = Base64.encodeBase64URLSafeString(rawHmac);
    return result;
}

04 Python 加密版本

import hashlib
import base64
import hmac

/**
* 生成签名数据
*
* @param sourceData 待加密的数据源
* @param secretKey 密匙
*
* return 签名后数据
*/
def HmacSha1(source_json, app_key):
    signature = base64.urlsafe_b64encode(hmac.new(app_key, source_json, hashlib.sha1).digest())
    signature = signature.replace('=', '')
    return signature