Die vorherigen Aufsätze über Servlets haben den einfachen Nutzungsprozess von Servlets ausgelehrt. Der nächste Artikel konzentriert sich hauptsächlich auf die mobile App Access-Schnittstelle, MD5-Verschlüsselungsübertragung.
Der heutige Artikel beinhaltet hauptsächlich die Verschlüsselung von JavaServlet -Übertragungsdaten, die Kombination von Client -Anforderungsparametern und wird mit allen Problemen geliefert, die ich in der Mitte und den Lösungen auftritt.
Da die Schnittstelle zwischen Mobiltelefonzugriff veröffentlicht wird, sollten wir entsprechende Sicherheitsmaßnahmen ergreifen. Nachdem die Leute Ihre URL kennen, fangen Sie die Anfrage des Kunden ab und ändern Sie dann die Einreichungsparameter, die zu großen Verlusten führen. Die am häufigsten verwendete Servlet -Schreibschnittstelle sollte auch die übertragenen Daten verschlüsseln. Wenn es mit WebService .NET WCF und anderen Technologien geschrieben ist, wird auch Zertifikatanpassungen beteiligt ...
1. Ideen zur Verschlüsselung und Implementierung angeforderter Datenparameter.
Verschlüsselung Hier verwende ich MD5 32-Bit-Verschlüsselung. 32-Bit ist eine irreversible Verschlüsselung. Auf diese Weise gibt es, selbst wenn es von einem Hacker abgefangen wird, keine Möglichkeit, den MD5 -Wert zu entschlüsseln, den wir in einer Zeichenfolge verschlüsselt haben, wenn wir verschlüsseln. Das ist natürlich nicht absolut. Es scheint, dass einige Computerexperten in den letzten Jahren die Verschlüsselungsmethode von MD5 entschlüsselt haben, aber ich denke, dass die Technologie nach Belieben möglicherweise nicht veröffentlicht wird, und selbst wenn dies angekündigt wird, können gewöhnliche Menschen nicht verstehen. Andernfalls verwenden Sie, wenn Sie nur einen Programmierer fragen, immer noch die MD5 -Verschlüsselung? Die Antwort ist definitiv nicht mehr.
1. Lassen Sie mich zunächst über die Kombination meiner Anfrageparameter sprechen. Da dies die MD5 -Verschlüsselung beinhaltet, müssen wir den Benutzer zwei Token feedback, nachdem sich der Benutzer mit der App beim Konto an das Konto angemeldet hat. Das erste Token ist der einzige Wert, der die Identität des Benutzers angibt. Dieser Token muss zum Parameter der Anforderungsschnittstelle hinzugefügt werden (ob dieser Parameter an der Verschlüsselung teilnimmt. Es liegt an Ihnen, festzustellen, ob er an der Verschlüsselung teilnimmt. Ich habe hier teilgenommen), da das Servlet die Verschlüsselung des Benutzers abfragen muss, um die Verschlüsselung des Benutzers abzufragen. Der zweite Token wird verwendet, um den Wert von MD5 zu verschlüsseln. Dieses Token kann nicht zu den Parametern der Anforderungsschnittstelle hinzugefügt werden, und wir müssen beide Token in der Datenbank speichern, da nach dem Benutzer die Schnittstelle das Benutzern des Benutzers in den Parametern abrufen und dann das für die MD5 -Verschlüsselung erforderliche Token in der Datenbank abfragen muss. Dann fügt das Servlet die verschlüsselten Token aus der Abfrage zum vom Benutzer übergebenen String hinzu und führt erneut eine MD5 -Verschlüsselung durch. Vergleichen Sie nach der Verschlüsselung den vom Benutzer verschlüsselten verschlüsselten Wert von MD5. Ob es dem verschlüsselten Wert von Servlet gleich ist. Wenn es anders ist, kann es zwei Gründe geben. Die Kombination auf der Verschlüsselungszeichenfolge auf der Servlet -Seite ist falsch, und der Benutzer hat in der Mitte der Datenübertragung abgefangen und geändert. Ich habe beide Token verwendet, um sie mit Java Uuid zu erzeugen, und was für UUID generiert werden sollte, ist ein einzigartiger Wert. Die Generierungsmethode ist sehr einfach. Unten ist der Code
public static String getuUid () {return uUid.randomuuid (). toString (); }Unten finden Sie die Java MD5 32-Bit-Verschlüsselungsmethode
public static String md5Encrypt (String groupparamerTstr) wirft nicht unterstütztescodingException {MessagedIGest MessagedIGest = null; try {MessagedIGest = MessagedIGest.getInstance ("md5"); MessagedIGest.Reset (); MessagedIGest.Update (GroupparamerTstr.GetBytes ("UTF-8")); } catch (nosuchalgorithmException e) {System.out.println ("NoSuchalgorithmException gefangen!"); System.exit (-1); } catch (unportedenCodingException e) {e.printstacktrace (); } byte [] bytearray = MessagedIGest.Digest (); StringBuffer md5strbuff = new StringBuffer (); für (int i = 0; i <bytearray.length; i ++) {if (integer.tohexString (0xff & bytearray [i]). Länge () == 1) md5strbuff.Append ("0"). Append (Integer.ToHexString (0xff & bytearray)); sonst md5strbuff.Append (Integer.tohexString (0xff & bytearray [i])); } return md5strbuff.toString (); } Das Folgende ist ein Vergleich der Verschlüsselungsergebnisse mit den von der Benutzeranforderung übergebenen Verschlüsselungsergebnissen, nachdem die Parameter im Servlet erhalten wurden. Wenn dieselbe bedeutet, dass die Anforderung in Ordnung ist, kann der Anforderungsparameterwert möglicherweise geändert worden sein
// Die folgenden drei Parameter sind das Benutzer -Token. Der zweite ist der für die Verschlüsselung erforderliche Parameter. Nachdem wir das verschlüsselte Token durch das Benutzer -Token abfragen, müssen wir es in die für die Servlet -Verschlüsselung erforderliche JSON -Zeichenfolge spleifen. Der dritte ist die vom Client gesendete Verschlüsselungsergebniszeichenfolge. Hier gibt die Methode 0 zurück, um anzuzeigen, dass es kein Problem mit dem Verschlüsselungsergebnis des Benutzers gibt. Andernfalls gibt es einen Fehler. String [] mysqlParameter = new String [] {Token}; // Im Folgenden wird das Verschlüsselungstoken des Benutzers über das User Token Ergebnis returnData = mysqlHepler.executeQuery ("aus InfoSheet Where idToken =?", MySQLParameter) abfragen. JsonObject returnObject = null; try {returnObject = resultTojsontool.ResultsettojsonObject (returnData); } catch (SQLEXception E1) {// Todo automatisch generierter Fangblock e1.printstacktrace (); } catch (jSonexception e1) {// Todo automatisch generatter Block e1.printstacktrace (); } String bycryptStrValue = ""; try {if (returnObject.getString ("Encryptoken"). Länge ()> 2) {// Gib an, dass das IDToken des Benutzers existiert, // return returnValuestring; // {"idtoken": "123456", "id": "34", "pwd": "23", "Encryptoken": "2345678", "Account": "Hang"} /*Der folgende Code stimmt mit dem Javamd5 -Enkryptionsstring überein, weil der Benutzer, das verschlüsselt wurde, mit dem Encryeded, dem Encrypted, mit dem Encryeded -tocypt -token -String, der mit dem Encryed -tocyted und dem Encryed -token -zu -token -String, der zugeschlüsselt wurde. Token kann während der Anfrage nicht verabschiedet werden. Wenn wir das Servlet verschlüsselt haben, müssen wir daher den verschlüsselten Toke des Benutzers durch das Token des Benutzers abfragen. Nachdem die Abfrage gefunden wurde, müssen wir sie gespleißt und den Parameter JSON anfordern, damit die verschlüsselte Zeichenfolge des Servlets mit der vom Benutzer verschlüsslosen Zeichenfolge übereinstimmt. Das Folgende ist die Methode, um das verschlüsselte Token abzufragen und es nach Abfragen des verschlüsselten Tokens in die Anforderungsparameter zu spleißen. */ bycryptStrValue = RequestJsonObject.toString (). Substring (0, RequestJsonObject.toString (). Länge ()-1); JSONObject EncryptokenjsonObject = new JsonObject (); EncryptTokenJsonObject.put ("EncryptToken", returnObject.getString ("EncryptToken")); String value1 = EncryptTokenJsonObject.toString (). Substring (1, EncryptTokenJsonObject.toString (). Länge ()); byencryptStrValue = bycryptStrValue+","+value1; //} else {returnValue = 1; // idToken error}} catch (jSonexception e1) {// Todo auto-generiertes Catch-Block e1.printstacktrace (); } try {// Die folgende Methode besteht darin, die richtige Zeichenfolge zu verwenden, um den Methodenaufruf im Servlet zu verschlüsseln. Vergleichen Sie nach Rückgabe eines Ergebniss das von der Benutzerzeichenfolge Javamd5Result = Encryptsafa.md5encrypt (bycryptstrvalue) übergebene Verschlüsselungsergebnis. if (javamd5Result.equals (EncryptStrValue)) {// Die Verschlüsselungszeichenfolge ist korrekt} else {returnValue = 2; // Das Verschlüsselungsergebnis ist falsch}} catch (UnsupportedenCodingException e) {// Todo Auto-Generated Catch block e.printStacktrace (); } return returnValue; }Die erste ist die eingekapselte Methode, die vom Servlet aufgerufen wird. Im Folgenden finden Sie alle Codes, die von der Servlet -Seite aufgerufen werden.
1. Die angeforderte URL
Hier bestehe ich ein Wörterbuch, um den Parameter JSON-Format zu konvertieren, bei dem es sich um ein Schlüssel-Wert-Paar handelt, und nur ein Parameter wird zum Anfordern verwendet. Das IdToken im Parameter ist das Benutzer -Token, und der Wert, den ich hinzufügt, ist ein zufälliger 123456 in der Datenbank.
Wenn Sie UUID nicht verwenden, wird dies natürlich nicht der Fall sein, wenn Sie es formell tun.
http: // localhost: 8080/javaervlettest/2.jsp? parameter = {"parameter": "{/" idtoken/":/" 123456/",/" pwd/":/" chinesisch Zeichen/",/" Konto/":/" Hang/"}", "Md5str": "672F4A8C6FB92103C01D4275E46DF790"}
Das Folgende ist der Code, der von der Servlet -Seite verarbeitet wird. Der gesamte Vorgang besteht darin, zu überprüfen, ob die Benutzeranforderung während der Zustellung geändert wurde.
// Ich habe gestern hier auf ein Problem gestoßen. Als ich die Parameter mit Chinesen anforderte, war das Servlet nach dem Erhalten des Servlets verstümmelt, und dann verwendete ich die folgende Methode. String requestJSONSON = new String (Request.GetParameter ("Parameter"). GetByTes ("ISO8859-1"), "UTF-8"); // Parameter reichen jsonObject ObjectParameter = null; // idtoken jsonObject requestParmeter = null; // idToken String idToken = ""; // Client -Verschlüsselungsstring String md5str = ""; Versuchen Sie {// Die gesamte JSON -Zeichenfolge erhalten. Dies ist eigentlich der Parameter ObjectParameter, den wir nur aus dem url.objectParameter = new JSONObject (RequestJSONS) übergeben. // Senden Sie den Parameter, einen Schlüsselwert von JSON, und fordern Sie den Parameter im Parameter an. Tatsächlich enthält dieser Parameter die erforderlichen Parameter im Geschäft, z. // idtoken Dies ist das Benutzer -Token, das die eindeutige Bezeichnung des Benutzers ist. Wir müssen das entsprechende verschlüsselte Token in der Datenbank abfragen, um die IDToken = RequestParmeter.getString ("idToken") abzufragen. // Die Client -Verschlüsselungszeichenfolge md5str = ObjectParameter.getString ("md5str"); } catch (jSonexception e1) {// Todo automatisch generatter Block e1.printstacktrace (); } // Die nach der MD5 -Verschlüsselung erzeugte Zeichenfolge // Im nächsten Schritt wird überprüfen, ob das Token korrekt ist. if (tokenVerifyResult == 0) {out.println ("Token -Verschlüsselungsmethode ist korrekt"); } else {out.println ("verschlüsselter Token oder Verschlüsselungsmethodenfehler"); zurückkehren; }Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.