当前位置: 首页 > 知识库问答 >
问题:

HMAC SHA256-Php到Python

益炜
2023-03-14

PHP代码段

$timestamp    = time();
$appID        = 1;
$key          = '5nF6Ai4ykPY=';
$secret       = '0a75...';

$sign = "key:".$key."id:".$appID.":timestamp:".$timestamp;
$authtoken = rawurlencode(base64_encode(hash_hmac('sha256', $sign, $secret, true)));  
echo $authtoken;
echo $timestamp;

获得一个编码字符串,其值为:

WLHIAYAXCUSH1EOX66CJWG8G1ROABAGEQVBO6MSBNF8%3D

PYTHON代码段

import hmac
import hashlib
import time

timestamp = time.time()
appid = 60
key = "scas11eABXs="
secret = "N4Rlq....=="

sign = f"key:{key}id:{appid}:timestamp:{int(timestamp)}"


signature = hmac.new(secret.encode(), sign.encode(), hashlib.sha256).hexdigest()
print(signature)

获得此值

<代码>8A85743F3B1704096B3FE5018DE2FF133EB2BAC63C93FA8FF26CCA328AB83E39

我从python得到的值与php的值有很大的不同,我的意思是,它几乎像十六进制,而php代码中的值是不同的。

谁能帮忙把这个php代码片段转换成python,这样我就可以得到几乎相似的值。

共有1个答案

徐高懿
2023-03-14

这两者在Python和PHP之间是完全相同的。需要注意的关键部分是,在Python中,hexdigest()可以转换为PHP中的bin2hex()

下面我为时间戳、appid、key和secret设置了相同的值。当时间戳发生变化时,基础值也会发生变化。在比较算法时,您应该始终使用不会改变的固定数据(加密密钥、临时数据等)。

巨蟒

import hmac
import hashlib
import time

timestamp = int(1617543014)
appid = 60
key = "scas11eABXs="
secret = "N4Rlq=="

sign = "key:" + key +"id:" + str(appid) + ":timestamp:" + str(timestamp)

signature = hmac.new(secret.encode(), sign.encode(), hashlib.sha256).hexdigest()
print(signature)

PHP

<?php
$timestamp    = 1617543014;
$appID        = 60;
$key          = 'scas11eABXs=';
$secret       = 'N4Rlq==';

$sign = "key:".$key."id:".$appID.":timestamp:".$timestamp;
$authtoken = bin2hex(hash_hmac('sha256', $sign, $secret, true));
echo $authtoken;

两者都产生:

de409427af722c4cfbcb7bd280cd33ace71f33d29d4fc54182ce2a3ee758712e
 类似资料:
  • 问题内容: 我在Java中有以下代码: 以及C#中的以下代码: 字节数组“ secretKey”和“ bytes”是等效的,但字节数组“ rawHmac”不同,字符串“ result”不同。谁能看到原因? 问题答案: 不要这样做: 这将使用平台默认编码将字符串转换为字节数组。平台之间可能会有所不同,而您想要一些可重复的东西。我建议使用UTF-8: (当然,对密钥执行相同的操作。) 然后,您应该在C

  • 对于支付提供商,我需要使用HMAC-SHA256计算基于哈希的消息身份验证码。这给我带来了不少麻烦。 支付提供商给出了两个在伪码中正确计算身份验证码的示例。所有键均为十六进制。 在做了一些研究之后,我试图编写代码来实现这一点,但我不断得出不同的结果。 这是我得到的结果: 因此,使用这两种方法中的任何一种,我都可以得到提供者示例想要的结果。 我错过了什么?它是编码吗?我的hexDecode坏了吗?

  • 问题内容: 在PHP中,将RGB三元组转换为HSV值的最直接方法是什么? 问题答案:

  • 问题内容: 我正在尝试将一些数据从Node.js应用程序发布到PHP脚本。目前,我只是在构建概念证明,但无法将实际数据传递到PHP端。请求通过,我得到200,但PHP认为$ _POST数组为空。 这是我的节点代码: 同样,该请求将其发送到localhost:8050 / machines / test / index.php,但是当我执行$ _POST的var_dump时,它是一个空数组。 我怀疑

  • 问题内容: $ sql =“ INSENT INTO data(id,num,name)VALUES ”; 如何将$ array转换成? 谢谢 问题答案: implode()可以帮助您做到这一点,尽管您将需要遍历并将其应用于每个单独的数组:

  • 问题内容: 我正在尝试将一系列产品转换为CSV文件,但似乎没有计划。CSV文件是一长行,这是我的代码: 此外,标头不会强制下载。我一直在复制并粘贴输出并保存为.csv 编辑 解决的问题: 如果有人在寻找相同的东西,请找到更好的方法: 问题答案: 与其写出值,不如考虑使用。 这样可以立即解决您的问题。