Los anteriores ensayos sobre servlets han resuelto el proceso de uso simple de los servlets. El próximo artículo se centrará principalmente en la interfaz de acceso a la aplicación móvil, la transmisión de cifrado MD5 ----> Verificación de SMS ---> Push móvil ---> Compartir ---> Baidu Cloud Map ----> Pago ... Negocio de terceros ... Dado que soy un novato, también aprendo y escribo mientras aprendí, y espero entender las deficiencias.
El artículo de hoy implica principalmente el cifrado de datos de transmisión de Javaservlet, la combinación de parámetros de solicitud del cliente y vendrá con todos los problemas que encontré en el medio y las soluciones.
Dado que se publica la interfaz de acceso al teléfono móvil, sin importar el idioma que esté escrita la interfaz, debemos tomar las medidas de seguridad correspondientes. De lo contrario, después de que las personas conocen su URL, intercepte la solicitud del cliente y luego modifique los parámetros de envío, lo que causará grandes pérdidas. La interfaz de escritura Servlet más utilizada también debe cifrar los datos transmitidos. Si está escrito con WebService .NET WCF y otras tecnologías, también implicará la coincidencia de certificados ...
1. Ideas para el cifrado e implementación de parámetros de datos solicitados.
Cifrado aquí uso el cifrado MD5 de 32 bits. 32 bits es un cifrado irreversible. De esta manera, incluso si es interceptado por un hacker, no hay forma de descifrar el valor MD5 que encriptamos en una cadena combinada cuando cifremos. Por supuesto que esto no es absoluto. Parece que algunos expertos en computadoras han descifrado el método de cifrado de MD5 en los últimos años, pero creo que la tecnología puede no ser publicada a voluntad a voluntad, e incluso si se anuncia, no es algo que la gente común pueda entender. De lo contrario, si solo le pregunta a un programador, ¿todavía está usando el cifrado MD5? La respuesta definitivamente ya no es.
1. En primer lugar, permítanme hablar sobre la combinación de mis parámetros de solicitud. Debido a que esto implica el cifrado MD5, debemos retroceder al usuario dos tokens después de que el usuario inicie sesión en la cuenta utilizando la aplicación. El primer token es el único valor que indica la identidad del usuario. Este token debe agregarse al parámetro de la interfaz de solicitud (si este parámetro participa en el cifrado, depende de usted determinar si participa en el cifrado. Participé aquí), porque el servlet necesita consultar el cifrado del usuario requerido para consultar el cifrado del usuario. El segundo token se usa para cifrar el valor de MD5. Este token no se puede agregar a los parámetros de la interfaz de solicitud, y debemos guardar ambos tokens en la base de datos, porque después de que el usuario solicita la interfaz, Servlet debe obtener el token de usuario en los parámetros y luego consultar el token requerido para el cifrado MD5 en la base de datos. Luego, el servlet agrega los tokens cifrados de la consulta a la cadena pasada por el usuario, y realiza un cifrado MD5 nuevamente. Después del cifrado, compare el valor cifrado de MD5 encriptado por el usuario. Si es lo mismo que el valor cifrado de servlet. Si es diferente, entonces puede haber dos razones. La combinación de cadenas de cifrado en el lado del servlet es incorrecta y el usuario ha interceptado y modificado en el medio de la transmisión de datos. Usé ambos tokens para generarlos usando Java UUID, y lo que debe generarse para UUID es un valor único. El método de generación es muy simple. A continuación se muestra el código
public static string getuuid () {return uuid.randomuuid (). toString (); }A continuación se muestra el método de cifrado Java MD5 de 32 bits
public Static String md5Encrypt (String GroupparamertStr) lanza no compatible encodingException {MessageDigest MessageGest = null; intente {MessageDigest = MessageGest.GetInstance ("MD5"); MessageDigest.reset (); MessageDigest.Update (GroupparamertStr.getBytes ("UTF-8")); } Catch (nosuchalgorithmexception e) {system.out.println ("nosuchalgorithmexception atrapado!"); System.exit (-1); } catch (UnsupportedEncodingException e) {E.PrintStackTrace (); } byte [] byteArray = MessageDigest.digest (); StringBuffer md5Strbuff = new StringBuffer (); for (int i = 0; i <byteArray.length; i ++) {if (integer.toHexString (0xff & bytearray [i]). longitud () == 1) md5strbuff.append ("0"). append (integer.toHexString (0xff & byteTearry [i])); else md5strbuff.append (integer.tohexstring (0xff & bytearray [i])); } return md5Strbuff.ToString (); } La siguiente es una comparación de los resultados de cifrado con los resultados de cifrado aprobados por la solicitud del usuario después de obtener los parámetros en el servlet. Si lo mismo significa que la solicitud está bien, de lo contrario el valor del parámetro de solicitud puede haberse modificado
// Los siguientes tres parámetros son el token de usuario. El segundo es el parámetro requerido para el cifrado. Después de consultar el token encriptado a través del token de usuario, necesitamos empalmarlo en la cadena JSON requerida para el cifrado de servlet. El tercero es la cadena de resultado de cifrado enviada desde el cliente. Aquí, el método devuelve 0 para indicar que no hay ningún problema con el resultado de cifrado del usuario, de lo contrario hay un error público static int postTokenverify (string token, jsonObject requestJSonObject, String CiCryPtStValue) {int retornvalue = 0; String [] mysqlParameter = new String [] {token}; // lo siguiente es consultar el token de cifrado del usuario a través del token del usuario resultset returndata = mySqlHePler.ExecuteQuery ("Seleccione * de Infosheet donde idtoken =?", MySQLParameter); JsonObject returnObject = null; intente {returnObject = resultToJSonTool.ResultSetTOJsonObject (returnData); } Catch (SQLException e1) {// TODO Auto Generado Bloque E1.PrintStackTrace (); } Catch (JSOnException e1) {// TODO Auto Generado Bloque E1.PrintStackTrace (); } String byEnnptStrvalue = ""; Pruebe {if (returnObject.getString ("CiCryptToken"). Longitud ()> 2) {// indica que el IdToken del usuario existe, // returnValuString; // {"idtoken": "123456", "id": "34", "pwd": "23", "encrypttoken": "2345678", "cuenta": "hang"} /*El siguiente código coincide con la cadena de cifrado javaMd5, porque cuando el usuario está encriptado, una token en encriptada se agrega a la cadena encryada, pero la cadena, pero la cadena de encryada, la cadena, la cadena, la cadena, pero la cadena, la cadena, la cadena, la cadena, la cadena, la cadena, pero se agrega la cadena de encryada, la cadena. El token no se puede aprobar durante la solicitud. Por lo tanto, cuando encriptamos el servlet, necesitamos consultar el toke encriptado del usuario a través del token del usuario. Después de encontrar la consulta, necesitamos empalmarla y solicitar el parámetro JSON, de modo que la cadena cifrada del servlet sea consistente con la cadena encriptada por el usuario. El siguiente es el método para consultar el token encriptado y empalmarlo en los parámetros de solicitud después de consultar el token cifrado. */ byenEnnptStrValue = requestJsonObject.ToString (). Substring (0, requestJSONObject.ToString (). Longitud ()-1); JSONOBJECT CiCryPTTokenJsonObject = new JsonObject (); cifrypttokenjsonObject.put ("cifryptToken", returnObject.getString ("cifryptToken")); Value de cadena1 = CiCryptTokenJsonObject.ToString (). Substring (1, CiCryPTTokenJSONObject.ToString (). Longitud ()); byEnnptStrValue = byEnnptStrValue+","+valor1; //} else {returnValue = 1; // IdToken Error}} Catch (JSonexception e1) {// TODO Bloque de captura generada automática e1.printStackTrace (); } try {// El siguiente método es usar la cadena correcta para cifrar la llamada del método en el servlet. Después de devolver un resultado, compare el resultado de cifrado aprobado por la cadena del usuario Javamd5Result = CiCryptSafa.MD5Encrypt (byEnnptStrValue); if (javamd5Result.equals (cifryptStrValue)) {// La cadena de cifrado es correcta} else {returnValue = 2; // El resultado de cifrado es incorrecto}} Catch (UnsupportedEncodingException e) {// TODO Auto Generated Catch Block Block } return returnValue; }El primero es el método encapsulado llamado por el servlet. A continuación se presentan todos los códigos llamados por la página Servlet.
1. La URL solicitada
Aquí estoy pasando un diccionario para convertir el parámetro del formato JSON, que es una forma de par de valor clave, y solo se usa un parámetro para solicitarlo. El IdToken en el parámetro es el token de usuario, y el valor que agrego es un 123456 aleatorio en la base de datos.
Si no usa UUID, por supuesto, definitivamente no será el caso si lo hace formalmente.
http: // localhost: 8080/javaservlettest/2.jsp? caracteres/",/" cuenta/":/" hang/"}", "md5str": "672f4a8c6fb92103c01d4275e46df790"}
El siguiente es el código procesado por la página Servlet. Todo el proceso es verificar si la solicitud del usuario ha sido modificada durante la entrega.
// Encontré un problema aquí ayer. Cuando solicité los parámetros con chino, el servlet estaba confuso después de obtener el servlet, y luego utilicé el siguiente método. String requestJSonstr = new String (request.getParameter ("parámetro"). GetBytes ("ISO8859-1"), "UTF-8"); // Enviar parámetros jsonObject ObjectParameter = null; // idtoken jsonObject requestParmeter = null; // IdToken String idtoken = ""; // Strena de cifrado de cliente String md5str = ""; Pruebe {// Obtenga la cadena JSON total. Este es en realidad el parámetro ObjectParameter que solo pasamos del URL.ObjectParameter = new JsonObject (requestJSonstr); // Enviar el parámetro, un valor clave de JSON, y solicite el parámetro dentro del parámetro. De hecho, este parámetro contiene los parámetros requeridos en el negocio, como requestParmeter = new JsonObject (objectParameter.getString ("parámetro")); // IdToken Este es el token de usuario, que es el identificador único del usuario. Necesitamos consultar el token cifrado correspondiente en la base de datos a través de ella para consultar el idtoken = requestParmeter.getString ("IdToken"); // La cadena de cifrado del cliente MD5Str = ObjectParameter.getString ("MD5Str"); } Catch (JSOnException e1) {// TODO Auto Generado Bloque E1.PrintStackTrace (); } // La cadena generada después del cifrado MD5 // El siguiente paso es verificar si el token es correcto int tokeNverifyResult = encryptsafa.postTokenverify (idtoken, requestParmeter, md5str); if (tokeNverifyResult == 0) {out.println ("El método de cifrado de token es correcto"); } else {out.println ("error de método de token o cifrado cifrado"); devolver; }Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.