قامت المقالات القليلة السابقة حول Servlets بتصنيف عملية الاستخدام البسيطة للخدمات. ستركز المقالة التالية بشكل أساسي على واجهة الوصول إلى تطبيقات الهاتف المحمول ، ونقل تشفير MD5 ----> التحقق من الرسائل القصيرة ---> دفع الهاتف المحمول ---> المشاركة ---> خريطة سحابة Baidu ----> الدفع ... أعمال طرف ثالث ... بما أنني نابود ، أنا أيضًا أتعلم وأكتب أثناء التعلم ، وآمل أن أفهم الاختصارات.
تتضمن مقالة اليوم بشكل أساسي تشفير بيانات نقل Javaservlet ، ومجموعة من معلمات طلب العميل ، وسيأتي مع جميع المشكلات التي واجهتها في الوسط والحلول.
نظرًا لأن واجهة الوصول إلى الهاتف المحمول يتم نشرها ، بغض النظر عن اللغة المكتوبة ، يجب أن نتخذ تدابير أمان مقابلة. خلاف ذلك ، بعد أن يعرف الأشخاص عنوان URL الخاص بك ، يعترضون طلب العميل ثم تعديل معلمات التقديم ، مما سيؤدي إلى خسائر كبيرة. يجب أن تقوم واجهة كتابة Servlet الأكثر استخدامًا أيضًا بتشفير البيانات المنقولة. إذا تم كتابته باستخدام WebService .NET WCF وغيرها من التقنيات ، فسيتضمن أيضًا مطابقة الشهادة ...
1. أفكار تشفير وتنفيذ معلمات البيانات المطلوبة.
التشفير هنا أستخدم تشفير MD5 32 بت. 32 بت هو تشفير لا رجعة فيه. وبهذه الطريقة ، حتى لو تم اعتراضه من قبل المتسلل ، فلا توجد طريقة لفك تشفير قيمة MD5 التي قمنا بتشفيرها في سلسلة مجتمعة عندما نتشفير. بالطبع هذا ليس مطلقًا. يبدو أن بعض خبراء الكمبيوتر قد فكوا لفهم طريقة التشفير في MD5 في السنوات القليلة الماضية ، لكنني أعتقد أنه قد لا يتم نشر التكنولوجيا في الإرادة ، وحتى إذا تم الإعلان عنها ، فهي ليست شيئًا يمكن للأشخاص العاديين فهمه. خلاف ذلك ، إذا كنت فقط تسأل مبرمجًا ، هل ما زلت تستخدم تشفير MD5؟ الجواب هو بالتأكيد لا أكثر.
1. بادئ ذي بدء ، دعني أتحدث عن مزيج من معلمات طلبي. نظرًا لأن هذا يتضمن تشفير MD5 ، يجب علينا ملاحظات المستخدم بعد أن قام المستخدم بتسجيل الدخول إلى الحساب باستخدام التطبيق. الرمز المميز الأول هو القيمة الوحيدة التي تشير إلى هوية المستخدم. يجب إضافة هذا الرمز المميز إلى معلمة واجهة الطلب (ما إذا كانت هذه المعلمة تشارك في التشفير ، فالأمر متروك لك لتحديد ما إذا كانت تشارك في التشفير. لقد شاركت هنا) ، لأن Servlet يحتاج إلى الاستعلام عن تشفير المستخدم المطلوب للاستعلام عن تشفير المستخدم. يتم استخدام الرمز الثاني لتشفير قيمة MD5. لا يمكن إضافة الرمز المميز هذا إلى معلمات واجهة الطلب ، ويجب أن نحفظ كلا الرموين في قاعدة البيانات ، لأنه بعد طلب المستخدم من الواجهة ، يحتاج Servlet إلى الحصول على رمز المستخدم في المعلمات ثم الاستعلام عن الرمز المطلوب لتشفير MD5 في قاعدة البيانات. ثم يضيف Servlet الرموز المشفرة من الاستعلام إلى السلسلة التي يمررها المستخدم ، وتنفيذ تشفير MD5 مرة أخرى. بعد التشفير ، قارن القيمة المشفرة لـ MD5 المشفر من قبل المستخدم. سواء كان ذلك هو نفس القيمة المشفرة للخدمة. إذا كان الأمر مختلفًا ، فقد يكون هناك سببان. مزيج سلسلة التشفير على جانب servlet غير صحيح ، وقد تم اعتراض المستخدم وتعديله في منتصف نقل البيانات. لقد استخدمت كلا الرموين لإنشاءهما باستخدام Java uuid ، وما ينبغي إنشاؤه لـ UUID هو قيمة فريدة. طريقة التوليد بسيطة للغاية. أدناه هو الرمز
السلسلة الثابتة العامة getUuid () {return uuid.randomuuid (). toString () ؛ }فيما يلي طريقة تشفير Java MD5 32 بت
السلسلة الثابتة العامة md5encrypt (سلسلة groupparamertstr) يلقي UnduportedEncodingException {messagedigest messagedigest = null ؛ حاول {messagedigest = messagedigest.getInstance ("md5") ؛ messagedigest.reset () ؛ messagedigest.update (groupparamertstr.getbytes ("utf-8")) ؛ } catch (nosuchalgorithmexception e) {system.out.println ("nosuchalgorithmexception acaught!") ؛ System.exit (-1) ؛ } catch (UnsupportedEncodingException e) {E.PrintStackTrace () ؛ } byte [] bytearray = messagedigest.digest () ؛ StringBuffer md5strbuff = new StringBuffer () ؛ لـ (int i = 0 ؛ i <bytearray.length ؛ i ++) {if (integer.toHexString (0xff & bytearray [i]). length () == 1) md5strbuff.append ("0"). آخر md5strbuff.append (integer.toHexString (0xff & bytearray [i])) ؛ } return md5strbuff.toString () ؛ } فيما يلي مقارنة بين نتائج التشفير مع نتائج التشفير التي يمررها طلب المستخدم بعد الحصول على المعلمات على servlet. إذا كان الشيء نفسه يعني أن الطلب على ما يرام ، وإلا فقد تم تعديل قيمة معلمة الطلب
// المعلمات الثلاثة التالية هي رمز المستخدم. والثاني هو المعلمة المطلوبة للتشفير. بعد الاستعلام عن الرمز المميز المشفر من خلال رمز المستخدم ، نحتاج إلى تقسيمه إلى سلسلة JSON المطلوبة لتشفير Servlet. والثالث هو سلسلة نتائج التشفير المرسلة من العميل. هنا ، تُرجع الطريقة 0 للإشارة إلى أنه لا توجد مشكلة في نتيجة تشفير المستخدم ، وإلا يوجد خطأ في int inttokenverify (string token ، jsonobject requestJsonObject ، String Encryptstrvalue) {int returnvalue = 0 ؛ String [] mysqlparameter = new string [] {token} ؛ // ما يلي هو الاستعلام عن رمز تشفير المستخدم من خلال مجموعة الرمز المميز للمستخدم returndata = mysqlHepler.executequery ("SELECT * من infosheet حيث idtoken =؟" ، mysqlparameter) ؛ JSonObject ReturnObject = null ؛ حاول {returnObject = resulttojsontool.resultsettojsonoBject (returnData) ؛ } catch (sqlexception e1) {// todo acto catch block e1.printstacktrace () ؛ } catch (jsonexception e1) {// todo catch catch e1.printstacktrace () ؛ } String byencryptstrvalue = "" ؛ جرب {if (returnoBject.getString ("incrypttoken"). length ()> 2) {// تشير إلى أن idtoken المستخدم موجود ، // returnvaluestring ؛ // {"idtoken": "123456" ، "id": "34" ، "pwd": "23" ، "encrypttoken": "2345678" ، "account": "hang"} /*الكود التالي يتوافق مع سلسلة javamd5 ، لأن المستخدم يتم تشفيره ، لكن المسموح المغطى بالاحتفال ، ولكن لا يمكن تمريرها أثناء الطلب. لذلك ، عندما قمنا بتشفير servlet ، نحتاج إلى الاستعلام عن توك المشفر للمستخدم من خلال رمز المستخدم. بعد العثور على الاستعلام ، نحتاج إلى تقسيمه ونطلب من المعلمة JSON ، بحيث تتوافق السلسلة المشفرة من servlet مع السلسلة المشفرة من قبل المستخدم. فيما يلي طريقة الاستعلام عن الرمز المميز المشفر وربطه في معلمات الطلب بعد الاستعلام عن الرمز المميز المشفر. */ byencryptstrvalue = requestJsonObject.ToString (). JSonObject EncryptTokenJsonObject = New JSonObject () ؛ EncryptTokenJsonObject.put ("incrypttoken" ، returnoBject.getString ("incrypttoken")) ؛ string value1 = encryptTokenJsonObject.ToString (). substring (1 ، encrypttokenjsonoBject.toString (). length ()) ؛ byencryptstrvalue = byencryptstrvalue+"،"+value1 ؛ //} else {returnValue = 1 ؛ // idtoken error}} catch (jsonexception e1) {// todo catch catch e1.printstacktrace () ؛ } جرب {// الطريقة التالية هي استخدام السلسلة الصحيحة لتشفير استدعاء الطريقة على servlet. بعد إرجاع النتيجة ، قارن نتيجة التشفير التي تم تمريرها بواسطة سلسلة المستخدم Javamd5Result = Encryptsafa.md5encrypt (byencryptstrvalue) ؛ if (javamd5result.equals (incryptstrvalue)) {// سلسلة التشفير صحيحة} {returnValue = 2 ؛ // نتيجة التشفير خاطئ}} catch (unsupportedencodingexception e) {// todo todo clock e.printstacktrace () ؛ } إرجاع returnvalue ؛ }الأول هو الطريقة المغلفة التي يطلق عليها Servlet. فيما يلي جميع الرموز التي تسمى صفحة Servlet.
1. عنوان URL المطلوب
هنا أقوم بتمرير قاموس لتحويل معلمة تنسيق JSON ، وهو نموذج زوج القيمة الرئيسية ، ويتم استخدام معلمة واحدة فقط لطلبها. idtoken في المعلمة هي رمز المستخدم ، والقيمة التي أضفها هي 123456 عشوائية في قاعدة البيانات.
إذا لم تستخدم Uuid ، بالطبع ، فلن يكون الأمر كذلك إذا قمت بذلك رسميًا.
http: // localhost: 8080/javaservlettest/2.jsp؟ parameter = {"parameter": "{/ أحرف/"،/" حساب/":/" HAND/"}" ، "MD5STR": "672F4A8C6FB92103C01D4275E46DF790"}
فيما يلي رمز معالجته بواسطة صفحة Servlet. تتمثل العملية بأكملها في التحقق مما إذا كان قد تم تعديل طلب المستخدم أثناء التسليم.
// واجهت مشكلة هنا أمس. عندما طلبت المعلمات مع الصينية ، تم تشويه Servlet بعد الحصول على servlet ، ثم استخدمت الطريقة التالية. requestjsjsonstr = new string (request.getParameter ("parameter"). getBytes ("ISO8859-1") ، "UTF-8") ؛ // إرسال المعلمات jsonobject objectParameter = null ؛ // idtoken jsonobject requestParmeter = null ؛ // idtoken string idtoken = "" ؛ // سلسلة تشفير العميل سلسلة md5str = "" ؛ حاول {// الحصول على سلسلة JSON الكلية. هذا هو في الواقع المعلمة ObjectParameter التي نمررها فقط من url.objectparameter = new JSonObject (requestJsonston) ؛ // إرسال المعلمة ، القيمة الرئيسية لـ JSON ، واطلب البارامتر داخل المعلمة. في الواقع ، تحتوي هذه المعلمة على المعلمات المطلوبة في العمل ، مثل requestParmeter = New JSonObject (ObjectParameter.getString ("parameter")) ؛ // idtoken هذا هو رمز المستخدم ، وهو المعرف الفريد للمستخدم. نحتاج إلى الاستعلام عن الرمز المميز المشفر المقابل في قاعدة البيانات من خلالها للاستعلام عن idtoken = requestParmeter.getString ("idtoken") ؛ // سلسلة تشفير العميل md5str = objectParameter.getString ("md5str") ؛ } catch (jsonexception e1) {// todo acto catch block e1.printstacktrace () ؛ } // السلسلة التي تم إنشاؤها بعد تشفير MD5 // الخطوة التالية هي التحقق مما إذا كان الرمز المميز صحيحًا int tokenverifyResult = encryptsafa.posttokenverify (idtoken ، requestParmeter ، md5str) ؛ if (tokenverifyResult == 0) {out.println ("طريقة التشفير الرمزية صحيحة") ؛ } آخر {out.println ("خطأ في طريقة التشفير أو تشفير طريقة التشفير") ؛ يعود؛ }ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.