PHP

2017-07-19 8 views
5

में स्ट्रिंग करने के लिए बाइट सरणी को कनवर्ट करें 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 में कैसे परिवर्तित करूं?

उत्तर

0

एक द्विआधारी स्ट्रिंग में एक GUID परिवर्तित करने के लिए इस समारोह का प्रयास करें:

function guidToBytes($guid) { 
    $guid_byte_order = [3, 2, 1, 0, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15]; 
    $guid = preg_replace("/[^a-zA-Z0-9]+/", "", $guid); 
    $result = []; 
    foreach ($guid_byte_order as $offset) { 
     $result[] = hexdec(substr($guid, 2 * $offset, 2)); 
    } 
    return $result; 
} 
+0

मैं पहले से ही ऐसा करता हूं, हालांकि सही बाइट ऑर्डर के बिना $ keyBytes गलत होगा ... – SorenJorgensen

+0

;-) इसे 2 मिनट पहले देखा गया। धन्यवाद... – SorenJorgensen

1

आप पीएचपी

में

http://php.net/manual/en/function.chr.php

chr chr फ़ंक्शन का उपयोग किसी पूर्णांक इनपुट में प्राप्त हो जाएगा और corrispondent ascii चार लौट सकते हैं।

$strings = array_map("chr", $bytes); 
$string = implode(" ", $strings); 

मुझे आशा है कि मैं मददगार था

+0

मैं पहले से ही ऐसा करते हैं, तथापि array_map नहीं होगा "बस" एक और उत्पादन सरणी? परिणाम तब भी एक स्ट्रिंग में एक साथ रखना होगा? – SorenJorgensen

+0

परिणामस्वरूप स्ट्रिंग प्राप्त करने के लिए आप इंपोड फ़ंक्शन का उपयोग कर सकते हैं। $ तार = array_map ("chr", $ बाइट्स); $ स्ट्रिंग = इंपोड ("", $ तार); –

संबंधित मुद्दे

 संबंधित मुद्दे