में स्ट्रिंग करने के लिए बाइट सरणी को कनवर्ट करें PHP में नया होने के कारण मुझे बाइट्स की एक सरणी को स्ट्रिंग में परिवर्तित करने की आवश्यकता है जिसे php फ़ंक्शन में उपयोग किया जा सकता है; hash_hmac("sha256", $payload, $key, true)
PHP
$key
{6fccde28-de32-4c0d-a642-7f0c601d1776}
कहें, जो कि बाइट्स की एक सरणी में परिवर्तित हो गया है, एक ग्रिड से निकल जाएगा। hash_hmac
दोनों डेटा और कुंजी के लिए एक स्ट्रिंग लेता है, मुझे गैर-प्रिंट करने योग्य वर्णों के कारण इस बाइट सरणी को बिना किसी नुकसान के रूपांतरित करने की आवश्यकता होती है।
मैं निम्नलिखित PHP कोड का उपयोग कर रहा:
function guidToBytes($guid) {
$guid_byte_order = [3,2,1,0,5,4,6,7,8,9,10,11,12,13,14,15];
$guid = preg_replace("/[^a-zA-Z0-9]+/", "", $guid);
$result = [];
for($i=0;$i<16;$i++)
$result[] = hexdec(substr($guid, 2 * $guid_byte_order[$i], 2));
return $result;
}
$payload = utf8_encode("Some data string");
$keyBytes = guidToBytes("6fccde28-de32-4c0d-a642-7f0c601d1776");
$key = implode(array_map("chr", $keyBytes));
$hash = hash_hmac("sha256", $payload, $key, true);
$result = base64_encode($hash);
समतुल्य कोड ग # में:
var g = Guid.Parse("6fccde28-de32-4c0d-a642-7f0c601d1776");
var key = g.ToByteArray();
var data = "Some data string";
var payload = Encoding.UTF8.GetBytes(data);
using(var ha = new HMACSHA256(key)) {
var hash = ha.ComputeHash(payload);
var result = Convert.ToBase64String(hash);
}
$key
में मूल्य स्थानापन्न दोनों भाषाओं में एक ही base64
उत्पादन का उत्पादन होगा, $key
छोड़ने बात हो यह गलत/अलग है।
तो; डेटा के नुकसान के बिना मैं $keyBytes
को $key
में कैसे परिवर्तित करूं?
मैं पहले से ही ऐसा करता हूं, हालांकि सही बाइट ऑर्डर के बिना $ keyBytes गलत होगा ... – SorenJorgensen
;-) इसे 2 मिनट पहले देखा गया। धन्यवाद... – SorenJorgensen