我已经被要求将一些Java代码转换为Python2.7,但我在网上没有找到一个很好的例子。
Java代码正在使用SecretKeySpec函数和HmacSHA256构建签名。

它使用keyString作为参数和消息字符串a

以下是我需要转换为Python的函数:

public static String genSig(String key, String Params) throws Exception {
    byte[] decodedKey = Base64.getDecoder().decode(key);
    SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "HmacSHA256");
    Mac hmacSha256 = Mac.getInstance("HmacSHA256");
    hmacSha256.init(originalKey);
    hmacSha256.update(Params.getBytes());
    byte[] HmachSha256DigestBytes = hmacSha256.doFinal();
    return Base64.getEncoder().encodeToString(HmachSha256DigestBytes);
}


我研究了hmac和hashlib库,但是我不确定这些库中使用什么来完成此转换?

最佳答案

您可以使用以下代码:

import hmac
import hashlib
import base64

def generateSignatureFromParams(key, params):
    dig = hmac.new(base64.b64decode(key), msg=params, digestmod=hashlib.sha256).digest()
    return base64.b64encode(dig).decode()

print generateSignatureFromParams("a2V5", "encrypt")


注意要获取HMACSha256,digestmod=hashlib.sha256很重要。

09-26 21:37