gpt4 book ai didi

php - Dart与PHP代码中的不同哈希结果

转载 作者:行者123 更新时间:2023-12-03 03:59:02 25 4
gpt4 key购买 nike

我正在努力使它工作 flutter 朔迷离,我无法获得相同的结果。
我的php代码先打印不同的哈希,然后再打印flutter代码。在flutter应用程序中可以这样做吗?

我试图通过运行此Flutter代码来实现这一目标。但是经过5个小时的阅读,我放弃了,创建了一个堆栈溢出帐户。

import 'package:crypto/crypto.dart';
import 'dart:convert'; // for the utf8.encode method
import 'package:http/http.dart' as http;


void main() {
var api = 'https://app.repricer.nl';
var endpoint = '/api/v1/channels/all.json';
var method = 'GET';
var public_key = '';
var private_key = '';
var data = '';


var ms = (new DateTime.now()).millisecondsSinceEpoch;
var timestamp = ms / 1000;

var hash_string = public_key + '|' + method + '|' + endpoint + '|' + data + '|' + timestamp.toString();

var key = utf8.encode(private_key);
var bytes = utf8.encode(hash_string);

var hmacSha256 = new Hmac(sha512, key); // HMAC-SHA256
var digest = hmacSha256.convert(bytes);

print(digest);
}

这是我要转换为 flutter 的PHP代码:

$api = 'https://app.repricer.nl';
$endpoint = '/api/v1/channels/all.json';
$method = 'GET';
$public_key = '';
$private_key = '';


// Generate the CURL headers to authenticate our request
$headers = generateHash($public_key, $private_key, $method, $endpoint, $data);


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$api.$endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
curl_close($ch);

print_r($result);

function generateHash($public_key, $private_key, $method, $endpoint, $data)
{
$timestamp = date("U");
$hash_string = array($public_key,$method,$endpoint,$data,$timestamp);
$hash = hash_hmac('sha512',implode('|',$hash_string),$private_key);
print ($hash);
return array('X-Auth: '.$public_key, 'X-Hash: '.$hash, 'X-Date: '.$timestamp);
}

我希望输出与时间戳相同。但我在同一秒内运行它,这是2个完全不同的结果。

最佳答案

您的代码正确。

小修正正在替换:

ms / 1000   to   (ms / 1000).toInt()

我看不到您代码中的其他缺陷。

在使用恒定时间戳参数进行测试运行后,我得出了这个答案: 1572731120

PHP:
$timestamp = 1572731120; //date("U");
$hash_string = array($public_key,$method,$endpoint,$data,$timestamp);
$hash = hash_hmac('sha512',implode('|',$hash_string),$private_key);


  var ms = (new DateTime.now()).millisecondsSinceEpoch;
var timestamp = 1572731120;//(ms / 1000).toInt();

var hash_string = public_key + '|' + method + '|' + endpoint + '|' + data + '|' + timestamp.toString();

var key = utf8.encode(private_key);
var bytes = utf8.encode(hash_string);

var hmacSha256 = new Hmac(sha512, key); // HMAC-SHA256
var digest = hmacSha256.convert(bytes);

证明结果相等:

hmac hashing comparison php and dart

关于php - Dart与PHP代码中的不同哈希结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58675444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com