5. Base64 تشفير وفك التشفير باستخدام JavaScript في Delphi
البحث عن Google: سيجد تشفير JavaScript Base64 العديد من رموز تشفير BASE64.
var base64encodechars = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/" ؛ var base64decodechars = صفيف جديد ( -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، 62 ، -1 ، -1 ، 63 ، 52 ، 53 ، 54 ، 55 ، 56 ، 57 ، 58 ، 59 ، 60 ، 61 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، 0 ، 1 ، 2 ، 3 ، 4 ، 5 ، 6 ، 7 ، 8 ، 9 ، 10 ، 11 ، 12 ، 13 ، 14 ، 15 ، 16 ، 17 ، 18 ، 19 ، 20 ، 21 ، 22 ، 23 ، 24 ، 25 ، -1 ، -1 ، -1 ، -1 ، -1 ، -1 ، 26 ، 27 ، 28 ، 29 ، 30 ، 31 ، 32 ، 33 ، 34 ، 35 ، 36 ، 37 ، 38 ، 39 ، 40 ، 41 ، 42 ، 43 ، 44 ، 45 ، 46 ، 47 ، 48 ، 49 ، 50 ، 51 ، -1 ، -1 ، -1 ، -1) ؛ وظيفة base64encode (str) { var out ، أنا ، لين ؛ var c1 ، c2 ، c3 ؛ len = str.length ؛ أنا = 0 ؛ Out = "" ؛ بينما (أنا <len) { C1 = str.charcodeat (i ++) & 0xff ؛ إذا (أنا == لين) { out += base64encodechars.charat (c1 >> 2) ؛ Out += base64encodechars.charat ((C1 & 0x3) << 4) ؛ Out += "==" ؛ استراحة؛ } C2 = str.charcodeat (i ++) ؛ إذا (أنا == لين) { out += base64encodechars.charat (c1 >> 2) ؛ Out += base64encodechars.charat (((C1 & 0x3) << 4) | ((C2 & 0xf0) >> 4)) ؛ Out += base64encodechars.charat ((C2 & 0xf) << 2) ؛ Out += "=" ؛ استراحة؛ } C3 = str.charcodeat (i ++) ؛ out += base64encodechars.charat (c1 >> 2) ؛ Out += base64encodechars.charat (((C1 & 0x3) << 4) | ((C2 & 0xf0) >> 4)) ؛ Out += base64encodechars.charat (((C2 & 0xf) << 2) | ((C3 & 0xc0) >> 6)) ؛ Out += base64encodechars.charat (C3 & 0x } العودة } دالة base64decode (str) { var c1 ، c2 ، c3 ، c4 ؛ var i ، len ، out ؛ len = str.length ؛ أنا = 0 ؛ Out = "" ؛ بينما (أنا <len) { / * C1 */ يفعل { C1 = base64DecodeChars [str.charcodeat (i ++) & 0xff] ؛ } بينما (i <len && c1 == -1) ؛ إذا (C1 == -1) استراحة؛ / * C2 */ يفعل { C2 = base64decodechars [str.charcodeat (i ++) & 0xff] ؛ } بينما (i <len && c2 == -1) ؛ إذا (C2 == -1) استراحة؛ Out += string.fromcharcode ((C1 << 2) | ((C2 & 0x30) >> 4)) ؛ / * C3 */ يفعل { C3 = str.charcodeat (i ++) & 0xff ؛ إذا (C3 == 61) العودة C3 = BASE64DECODECHARS [C3] ؛ } بينما (i <len && c3 == -1) ؛ إذا (C3 == -1) استراحة؛ Out += string.fromcharcode (((C2 & 0xf) << 4) | ((C3 & 0x / * C4 */ يفعل { C4 = str.charcodeat (i ++) & 0xff ؛ إذا (C4 == 61) العودة C4 = BASE64DECODECHARS [C4] ؛ } بينما (i <len && c4 == -1) ؛ إذا (C4 == -1) استراحة؛ Out += string.fromcharcode (((C3 & 0x03) << 6) | C4) ؛ } العودة } وظيفة utf16to8 (str) { var out ، i ، len ، c ؛ Out = "" ؛ len = str.length ؛ لـ (i = 0 ؛ i <len ؛ i ++) { c = str.charcodeat (i) ؛ if ((c> = 0x0001) && (c <= 0x Out += str.charat (i) ؛ } آخر إذا (c> 0x07ff) { Out += String.Fromcharcode (0xe0 | ((C >> 12) & 0x Out += String.Fromcharcode (0x80 | ((C >> 6) و 0x Out += String.Fromcharcode (0x80 | ((C >> 0) و 0x } آخر { OUT += string.fromcharcode (0xc0 | ((C >> 6) & 0x Out += String.Fromcharcode (0x80 | ((C >> 0) و 0x } } العودة } وظيفة utf8to16 (str) { var out ، i ، len ، c ؛ var char2 ، char3 ؛ Out = "" ؛ len = str.length ؛ أنا = 0 ؛ بينما (أنا <len) { c = str.charcodeat (i ++) ؛ التبديل (C >> 4) { الحالة 0: الحالة 1: الحالة 2: الحالة 3: الحالة 4: الحالة 5: الحالة 6: الحالة 7: // 0xxxxxxxx Out += str.charat (I-1) ؛ استراحة؛ الحالة 12: القضية 13: // 110x xxxx 10xx xxxx char2 = str.charcodeat (i ++) ؛ OUT += string.fromcharcode ((C & 0x استراحة؛ الحالة 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charcodeat (i ++) ؛ char3 = str.charcodeat (i ++) ؛ OUT += string.fromcharcode ((C & 0x ((char2 & 0x ((Char3 و 0x استراحة؛ } } العودة } |
كيف يمكننا إضافة مثل هذه الرمز الطويل في طريقة AddCode ()؟
1) الطريقة الأولى: تحديد مثل هذا الرمز الطويل إلى سلسلة. عبء العمل هذا بالتأكيد كبير جدًا ومعرض للخطأ.
2) الطريقة الثانية: حددها في مفكرة وقراءتها عند تشغيل البرنامج. الأمن منخفض للغاية ومن السهل تعديله وإجراء أخطاء.
3) الطريقة الثالثة: تخزينها في DLL كملف مورد. هذه الطريقة أكثر ملاءمة. سوف نستخدم هذه الطريقة للتعامل معها أدناه.
خطوات لإنشاء DLL:
1) إنشاء مفكرة جديدة ، لصق الرمز أعلاه ، وأخيراً حفظه كـ BASE64.TXT.
2) إنشاء مفكرة جديدة ، واكتب الرمز التالي ، وأخيراً حفظه كـ BASE64.RC.
base64file exefile "base64.txt" |
3) إنشاء ملف دفعة جديدة في نفس الدليل وحفظه كـ BASE64.BAT.
BRCC32.EXE BASE64.RC |
4) التجميع في ملف الموارد الدقة: انقر نقرًا مزدوجًا لتنفيذ BASE64.BAT ، وبعد ذلك ، سيتم إنشاء ملف BASE64.RES ، وهو ملف المورد لنص JavaScript.
5) قم بإنشاء DLL جديد ، احفظه كـ BASE64.DPR ، وأضف الكود التالي ، ثم قم بتجميعه في BASE64.DLL.
BASE64 المكتبة ؛ {$ r base64.res} يبدأ نهاية. |
وبهذه الطريقة ، يتم تعبئة ملف الموارد لدينا في DLL ويتم الانتهاء منه!
بعد ذلك ، تتمثل مهمتنا في قراءة رمز JavaScript من خلال DLLS.
{قراءة ملف المورد إلى متغير سلسلة} وظيفة readResource (): سلسلة ؛ var هينست: ثاندل ؛ تيار: tresourcestream ؛ الترميز: tstrings. يبدأ النتائج: = '' ؛ // تحميل DLL hinst: = loadlibrary ('base64.dll') ؛ إذا hinst = 0 ثم الخروج ؛ يحاول // قراءة ملف المورد تيار: = tresourcestream.create (Hinst ، 'base64file' ، 'Exefile') ؛ الترميز: = tstringList.create () ؛ يحاول // احفظ ملف المورد في القائمة codeString.LoadFromStream (دفق) ؛ // إرجاع سلسلة النتيجة: = codestring.text ؛ أخيراً codestring.free ؛ دفق. نهاية؛ أخيراً مكتبة (هينست) ؛ نهاية؛ نهاية؛ |
العمل التالي هو إضافة وظائف JavaScript مخصصة من خلال AddCode () من عنصر التحكم ScriptControl.
تهيئة مكون ScriptControl ، يرجى الرجوع إلى التطبيق المتقدم لـ ScriptControl في Delphi (I)
http://blog.csdn.net/juwuyi/archive/
sc.addcode (readResource ()) ؛ // التشفير الكلمات: = "هذا قطعة من النص مشفرة مع base64 '؛ //نتيجة: النتيجة: = sc.eval ('base64encode (utf16to8 (' '+words+' '')) ') ؛ // فك التشفير النتيجة: = sc.eval ('utf8to16 (base64decode (' ''+words+'' '))') ؛ |
<span style = "Font-Family: Song Font ؛ M