عدم الحصول على مباراة SHA1 في بلدي C # لتحويل كود PHP، ما أنا في عداد المفقودين؟

StackOverflow https://stackoverflow.com/questions/607017

سؤال

وأنا أحاول أن أفهم هذا حتى أستطيع أن أفعل شيئا من هذا القبيل. وأنا أعلم:

وBUF يحتوي على مفتاح المصادقة مع تجزئة الملحق به (بايت 20 مشاركة) وHashData التي يجري البحث عنها في MachineKeySection هو 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;
    }
}

وإليك ما أعتقد أنه يحدث: نحن تجزئة جميع ولكن بايت 20 الأخيرة من BUF. ثم نحن، 1 بايت في المرة الواحدة، مقارنة تجزئة خلقنا فقط لتجزئة أن يتم إلحاق إلى بايت 20 الأخيرة من BUF.

وحتى في PHP أنا أحاول هذا:

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

والخطوة التالية هي للمقارنة. ولكن عندما أنا أردد إخراج $ التجزئة وSHA1 ($ تذكرة) كانت لا تطابق ذلك أنا لم يكلف نفسه عناء مقارنتها في التعليمات البرمجية.

هل كانت مفيدة؟

نصائح أخرى

$ticket = substr($decrypthex, 0, -20);
$hash = substr($decrypthex, -20);
scroll top