簡體   English   中英

HMAC SHA256 - Php 到 Python

[英]HMAC SHA256 - Php To Python

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 以便我可以獲得幾乎相似的值。

這兩個在 Python 和 PHP 之間完全相同。 要觀察的關鍵部分是,在 Python 中, hexdigest()可以轉換為 PHP 中的bin2hex()

下面我為時間戳、appid、key 和 secret 設置相同的值。 當時間戳改變時,基礎值也會改變。 在比較算法時,您應該始終使用不會改變的固定數據(加密密鑰、臨時數據等)。

Python

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM