Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 15992|Respuesta: 1

[Tutorial de seguridad] ¡Tencent también lo está usando! Sistema anti-manipulación para archivos web (implementación de cifrado MD5) tutorial anti-hacking

[Copiar enlace]
Publicado en 20/11/2014 14:04:34 | | | |
MD5Resumen del algoritmo
MD5La función es a una pieza de información(mensaje)Generar digestos de información(resumir el mensaje), el resumen es único para la información,Puede usarse como firma digital. Utilizado para verificar la validez del documento(Si hay datos perdidos o corruptos),El cifrado de la contraseña del usuario, el valor hash se calcula en la función hash. Introduce una cadena de bytes de cualquier longitud para generar una128El entero del bit. Debido a algunas características irreversibles del algoritmo, cuenta con buena seguridad en aplicaciones de cifrado. yMD5El uso de algoritmos no requiere el pago de ninguna tasa de derechos de autor. Ni la unicidad ni la irreversibilidad son absolutas, analizándola teóricamente como una relación de muchos a uno, pero la probabilidad de que dos piezas diferentes de información produzcan el mismo resumen es baja. Irreversible significa que la cantidad y tiempo de cálculo necesarios para deducir la entrada de la salida es demasiado grande, y el método de búsqueda de diccionarios requiere demasiado espacio de almacenamiento.
TelarañaSistemaIdeas de diseño
Este sistema se basa en Java Web, y con la ayuda deStrut2para lograrlo. La idea básica del diseño es aprobarWebpágina para calcular un archivo en la memoria externa del sistema dos vecesMD5valor, y comparar, si es el mismo, el archivo no ha sido manipulado, si es diferente, significa que ha sido manipulado.
TelarañaFichero de versión: ideas detalladas de diseño del sistema a prueba de manipulaciones: aprobadoJSPRecupera un archivo que necesita ser calculado en la memoria externa del sistema.JSPDespués de enviar, pasaStrut2deAcciónSaltar a con valoresJavaCapa lógica. en la capa lógicaAcciónLlamada mediadaométodos,daoEl cálculo está encapsuladoMD5Valor.DaoMétodoJSPDocumentos que llegan y calculadorasMD5Una vez completado el cálculo, se devuelve la ruta original del valorAcciónEsta es la primera vez que se calcula un archivoMD5valor, guárdalo enSesión, para que pueda compararse con el segundoMD5Valores. Tras la primera ejecución exitosa, saltar aÉxitoPágina. Ahora empieza la segunda vez con el archivoMD5Cálculo, también por el método anterior. Después del cálculoMD5Después del valor, se calcula la segunda vezMD5El valor es el mismo que el primero calculado y se guarda enSesiónSi los valores son los mismos, no hay cambio. Si es diferente, significa que ha sido manipulado.
Implementación del sistema
Paso 1,Index.jspCódigo fuente en
<!-- Index.jspAñadir archivos desde el almacenamiento del sistema aquí-->
                <center>
                        <form action="fileCrypt" método="get">
                                <table>
                                        <tr>
                                                <td>Nombre del archivo:</td>
                                                <td><tipo de entrada="archivo" nombre="Md5FilesEntity.nombrefilefile" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Paso 2,PuntalesEl código fuente en el archivo de configuración
<!-- puntas2Archivos de configuración-->
<struts>
        <valor constante="verdadero" nombre="struts.devMode" />
        <valor constante="zh_CN" nombre="struts.locale" />
        <valor constante="utf-8" nombre="struts.i18n.encoding" />
       
        <nombre del paquete="default" extiende="struts-default">
                <nombre de la acción="mdeAcción" clase="com.crypt.action.mdeAcción"
                        método="codeCrype">
                        <nombre del resultado="éxito">/index.jsp</result>
                </action>
                <nombre de la acción="archivoCripto" clase="com.crypt.acción.ArchivosCriptaciónAcción">
                        <nombre del resultado="éxito">/success.jsp</result>
                </action>
                <nombre de la acción="archivoCrypt2" clase="com.crypt.action.FilesCryptAction" método ="SetCrypt2">
                        <nombre del resultado="éxito">/FilnallySuccess.jsp</result>
                        <nombre del resultado="fallo">/fail.jsp</result>
                </action>
