سؤال

ولدي روتين فك التشفير في VB6. أريد الآن نفس فك التشفير في C #. السلاسل التي تحتاج إلى فك التشفير هي في يونيكود، ولذا فإنني استخدام Encoding.Unicode.GetString لقراءة الإدخال في C #. مدخلات يبدو الآن بالضبط نفس في VB6.

يتم فك الأحرف القليلة الأولى في حلقة طيب! ثم واجهت فرق ... البرنامج يوزع الحرف '~' مع مؤشر مختلفة مما كانت عليه في VB6.

عند التصحيح أرى ما يلي في VB وفي صافي:
VB6 ~ = كود 152
C # ~ = كود 732

وغني عن القول، فشل فك التشفير. أنا بحاجة للحصول على 152 للحرف المذكورة أعلاه.

ما هو الخطأ هنا؟

والتحيات،

وميشال

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

المحلول

وVB6 لديك لم يقرأ يونيكود (كنت اعتقد في مخطط الشفرة ويندوز 1252)، والذي هو السبب في انها تأتي مرة أخرى مع رمز حرف مختلفة.

نصائح أخرى

وماذا تقصد ب "الطابع 152" بالضبط؟ كيف تحصل على هذا العدد؟

لاحظ أن يكون "في Unicode" يمكن أن تعني أشياء كثيرة مختلفة. هل أنت متأكد من انها المشفرة كما UTF-16 في البيانات الثنائية؟ إذا كنت قد إضافة المزيد عن البيانات المصدر، من شأنه أن يكون مفيدا للغاية.

وبالإضافة إلى ذلك، يجب تقريبا <م> دائما أن يتم التشفير وفك التشفير باستخدام بايت، وليس حرفا. بينما أنا أفهم تحتاج إلى إعادة إنتاج السلوك القديم، يجب عليك محاولة ترحيل بعيدا عن معالجة السلاسل والبيانات الثنائية مبهمة مع مرور الوقت.

ولقد فعلت هذا من قبل. المشكلة هي في الترميز الخاص بك. حيث NET هو يونيكود، VB6 هو Unifail.

في الجانب .NET، تحتاج إلى استخدام Encoding.ASCII لتحويل السلاسل الخاصة بك في صفائف بايت والعكس بالعكس.

Encoding.ASCII.GetString(decrypted);
//and
Encoding.ASCII.GetBytes(cleartext);

وهكذا، عندما كنت تشفير لإرسالها إلى التطبيق VB، يجب استخدام ASCII.GetBytes ثم تشفير أن صفيف بايت، وعندما تحصل على صفيف بايت من الجانب VB يجب فك تشفير منهم واستخدام ASCII.GetString ل فك شفرة بايت إلى سلسلة قابلة للاستخدام.

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