Beberapa esai sebelumnya tentang servlet telah memilah proses penggunaan servlet yang sederhana. Artikel berikutnya terutama akan fokus pada antarmuka akses aplikasi seluler, transmisi enkripsi MD5 ----> Verifikasi SMS ---> Push Mobile ---> Berbagi ---> Baidu Cloud Map ----> Pembayaran ... Bisnis Pihak Ketiga ... Karena saya seorang pemula, saya juga belajar dan menulis saat belajar, dan saya berharap memahami kekurangannya.
Artikel hari ini terutama melibatkan enkripsi data transmisi JavaSerVlet, kombinasi parameter permintaan klien, dan akan datang dengan semua masalah yang saya temui di tengah dan solusi.
Karena antarmuka akses ponsel diterbitkan, tidak peduli bahasa apa antarmuka ditulis, kita harus mengambil langkah -langkah keamanan yang sesuai. Jika tidak, setelah orang tahu URL Anda, mencegat permintaan klien dan kemudian memodifikasi parameter pengiriman, yang akan menyebabkan kerugian besar. Antarmuka penulisan servlet yang paling umum digunakan juga harus mengenkripsi data yang ditransmisikan. Jika ditulis dengan WebService .NET WCF dan teknologi lainnya, itu juga akan melibatkan pencocokan sertifikat ...
1. Gagasan untuk enkripsi dan implementasi parameter data yang diminta.
Enkripsi di sini saya menggunakan enkripsi MD5 32-bit. 32-bit adalah enkripsi yang tidak dapat diubah. Dengan cara ini, bahkan jika itu dicegat oleh seorang peretas, tidak ada cara untuk mendekripsi nilai MD5 yang kami terenkripsi menjadi string yang digabungkan ketika kami mengenkripsi. Tentu saja ini tidak mutlak. Tampaknya beberapa pakar komputer telah menguraikan metode enkripsi MD5 dalam beberapa tahun terakhir, tetapi saya pikir teknologi tersebut mungkin tidak diterbitkan sesuka hati, dan bahkan jika diumumkan, itu bukan sesuatu yang dapat dipahami oleh orang biasa. Jika tidak, jika Anda hanya bertanya kepada seorang programmer, apakah Anda masih menggunakan enkripsi MD5? Jawabannya jelas tidak lagi.
1. Pertama -tama, izinkan saya berbicara tentang kombinasi parameter permintaan saya. Karena ini melibatkan enkripsi MD5, kita harus memberi umpan balik kepada pengguna dua token setelah pengguna masuk ke akun menggunakan aplikasi. Token pertama adalah satu -satunya nilai yang menunjukkan identitas pengguna. Token ini perlu ditambahkan ke parameter Antarmuka Permintaan (apakah parameter ini berpartisipasi dalam enkripsi, terserah Anda untuk menentukan apakah itu berpartisipasi dalam enkripsi. Saya berpartisipasi di sini), karena servlet perlu meminta enkripsi pengguna yang diperlukan untuk menanyakan enkripsi pengguna. Token kedua digunakan untuk mengenkripsi nilai MD5. Token ini tidak dapat ditambahkan ke parameter antarmuka permintaan, dan kita harus menyimpan kedua token dalam database, karena setelah pengguna meminta antarmuka, Servlet perlu mendapatkan token pengguna dalam parameter dan kemudian menanyakan token yang diperlukan untuk enkripsi MD5 dalam database. Kemudian servlet kemudian menambahkan token terenkripsi dari kueri ke string yang dilewati oleh pengguna, dan melakukan enkripsi MD5 lagi. Setelah enkripsi, bandingkan nilai terenkripsi MD5 yang dienkripsi oleh pengguna. Apakah itu sama dengan nilai servlet terenkripsi. Jika berbeda, maka mungkin ada dua alasan. Kombinasi string enkripsi di sisi servlet salah, dan pengguna telah dicegat dan dimodifikasi di tengah transmisi data. Saya menggunakan kedua token untuk menghasilkannya menggunakan java uuid, dan apa yang harus dihasilkan untuk uuid adalah nilai yang unik. Metode generasi sangat sederhana. Di bawah ini adalah kodenya
string statis publik getuuid () {return uuid.randomuuid (). tostring (); }Di bawah ini adalah metode enkripsi Java MD5 32-bit
string statis publik md5encrypt (string groupparamertstr) melempar unsportedencodingException {messageScageTest messageScageScest = null; Coba {MessageDigest = MessageDigest.getInstance ("md5"); MessageDigest.reset (); MessageDigest.update (grouparamertstr.getbytes ("UTF-8")); } catch (nosuchalgorithmException e) {System.out.println ("NosuchalgorithMException tertangkap!"); System.exit (-1); } catch (UnsupportedEncodingException e) {e.printstacktrace (); } byte [] byteArray = messageDigest.digest (); StringBuffer md5strbuff = stringBuffer baru (); untuk (int i = 0; i <bytearray.length; i ++) {if (integer.toHexString (0xff & bytearray [i]). length () == 1) md5strbuff.append ("0"). append (integer.thtehexstring (0xff & bytearray (i) (integer.toHexstring (0xff & bytearray [i); lain md5strbuff.append (integer.tohexstring (0xff & bytearray [i])); } return md5strbuff.toString (); } Berikut ini adalah perbandingan hasil enkripsi dengan hasil enkripsi yang disahkan oleh permintaan pengguna setelah mendapatkan parameter pada servlet. Jika hal yang sama berarti bahwa permintaannya baik -baik saja, jika tidak, nilai parameter permintaan mungkin telah dimodifikasi
// Tiga parameter berikut adalah token pengguna. Yang kedua adalah parameter yang diperlukan untuk enkripsi. Setelah kami menanyakan token terenkripsi melalui token pengguna, kami perlu menyambungkannya ke dalam string JSON yang diperlukan untuk enkripsi servlet. Yang ketiga adalah string hasil enkripsi yang dikirim dari klien. Di sini, metode ini mengembalikan 0 untuk menunjukkan bahwa tidak ada masalah dengan hasil enkripsi pengguna, jika tidak ada kesalahan public static intttokenverify (string token, jsonObject requestJsonObject, string encryptStrValue) {int returnValue = 0; String [] mysqlparameter = string baru [] {token}; // Berikut ini adalah menanyakan token enkripsi pengguna melalui token pengguna hasil returnData = mysqlhepler.executeQuery ("Pilih * dari Infosheet di mana idToken =?", Mysqlparameter); JSONObject returnObject = null; coba {returnObject = resulttoJsontool.resultsettojsonObject (returnData); } catch (sqlexception e1) {// todo auto-generated catch block e1.printstacktrace (); } catch (JSonexception E1) {// TODO AUTO-ENCEALATED Catch Block E1.PrintStackTrace (); } String byencryptStrValue = ""; coba {if (returnObject.getString ("encryptToken"). length ()> 2) {// menunjukkan bahwa iDtoken pengguna ada, // return returnValueString; // {"idToken": "123456", "id": "34", "pwd": "23", "EncryptToken": "2345678", "Account": "Hang"} /*Kode yang diungkapkan untuk diulangi, karena ada yang diulangi, karena ada yang diulangi, karena ada yang diulangi, karena ada yang diulangi, karena ada yang diulangi, karena ada yang diulangi, karena ada yang diulangi, karena seorang pengguna yang diulang, karena seorang pengguna yang diulang, karena seorang pengguna, karena ada yang diulang, karena seorang pengguna yang diulang, karena seorang pengguna, karena ada yang diulang, disahkan selama permintaan. Oleh karena itu, ketika kami mengenkripsi servlet, kami perlu meminta token yang dienkripsi pengguna melalui token pengguna. Setelah kueri ditemukan, kita perlu menyambungkannya dan meminta parameter JSON, sehingga string yang dienkripsi dari servlet konsisten dengan string yang dienkripsi oleh pengguna. Berikut ini adalah metode untuk menanyakan token terenkripsi dan menyambungkannya ke dalam parameter permintaan setelah meminta token terenkripsi. */ byencryptStrValue = requestJSonObject.toString (). Substring (0, requestJSonObject.toString (). Length ()-1); Jsonobject encrypttokenjsonobject = new jsonobject (); encrypttokenjsonobject.put ("encryptToken", returnObject.getString ("encryptToken")); String value1 = encryptTokenJSonObject.toString (). Substring (1, encryptTokenJsonObject.toString (). Length ()); byencryptStrValue = byencryptStrValue+","+value1; //} else {returnValue = 1; // IDToken error}} catch (JSonexception E1) {// TODO AUTO-ENTO-GOYATED Catch Block E1.PrintStackTrace (); } coba {// Metode berikut adalah menggunakan string yang benar untuk mengenkripsi panggilan metode pada servlet. Setelah mengembalikan hasil, bandingkan hasil enkripsi yang dilewati oleh string pengguna javamd5Result = encryptsafa.md5encrypt (byencryptStrValue); if (javamd5result.equals (encryptStrValue)) {// String enkripsi benar} else {returnValue = 2; // Hasil enkripsi salah}} tangkap (unsupportedEncodingException e) {// TODO Auto-generated catch block E.PrintScacktrace (); } return returnValue; }Yang pertama adalah metode yang dienkapsulasi yang dipanggil oleh servlet. Di bawah ini adalah semua kode yang disebut oleh halaman Servlet.
1. URL yang diminta
Di sini saya melewati kamus untuk mengonversi parameter format JSON, yang merupakan bentuk pasangan nilai kunci, dan hanya satu parameter yang digunakan untuk memintanya. Idtoken dalam parameter adalah token pengguna, dan nilai yang saya tambahkan adalah 123456 acak dalam database.
Jika Anda tidak menggunakan UUID, tentu saja, itu pasti tidak akan terjadi jika Anda melakukannya secara formal.
http: // localhost: 8080/javaservertest/2.jsp? parameter = {"parameter": "{/" idToken/":/" 123456/",/" pwd/":/" Cina karakter/",/" akun/":/" hang/"}", "md5str": "672f4a8c6fb92103c01d4275e46df790"}
Berikut ini adalah kode yang diproses oleh halaman Servlet. Seluruh proses adalah untuk memverifikasi apakah permintaan pengguna telah dimodifikasi selama pengiriman.
// Saya mengalami masalah di sini kemarin. Ketika saya meminta parameter dengan Cina, servlet itu kacau setelah mendapatkan servlet, dan kemudian saya menggunakan metode berikut. String requestJsonstr = new string (request.getParameter ("parameter"). GetBytes ("iso8859-1"), "UTF-8"); // Kirim parameter jsonObject objectParameter = null; // iDtoken JSONOBJECT REVINGPARMETER = NULL; // IDToken string idToken = ""; // string enkripsi klien string md5str = ""; Coba {// Dapatkan string JSON total. Ini sebenarnya adalah parameter ObjectParameter yang hanya kami lewati dari URL.ObjectParameter = new jsonObject (requestJsonstr); // Kirimkan parameter, nilai kunci JSON, dan minta paramter di dalam parameter. Bahkan, parameter ini berisi parameter yang diperlukan dalam bisnis, seperti requestParmeter = new jsonObject (objectParameter.getString ("parameter")); // Idtoken Ini adalah token pengguna, yang merupakan pengidentifikasi unik pengguna. Kita perlu menanyakan token terenkripsi yang sesuai dalam database melalui itu untuk menanyakan idtoken = requestParmeter.getString ("idToken"); // string enkripsi klien md5str = objectParameter.getString ("md5str"); } catch (JSonexception E1) {// TODO AUTO-ENCEALATED Catch Block E1.PrintStackTrace (); } // String yang dihasilkan setelah enkripsi MD5 // Langkah selanjutnya adalah memverifikasi apakah token benar intkenverififyResult = encryptsafa.posttokenverify (idToken, requestParmeter, md5str); if (tokenverifyResult == 0) {out.println ("Metode enkripsi token benar"); } else {out.println ("Token Terenkripsi atau Kesalahan Metode Enkripsi"); kembali; }Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.