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