将端口SecretKeySpec Java代码转换为Python27

时间:2019-07-15 15:33:42

标签: java python-2.7

我已经被要求将一些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库,但是我不确定要从这些库中使用什么来完成此转换?

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码:

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很重要。