PHP nasıl içine bu C # kodu çevirmek istiyorsunuz?

2 Cevap

Ben bir yazılım doc (ya da ne günümüzde uygun dokümantasyon için geçer) teslim edildi. Çok zaman hüsran, o da hafifçe erkekler odasından tuvalet kağıdı parça kullanılmış olabilir. Söylemeye gerek yok, dedi dokümanın içeriği çok arzulanan yaptı.

Yani, büyük bir gizem ile sol duyuyorum. Bu doc ​​API çeşit açıklar; ya da ben söyledim. Böyle bir doc yazılım gerçek bir parçası bana ötesinde tarif ve benim şimdiki soruşturma kapsamı dışındadır nasıl. Her neyse, benim soru üzerine ....

Bu doc ​​gibi kod parçacığı C # ile yazılmış bir kere. Kesinlikle open-source/Linux adam olmak, benim yaşam için C # bilmiyorum.

Ben bir PHP kurulumu hakkında değilim. Diğer bir deyişle ben aşağıdaki C # kodu bir PHP sürümü gerekir:

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));

... Bu kod parçacığını eksik görünüyor. Ama burada ben oluyor düşünüyorum ne:

1) dateSince, siteid ve PaylaşılanGizlilik birleştirerek. Külot çalmak.

2)??

2a) bir ASCII kodlanmış bayt dizisi bu dizeyi dönüştürmek.

2b) o dizinin MD5 hash alarak.

3) KAR!

Bu gizemli BitConverter nesne onaltılık sayılar bir dizeye, MD5 dizi sağlaması olduğunu dönüştürme gibi görünüyor. "6D-E9-9A-B6-73-D8-10-79-BC-4F-EE-51-A4-84-15-D8:" Anılan dokümana göre, sonucun değeri gibi görünmelidir

Herhangi bir yardım büyük beğeni topluyor!


Bu daha önce eklemeyi unuttum. İşte ben bugüne kadar yazdık ne PHP versiyonu:

$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);

2 Cevap

Ben bu sizin için çalışacağını düşünüyorum. Bu MD5CryptoServiceProvider benziyor :: ComputeHash yöntemi 16 byte bir dizi değil, normal PHP md5() function gibi 32 karakter bir dize döndürür. Ancak, PHP'nin md5() does ComputeHash() çıkışına karşılık "ham çıktı", zorlayan ikinci bir isteğe bağlı parametre vardır.

$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

Bu, ben o çıkışları ne girdi olmaz tire dışında görmek budur. Bu başka bir şekilde enjekte edilmesi gerekir.

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);