2010-02-03 18 views
5

necesito una versión PHP del siguiente código C#:¿Cómo traduciría este código C# en PHP?

string dateSince = "2010-02-01"; 
string siteID = "bash.org"; 
string sharedSecret = "12345"; // the same combination on my luggage! 

using System.Security.Cryptography; 

MD5CryptoServiceProvider x = new MD5CryptoServiceProvider(); 
byte[] dataBytes = System.Text.Encoding.ASCII.GetBytes(string.Format("{0}{1}{2}", dateSince, siteID, sharedSecret)); 
string result = BitConverter.ToString(x.ComputeHash(dataBytes)); 

... este fragmento de código parece estar incompletos. Pero esto es lo que creo que está pasando:

  1. concatenando dateSince, siteID y SharedSecret. Robando ropa interior.

  2. ???

  3. convirtiendo esa cadena en una matriz de bytes codificada en ascii.

  4. tomando el hash MD5 de esa matriz.

Este misterioso objeto BitConverter parece convertir esa matriz de hash MD5, en una cadena de números hexadecimales. De acuerdo con el documento mencionado anteriormente, el valor del resultado debe ser similar a: "6D-E9-9A-B6-73-D8-10-79-BC-4F-EE-51-A4-84-15-D8"

¡Cualquier ayuda es muy apreciada!


Olvidó incluir esto antes. Aquí está la versión de PHP de lo que he escrito hasta ahora:

$date_since = "2010-02-01"; 
$site_id = "bash.org"; 
$shared_secret = "12345"; 

$initial_token = $date_since.$site_id.$shared_secret; 

$ascii_version = array(); 
foreach($i=0; $i < strlen($initial_token); $i++) { 
    $ascii_version[] = ord(substr($initial_token,$i,1)); 
} 

$md5_version = md5(join("", $ascii_version)); 

$hexadecimal_bits = array(); 
foreach($i=0; $i < strlen($md5_version); $i++) { 
    // @todo convert to hexadecimal here? 
    $hexadecimal_bits[] = bin2hex(substr($md5_version,$i,1)); 
} 

$result = join("-", $hexadecimal_bits); 
+0

Por favor, publique el código que ha escrito hasta ahora. En general, a la gente no le gusta escribir tu código por ti. –

+0

Ah, perdón por eso; Soy nuevo aquí. Un momento ... – sayajay

+0

+1 para la misma combinación que su equipaje. – benjy

Respuesta

1

Creo que esto funcionará para usted. Parece que el método MD5CryptoServiceProvider :: ComputeHash devuelve una matriz de 16 bytes, no una cadena de 32 caracteres, como la función PHP md5() normal. Sin embargo, PHP md5() tiene un segundo parámetro opcional que obliga a "salida sin procesar", que hace corresponde a la salida de ComputeHash().

$date_since = "2010-02-01"; 
$site_id = "bash.org"; 
$shared_secret = "12345"; 
$initial_token = $date_since.$site_id.$shared_secret; 

//get the RAW FORMAT md5 hash 
//corresponds to the output of MD5CryptoServiceProvider::ComputeHash 
$str = md5($initial_token, true); 
$len = strlen($str); 
$hex = array(); 
for($i = 0; $i < $len; $i++) { 
    //convert the byte to a hex string representation (left padded with zeros) 
    $hex[] = str_pad(dechex(ord($str[$i])), 2, '0', STR_PAD_LEFT); 
} 
//dump output 
echo implode("-",$hex); 

//outputs fe-0d-58-fd-5f-3d-83-fe-0f-6a-02-b4-94-0c-aa-7b 
+0

¡Gracias por su explicación! Ahora tiene mucho más sentido. Eres una gran ayuda zombat. Realmente lo aprecio. – sayajay

+0

Np, feliz de ayudar. – zombat

0

Esto es lo que veo, excepto que lo que produce no ingresará los guiones. Esos tendrían que ser inyectados de otra manera.

var $dateSince = "2010-02-01"; 
var $siteID = "bash.org"; 
var $sharedSecret = "12345"; // the same combination on my luggage! 

var $full_string = $dateSince . $siteID . $sharedSecret; 

string result = md5($full_string);