</struts>   
El tercer paso es saltar a FilesCryptAction después de struts2
paquete com.crypt.action;
importar java.io.IOException;
import javax.servlet.http.HttpHttpServletRequest;
importar javax.servlet.http.HttpHttpSession;
import org.apache.struts2.ServletActionContext;
importación com.crypt.dao.Md5_dao;
importar com.opensymphony.xwork2.ActionSupport;
importar com.crypt.entity.Md5FilesEntity;
clase pública FilesCryptAction extiende ActionSupport {
        privado Md5FilesEntity Md5FilesEntity = nuevo Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                return Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        public String execute() lanza IOException {
                Cadena fileCode = null;
                try {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //La primera vez que se calculóMD5El valor se guarda temporalmente enSesiónMedio
                } catch (Excepción e) {
                        TODO Bloque de captura autogenerado
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                "éxito" de retorno";
        }
        public String SetCrypt2() {
                Cadena de archivosCode2 = null;
                try {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } catch (Excepción e) {
                        TODO Bloque de captura autogenerado
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        "éxito" de retorno";
                } else {
                        devolver "fail";
                }
        }
}
          
En el cuarto paso, la acción empieza a saltar a la Md5_dao con valores
paquete com.crypt.dao;
importación com.crypt.md5.Md5Crypt_1;
importación com.crypt.md5.Md5Crypt_2;
Clase pública Md5_dao {
        String estática pública getFileCode(String fileName) lanza Exception {
                System.out.println(nombreArchivo);
                String hashCode = Md5Crypt_1.getHash(nombreArchivo, "MD5");
                System.out.println(hashCode);
                devolver hashCode;
        }
}       
El quinto paso es crear una API en el sistema para calcular el valor MD5 de un archivo, así que llamarlo directamente en el DAO, y ahora se procesa directamente en el método Md5Crypt_1
paquete com.crypt.md5;
importación java.io.*;
importar java.security.*;
Clase pública Md5Crypt_1 {
        caráter estático público[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        empty estático público main(String[] args) lanza Exception {
                String fileName = "e:/111.txt";
                String hashType = "MD5";
                System.out.println(hashType + " == " + getHash(nombrefile, hashType));
        }
        Cadena estática pública getHash(Nombre de archivo de cadenas, tipo de hash de cadena)
                        lanza Exception {
                InputStream fis;
                fis = nuevo FileInputStream(nombreArchivo);
                Búfer de byte[] = nuevo byte[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numRead = 0;
                mientras que ((numRead = fis.read(buffer)) > 0) {
                        md5.update (buffer, 0, numRead);
                }
                fis.close();
                volver a HexString(md5.digest());
        }
        Public static String toHexString(byte[] b) {
                StringBuilder sb = nuevo StringBuilder(b.length * 2); //Construye un generador de cadenas e inicialízalo en el contenido especificado de la cadena
                para (int i = 0; Yo < de largo; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); AñadirLos métodos siempre suman estos caracteres al final del generador
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
Paso 6: Tras calcular con éxito el valor de MD5 del archivo, el primer MD5 se almacena en la sesión en acción y, a través de la configuración del archivo de configuración struts2, se salta al seccess.jsp, se muestra el valor MD5 calculado por primera vez y se solicita iniciar el segundo cálculo:
Código fuente en Success.jsp:
<body>
   La primera vez que se calculóMD5El valor es:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" estado="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:iterador>
       
                <center>
                        <form action="fileCrypt2" método="get">
                                <table>
                                        <tr>
                                                <td>Nombre del archivo:</td>
                                                <td><tipo de entrada="archivo" nombre="Md5FilesEntity.nombrefilefile" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " rows="10" cols="41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" estado="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:iterador>
        </textarea>
                        </form>
                </center>
  </body>
Paso 7: Inicia la segunda propuesta y calcúlalaMD5El valor se calcula la segunda vez tras calcularlo de nuevo según el proceso anteriorMD5El valor se compara con el valor de la primera vez, si es dos vecesMD5        Si es el mismo, significa que no hay manipulación; Si dos vecesMD5Si el valor es diferente, el documento ha sido manipulado. Así, todo el sistema queda completo.
Pruebas de sistemas a prueba de manipulación de documentos
Pon el sistema en el rackTomAct 6.0Ven y date cuentaWebCorre. A continuación se muestra un diagrama de prueba del sistema:
Paso 1: Añade los archivos que hay que calcular. Y reprimir"Inicio" para empezar a calcular.

Se calcula el segundo pasoMD5, ensuccess.jspmuestra el primero calculadoMD5valor y exhibición. También se solicita un segundo cálculo para determinar si ha sido manipulado.

El tercer paso es realizar un segundo cálculo sin alterar el documentoMD5Valor. Si no hay manipulación, la página sin el salto se salta directamente y se mostrará el "archivo no ha sido manipulado". Si ha sido manipulado, mostrará que el documento ha sido manipulado.



Paso 4: Haz cambios en el archivo y repite la prueba anterior
Primer cálculo:


Después de que el cálculo sea exitoso:

El quinto paso es manipular deliberadamente el documento y calcularlo. En principio, el documento se manipula y calcula dos vecesMD5No, al comparar, deberían indicarte que el archivo ha sido manipulado.


En este punto, se completan las pruebas de todo el sistema.







Anterior:La Asociación de Emprendedores Destacados organizó la actividad "Reciclaje de Residuos y Utilización de Recursos"
Próximo:[C#] 12306 Se realiza la base para el agarre de billetes
Publicado en 20/11/2014 14:13:20 |
docto
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com