C # yöntemi maç için bir PHP UTF-16 SHA1 hash oluşturmak

0 Cevap

Ben PHP5'ta bazı C # kodu çoğaltmak için çalışıyorum ve bazı zorluklar yaşıyorum.

Aşağıdaki gibi C # kodu, ve o değiştirilemez dikkat etmek önemlidir:

string s = strToHash;
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] bytes = encoding.GetBytes(s);
SHA1Managed managed = new SHA1Managed();     
bytes = encoding.GetBytes(Convert.ToBase64String(managed.ComputeHash(bytes)) + "Space");
return Convert.ToBase64String(managed.ComputeHash(bytes));

Ben aşağıdaki gibi bu çoğaltmak için yazdım PHP kodu:

utfString = mb_convert_encoding($strToHash,"UTF-16");
hashTag = sha1($utfString,true); 
base64Tag = base64_encode($hashTag); 
encodedBase64Tag = mb_convert_encoding($base64Tag."Space","UTF-16");
base64EncodedAgain = base64_encode($encodedBase64Tag);

echo $base64EncodedAgain

However, the two outputs don't match up. I believe this is because the SHA1 method in PHP works on ASCII encoded strings, not the encoding actually used by the passed in string.

Ben bu işe almak istiyorum, ve (no-şüphesiz kolay düzeltme olacağını rağmen) ben c # kodunu değiştirerek bunu elde edemez.

Herhangi bazı fikirler önerebiliriz lütfen?


Tamam, ben artefacto tavsiyesi aşağıdaki kodu değişmiş, ve beklendiği gibi hala çalışmıyor.

PHP kodu artık bu gibi görünüyor:

$utfString = "\xFF\xFE".mb_convert_encoding($strToHash,"UTF-16LE");
$hashTag = sha1($utfString,true);       
$base64Tag = base64_encode($hashTag);   
$encodedBase64Tag = "\xFF\xFE".mb_convert_encoding($base64Tag."Space","UTF-16LE");  
$hashedAgain = sha1($encodedBase64Tag,true);
$base64EncodedAgain = base64_encode($hashedAgain);

echo $base64EncodedAgain."<Br/>";

Ve bu yöntemin outputed değerdir:

1/Y5MCzI8vDJqc456YIicpwoyy0 =

Ancak, C # kodu, değeri şudur:

VPf7BhT1ksAfWbzeJw35g + bVKwY =

0 Cevap