2009-03-03 14 views
0

Bunu anlamaya çalışıyorum, böylece benzer bir şey yapabilirim. Biliyorum:C# kodlu PHP kod dönüşümünde bir sha1 eşleşmesi elde edemiyorum, neyi özlüyorum?

bunun (son 20 bayt) eklenen bir karma ile bir kimlik doğrulama anahtarı içeren tampon

MachineKeySection aranır ediliyor HashData SHA1

length -= 20; 
byte[] buffer2 = MachineKeySection.HashData(buf, null, 0, length); 

for (int i = 0; i < 20; i++) 
{ 
    if (buffer2[i] != buf[length + i]) 
    { 
     return null; 
    } 
} 

İşte ben oluyor düşünüyorum ne: Biz, ama son 20 baytlık buf'ın hepsini karıştırıyoruz. O zaman, bir zamanlar, byf'ın son 20 baytına eklenmiş olan hash ile yarattığımız karmayı karşılaştırarak, bir seferde 1 baytız.

//get the length of the ticket -20 bytes 
$ticketLn = strlen($buf)-40; 
//grab all but the last 20 bytes 
$ticket = substr($decrypthex, 0, $ticketLn); 
//create a hash of the ticket 
$hash = substr($decrypthex, $ticketLn); 

Ve sonraki adım karşılaştırmaktır:

Yani PHP'de bu çalışıyorum. Ancak, $ hash ve sha1 ($ ticket) çıkışını eklediğimde, eşleşmiyorlar, bu yüzden onları kodda karşılaştırmaktan rahatsız olmadım. Varsayılan olarak

cevap

2

, php'nin sha1() function döner 40 karakter onaltılık sayı. Açıkça, 20-byte ikili biçimini isteğiniz varsa,

$hash = sha1($ticket, true); 
1
$ticket = substr($decrypthex, 0, -20); 
$hash = substr($decrypthex, -20); 
+0

Daha iyi sözdizimi için teşekkürler, ancak yine de ihtiyacım olanı değil. – lynn