消费者调用API签名计算 to lowercase base64 signaturecode base64.b64encode(hash.digest()) signaturecodestr str(signaturecode) headerstemplate '''H "XHMACALGORITHM: hmacsha256" H "XHMACACCESSKEY: %s" H "XHMACSIGNATURE: %s"''' signaturecodelen len(signaturecodestr) start 2 end signaturecodelen1 signature signaturecodestr[start:end] hmacheaders headerstemplate % (ak, signature) print some info print("待签名的字符串信息:" + signaturemessage) print("原始encode后的编码值:" + signaturecodestr) print("使用的hmac header:" + hmacheaders) Java import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.xml.bind.DatatypeConverter; class Main { public static void main(String[] args) { try { String secret "the shared secret key here"; String message "this is signature string"; Mac hasher Mac.getInstance("HmacSHA256"); hasher.init(new SecretKeySpec(secret.getBytes(), "HmacSHA256")); byte[] hash hasher.doFinal(message.getBytes()); // to lowercase hexits DatatypeConverter.printHexBinary(hash); // to base64 DatatypeConverter.printBase64Binary(hash); } catch (NoSuchAlgorithmException e) {} catch (InvalidKeyException e) {} } } GO package main import ( "crypto/hmac" "crypto/sha256" "encoding/base64" "encoding/hex" ) func main() { secret : []byte("the shared secret key here") message : []byte("this is signature string") hash : hmac.New(sha256.New, secret) hash.Write(message) // to lowercase hexits hex.EncodeToString(hash.Sum(nil)) // to base64 base64.StdEncoding.EncodeToString(hash.Sum(nil)) } Ruby require 'base64' require 'openssl' secret 'the shared secret key here' message 'this is signature string' to lowercase hexits OpenSSL::HMAC.hexdigest('sha256', secret, message)