Les quelques essais précédents sur les servlets ont trié le processus d'utilisation simple des servlets. Le prochain article se concentrera principalement sur l'interface d'accès à l'application mobile, la transmission de cryptage MD5 ----> Vérification SMS ---> Mobile Push ---> Partage ---> Baidu Cloud Map ----> Paiement ... Business tiers ... Depuis que je suis un novice, j'apprends et j'écris également en apprenant, et j'espère comprendre les lacunes.
L'article d'aujourd'hui implique principalement le chiffrement des données de transmission Javaservlet, la combinaison des paramètres de demande du client, et s'accompagnera de tous les problèmes que j'ai rencontrés au milieu et des solutions.
Étant donné que l'interface d'accès au téléphone mobile est publiée, quelle que soit la langue que l'interface est écrite, nous devons prendre des mesures de sécurité correspondantes. Sinon, après que les gens connaissent votre URL, interceptez la demande du client, puis modifient les paramètres de soumission, ce qui entraînera de grandes pertes. L'interface d'écriture de servlet la plus couramment utilisée devrait également crypter les données transmises. S'il est écrit avec le service .NET WCF et autres technologies, cela impliquera également un match de certificat ...
1. Idées de chiffrement et de mise en œuvre des paramètres de données demandés.
Encryption Ici, j'utilise le cryptage MD5 32 bits. 32 bits est un chiffrement irréversible. De cette façon, même s'il est intercepté par un pirate, il n'y a aucun moyen de déchiffrer la valeur MD5 que nous avons cryptée dans une chaîne combinée lorsque nous cryptons. Bien sûr, ce n'est pas absolu. Il semble que certains experts en informatique aient déchiffré la méthode de cryptage de MD5 au cours des dernières années, mais je pense que la technologie peut ne pas être publiée à volonté, et même si elle est annoncée, ce n'est pas quelque chose que les gens ordinaires peuvent comprendre. Sinon, si vous demandez simplement à un programmeur, utilisez-vous toujours le cryptage MD5? La réponse n'est certainement plus.
1. Tout d'abord, permettez-moi de parler de la combinaison de mes paramètres de demande. Étant donné que cela implique le cryptage MD5, nous devons faire comment les deux jetons de l'utilisateur après les deux jetons après que l'utilisateur se soit connecté au compte à l'aide de l'application. Le premier jeton est la seule valeur indiquant l'identité de l'utilisateur. Ce jeton doit être ajouté au paramètre d'interface de demande (si ce paramètre participe au chiffrement, c'est à vous de déterminer s'il participe au chiffrement. J'ai participé ici), car le servlet doit interroger le chiffrement de l'utilisateur requis pour interroger le cryptage de l'utilisateur. Le deuxième jeton est utilisé pour crypter la valeur de MD5. Ce jeton ne peut pas être ajouté aux paramètres de l'interface de demande, et nous devons enregistrer les deux jetons dans la base de données, car une fois que l'utilisateur demande l'interface, le servlet doit obtenir le jeton utilisateur dans les paramètres, puis interroger le jeton requis pour le cryptage MD5 dans la base de données. Ensuite, le servlet ajoute ensuite les jetons cryptés de la requête à la chaîne passée par l'utilisateur et réactive à nouveau un cryptage MD5. Après le cryptage, comparez la valeur cryptée de MD5 cryptée par l'utilisateur. Que ce soit la même chose que la valeur cryptée du servlet. Si c'est différent, il peut y avoir deux raisons. La combinaison de chaînes de chiffrement du côté servlet est incorrecte, et l'utilisateur a intercepté et modifié au milieu de la transmission des données. J'ai utilisé les deux jetons pour les générer à l'aide de Java UUID, et ce qui devrait être généré pour UUID est une valeur unique. La méthode de génération est très simple. Ci-dessous est le code
Public Static String getUUID () {return uUid.randomuuid (). toString (); }Vous trouverez ci-dessous la méthode de cryptage Java MD5 32 bits
La chaîne statique publique MD5EnCrypt (String GroupparaMertSt) lève UnsupportEdenCoDingException {MessagediGest MessagediGest = NULL; essayez {messagediGest = messagediGest.getInstance ("md5"); messagediGest.reset (); MessagediGest.Update (GroupparaMertstrttr.getBytes ("UTF-8")); } catch (NosuchalgorithMexception e) {System.out.println ("NosuchalgorithMexception capturé!"); System.exit (-1); } catch (UnportEnCcodingException e) {e.printStackTrace (); } byte [] bytearray = MessagediGest.digest (); StringBuffer md5strbuff = new StringBuffer (); pour (int i = 0; i <bytearray.length; i ++) {if (Integer.tohexString (0xff & bytearray [i]). length () == 1) md5strbuff.append ("0"). APPEND (INGER.TOHEXSTRING (0XFF & bytearray [i])); else md5strbuff.append (Integer.tohexString (0xff & bytearray [i])); } return md5strbuff.toString (); } Ce qui suit est une comparaison des résultats de cryptage avec les résultats de chiffrement réalisés par la demande de l'utilisateur après avoir obtenu les paramètres sur le servlet. Si le même signifie que la demande est bien, sinon la valeur du paramètre de demande peut avoir été modifiée
// Les trois paramètres suivants sont le jeton utilisateur. Le second est le paramètre requis pour le cryptage. Après avoir interrogé le jeton crypté via le jeton utilisateur, nous devons le faire pivoter dans la chaîne JSON requise pour le cryptage des servlet. Le troisième est la chaîne de résultats de chiffrement envoyée par le client. Ici, la méthode renvoie 0 pour indiquer qu'il n'y a pas de problème avec le résultat de chiffrement de l'utilisateur, sinon il existe une erreur publique static int posttokenverify (token de chaîne, jsonObject requestjsonObject, String EncryptstrValue) {int returnValue = 0; String [] mysqlParameter = new String [] {token}; // Ce qui suit consiste à interroger le jeton de cryptage de l'utilisateur via le token de l'utilisateur ResultSet RetourData = mysqlhepler.executequery ("select * from InfoSheet Where idToken =?", Mysqlparamètre); JSONObject returnObject = null; try {returnObject = resultTojSontool.resultSetTojsonObject (returnData); } catch (sqlexception e1) {// TODO Block de catch généré automatiquement e1.printStackTrace (); } Catch (JSonexception E1) {// TODO Générations Auto-Generated Block E1.printStackTrace (); } Chaîne byencryptstrvalue = ""; essayez {if (returnObject.getString ("EncryptToken"). Length ()> 2) {// indique que l'idToken de l'utilisateur existe, // return returnValueString; // {"idtoken": "123456", "id": "34", "pwd": "23", "Encrypttoken": "2345678", "compte": "Hang"} / * Le code suivant correspond à la chaîne d'encrypulation Javamd5, car lorsque l'utilisateur est encrypted, un toalen encrypted est ajouté à la chaîne Encrypted, en crypte, en crypte Le jeton ne peut pas être passé pendant la demande. Par conséquent, lorsque nous avons crypté le servlet, nous devons interroger le toke crypté de l'utilisateur via le jeton de l'utilisateur. Une fois la requête trouvée, nous devons l'épisser et demander le paramètre JSON, de sorte que la chaîne cryptée du servlet est cohérente avec la chaîne cryptée par l'utilisateur. Ce qui suit est la méthode pour interroger le jeton crypté et l'épisser dans les paramètres de demande après interroger le jeton crypté. notre 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 Generated Catch Block E1.printStackTrace (); } Essayez {// La méthode suivante consiste à utiliser la chaîne correcte pour crypter l'appel de méthode sur le servlet. Après renvoyer un résultat, comparez le résultat de chiffrement passé par la chaîne utilisateur javamd5result = Encryptsafa.md5encrypt (byencryptstrvalue); if (javamd5result.equals (EncryptStrvalue)) {// La chaîne de chiffrement est correcte} else {returnValue = 2; // Le résultat de cryptage est mauvais}} catch (UnprintStStStackTrace e); } return returnValue; }Le premier est la méthode encapsulée appelée par le servlet. Vous trouverez ci-dessous tous les codes appelés par la page servlet.
1. L'URL demandée
Ici, je passe un dictionnaire pour convertir le paramètre de format JSON, qui est un formulaire de paire de valeurs clés, et un seul paramètre est utilisé pour le demander. L'idToken dans le paramètre est le jeton utilisateur, et la valeur que j'ajoute est un 123456 aléatoire dans la base de données.
Si vous n'utilisez pas UUID, bien sûr, ce ne sera certainement pas le cas si vous le faites officiellement.
http: // localhost: 8080 / javaservlettest / 2.jsp? Paramètre = {"Paramètre": "{/" idtoken / ": /" 123456 / ", /" pwd / ": /" chinois Caractères / ", /" Compte / ": /" hang / "}", "md5str": "672f4a8c6fb92103c01d4275e46df790"}
Ce qui suit est le code traité par la page servlet. L'ensemble du processus est de vérifier si la demande de l'utilisateur a été modifiée pendant la livraison.
// J'ai rencontré un problème ici hier. Lorsque j'ai demandé les paramètres avec le chinois, le servlet a été brouillé après avoir obtenu le servlet, puis j'ai utilisé la méthode suivante. String requestjSontr = new String (request.getParameter ("Paramètre"). GetBytes ("ISO8859-1"), "UTF-8"); // Soumettre les paramètres jsonObject ObjectParAmètre = null; // idToken jSonObject requestParmeter = null; // IdToken String idToken = ""; // chaîne de chaîne de cryption client md5str = ""; Essayez {// Obtenez la chaîne JSON totale. Il s'agit en fait du paramètre objectParamètre que nous ne faisons que de l'URL.ObjectParameter = new JSONObject (requestjSontr); // Soumettez le paramètre, une valeur clé de JSON et demandez le paramètre dans le paramètre. En fait, ce paramètre contient les paramètres requis dans l'entreprise, tels que requestParmeter = new JSONObject (ObjectAramètre.GetString ("paramètre")); // idToken Il s'agit du jeton d'utilisateur, qui est l'identifiant unique de l'utilisateur. Nous devons interroger le jeton crypté correspondant dans la base de données via lui pour interroger idToken = requestParmeter.getString ("idToken"); // La chaîne de chiffrement du client md5str = objectParameter.getString ("md5str"); } Catch (JSonexception E1) {// TODO Générations Auto-Generated Block E1.printStackTrace (); } // La chaîne générée après MD5 Encryption // L'étape suivante consiste à vérifier si le jeton est correct int tokenverifyResult = Encryptsafa.postTokenverify (idToken, requestParmeter, md5str); if (tokenverifyResult == 0) {out.println ("La méthode de cryptage de token est correcte"); } else {out.println ("Erreur de méthode de jeton ou de cryptage chiffré chiffré"); retour; }Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.