java - 端口 SecretKeySpec Java 代码转换为 Python27

标签 java python-2.7

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

它需要一个 keyString 作为参数和一个消息字符串

下面是我需要转换为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很重要。

关于java - 端口 SecretKeySpec Java 代码转换为 Python27,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57042971/

相关文章:

Python 文件加密

python virtualenv 没有使用正确版本的 python

macos - numpy 未安装在 macOS 上

python - Many2one 字段上的 Odoo 8 域过滤器

java - 返回不能被零除的项

java - Spring security 3.1.4 带有表单登录的多个http元素

Java ExecutorService 实现协助

java - 全局初始化的 Drools 规则测试

java - Android 应用内支付公钥异常

python - 在 PyCharm 中将 python 2 代码转换为 3