عدم الحصول على مباراة SHA1 في بلدي C # لتحويل كود PHP، ما أنا في عداد المفقودين؟
-
03-07-2019 - |
سؤال
وأنا أحاول أن أفهم هذا حتى أستطيع أن أفعل شيئا من هذا القبيل. وأنا أعلم:
و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 ($ تذكرة) كانت لا تطابق ذلك أنا لم يكلف نفسه عناء مقارنتها في التعليمات البرمجية.
المحلول
وافتراضيا، href="http://us2.php.net/sha1" rel="nofollow noreferrer"> SHA1 وظيفة فب في إرجاع عدد عشري 40 حرف. عليك أن تطلب صراحة تنسيق ثنائي 20 بايت اذا كان هذا ما تريد
$hash = sha1( $ticket, true );
نصائح أخرى
$ticket = substr($decrypthex, 0, -20);
$hash = substr($decrypthex, -20);