سؤال

أحاول إنشاء خادم WebSocket في Java ، لكنني أواجه صعوبة ... تقول مواصفات WebSockets أنه يتعين عليك تسلسل الأرقام من key1 و key2 ثم تسلسل البايتات الإضافية 8 من البيانات إلى ... قم بتكوين سلسلة 128 بت التي يتم استخدام MD5 بعد ذلك من قبل الخادم لإثبات أنه قرأ المصافحة. '

example key1 هو 155712099 example key2 هو 173347027 مثال 8 بايت من البيانات الإضافية هو tm [k t2u

"155712099173347027TM [K T2U" هو 26 بايت لا 16 بايت (128 بت) مثل أنه من المفترض أن تكون! ماذا أفتقد هنا؟

يمكنني "الحصول على" كل شيء عن WebSockets ولكن هذا الجزء الصغير هنا.

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

المحلول

أنت تستخدم Key1 و Key2 كسلسلة من الأرقام بدلاً من أرقام 32 بت.

على سبيل المثال ، 155712099 كرقم 32 بت hexidecimal هو: 0x63 ، 0xfa ، 0x47 ، 0x09 (0x947fa63). هذا ما تريده. تحتاج إلى تحويل سلاسل key1 و key2 إلى أعداد صحيحة غير موقعة ثم قم بتعبئة تلك البايتات الأربعة إلى الموضع 0 (للمفتاح 1) والموقف 4 (للمفتاح 2) من مجموعة البايت المستهدفة.

سيؤدي أخذ 155712099 كسلسلة من الأرقام إلى سلسلة بايت 9 بقيم سداسية: 0x31 ، 0x35 ، 0x35 ، 0x37 ، 0x31 ، 0x32 ، 0x30 ، 0x39 ، 0x39. من ناحية أخرى ، فأنت تريد حزم البايتات الإضافية مباشرة في صفيف البايت المستهدف الخاص بك بدءًا من الموضع 8. هذا يجب أن يمنحك مجموعة بايت مستهدفة 16 بايت.

لاحظ أن المصافحة تعمد معالجة عناصر البيانات المختلفة كنوع بيانات مختلفة لمحاولة إحباط أنواع مختلفة من الهجمات مقابل خادم WebSockets.

نصائح أخرى

إذا كانت Key1 و Key2 هي أعداد صحيحة 32 بت ، فربما تحتاج إلى تسلسل تمثيل كل من كل من كل من كل بايت لكل منها ، وليس تمثيل السلسلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top