|
MD5Aperçu de l’algorithme MD5La fonction est à une information(message)Générer des résumés d’informations(résumé du message), le résumé est unique à l’information,Elle peut être utilisée comme signature numérique. Utilisé pour vérifier la validité du document(Qu’il y ait des données perdues ou corrompues),Le chiffrement du mot de passe de l’utilisateur, la valeur du hachage est calculée dans la fonction de hachage. Entrez une chaîne d’octets de n’importe quelle longueur pour en générer un128L’entier du bit. Grâce à certaines caractéristiques irréversibles de l’algorithme, il bénéficie d’une bonne sécurité dans les applications de chiffrement. etMD5L’utilisation d’algorithmes ne nécessite pas le paiement de frais de droits d’auteur. Ni l’unicité ni l’irréversibilité ne sont absolues, on l’analyse théoriquement comme une relation plusieurs-à-un, mais la probabilité que deux informations différentes produisent le même résumé est faible. Irréversible signifie que la quantité de calcul et le temps de calcul nécessaires pour déduire l’entrée à partir de la sortie est trop importante, et la méthode de recherche de dictionnaires nécessite trop d’espace de stockage. WebSystèmeIdées de conception Ce système est basé sur Java Web, et avec l’aide destrut2pour y parvenir. L’idée de base du design est de réussirWebpage pour calculer un fichier dans la mémoire externe du système deux foisMD5et comparer, si c’est le même, si le fichier n’a pas été modifié, s’il est différent, cela signifie que le fichier a été trafiqué. WebFichier de version, idées de conception détaillées du système à l’épreuve de la falsification : réussiJSPRécupérez un fichier qui doit être calculé dans la mémoire externe du système.JSPAprès avoir soumis, réussissezstrut2deActionSauter à avec valeursJavacouche logique. à la couche logiqueActionAppel moyendaométhodes,daoLe calcul est encapsuléMD5Value.DaoMéthodeJSPDes documents qui arrivent, et des calculatricesMD5Après le calcul, retournez le chemin original de la valeurActionC’est la première fois qu’un fichier est calculéMD5Value, sauvegardez-la dansSession, de sorte qu’il puisse être comparé au secondMD5Les valeurs. Après la première exécution réussie, passez àSuccèspage. Maintenant, relance la deuxième fois du fichierMD5Calcul, également par la méthode ci-dessus. Après calculMD5Après la valeur, la seconde est calculéeMD5La valeur est la même que la première calculée et est enregistrée dansSessionSi les valeurs sont les mêmes, il n’y a pas de changement. Si c’est différent, cela signifie qu’il a été altéré. Implémentation système Étape 1,Index.jspCode source dans <!-- Index.jspAjoutez des fichiers depuis le stockage système ici--> <center> <form action="fileCrypt » méthode="get"> <table> <tr> <td>Nom du fichier:</td> <td><type d’entrée="fichier » nom = = = Md5FilesEntity.namefile » /> </td> <td><input type="submit » value="start » /> </td> </tr> </table> </form> </center> Étape 2,EntretoisesLe code source dans le fichier de configuration <!-- jambes de force 2Fichiers de configuration--> <struts> <valeur constante="true » nom="struts.devMode » /> <valeur constante="zh_CN » nom="struts.locale » /> <valeur constante = = « utf-8 » nom = « struts.i18n.encoding » /> <nom du paquet="par défaut » étends="montants-par défaut"> <nom de l’action="mdeAction » class="com.crypt.action.mdeAction » méthod="codeCrype"> <nom du résultat="succès">/index.jsp</result> </action> <nom de l’action="fileCrypt » class="com.crypt.action.FilesCryptAction"> <nom du résultat="succès">/success.jsp</result> </action> <nom de l’action="fileCrypt2 » class="com.crypt.action.FilesCryptAction » méthode = = SetCrypt2"> <nom du résultat="succès">/FilnallySuccess.jsp</result> <nom du résultat="faillite">/fail.jsp</result> </action> </struts> La troisième étape consiste à passer à FilesCryptAction après struts2 package com.crypt.action ; importer java.io.IOExcepion ; import javax.servlet.http.Http.HttpServletRequest ; importez javax.servlet.http.HttpHttpSession ; import org.apache.struts2.ServletActionContext ; importation com.crypt.dao.Md5_dao ; import com.opensymphony.xwork2.ActionSupport ; importer com.crypt.entity.Md5FilesEntity ; classe publique FilesCryptAction étend ActionSupport { private Md5FilesEntity Md5FilesEntity = nouveau Md5FilesEntity() ; HttpServletRequest request = ServletActionContext.getRequest() ; HttpSession session = request.getSession() ; public Md5FilesEntity getMd5FilesEntity() { return Md5FilesEntity ; } public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) { Md5FilesEntityT= md5FilesEntity ; } public String execute() throws IOException { Chaîne fileCode = null ; try { fileCode = Md5_dao.getFileCode(« e : » + Md5FilesEntity.getFilename()) ; session.setAttribute(« fileCode », fileCode) ; //La première fois qu’il a été calculéMD5La valeur est temporairement sauvegardée dansSessionDouleur moyenne } catch (Exception e) { TODO Bloc de capture auto-généré e.printStackTrace() ; } Md5FilesEntity.setFileAfterHashCode1(fileCode) ; retour du « succès » ; } public String SetCrypt2() { Chaîne de fichiers Code2 = null ; try { fileCode2 = Md5_dao .getFileCode(« e : » + Md5FilesEntity.getFilename()) ; } catch (Exception e) { TODO Bloc de capture auto-généré e.printStackTrace() ; } Md5FilesEntity.setFileAfterHashCode2(fileCode2) ; System.out.println (« session1"+session.getAttribute(« fileCode »)) ; if (fileCode2 .equals(session.getAttribute(« fileCode »))) { retour du « succès » ; } else { retourner « échec » ; } } } À la quatrième étape, l’action commence à sauter vers la Md5_dao avec des valeurs package com.crypt.dao ; importation com.crypt.md5.Md5Crypt_1 ; importation com.crypt.md5.Md5Crypt_2 ; Classe publique Md5_dao { public static String getFileCode(String fileName) throws Exception { System.out.println (nom du fichier) ; Chaîne hashCode = Md5Crypt_1.getHash(fileName, « MD5 ») ; System.out.println(hashCode) ; retourner hashCode ; } } La cinquième étape consiste à créer une API dans le système pour calculer la valeur MD5 d’un fichier, donc l’appeler directement dans le DAO, et il est désormais traité directement dans la méthode Md5Crypt_1 le paquet com.crypt.md5 ; importation java.io.* ; importer java.security.* ; classe publique Md5Crypt_1 { char statique public[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' } ; public static void main(String[] args) throws Exception { String fileName = « e :/111.txt » ; Chaîne de hachage = « MD5 » ; System.out.println(hashType + " == " + getHash(nomFichier, TypeHash)) ; } Chaîne statique publique getHash(Nom de fichier chaîne, Type de hachage chaîne) jets Exception { InputStream fis ; fis = nouveau FileInputStream(NomDefile) ; Octet[] tampon = nouvel octet[1024] ; MessageDigest md5 = MessageDigest.getInstance(hashType) ; int numRead = 0 ; tandis que ((numRead = fis.read(buffer)) > 0) { md5.update (buffer, 0, numRead) ; } fis.close() ; retour à HexString(md5.digest()) ; } public static String toHexString(byte[] b) { StringBuilder sb = nouveau StringBuilder(b.length * 2) ; //Construisons un générateur de chaînes et initialisez-le au contenu de la chaîne spécifié pour (int i = 0 ; Je < longueur B ; i++) { sb.append(hexChar[(b& 0xf0) >>> 4]) ; AjouterLes méthodes ajoutent toujours ces caractères à la fin du générateur sb.append(hexChar[b& 0x0f]) ; } return sb.toString() ; } } Étape 6 : Après avoir calculé avec succès la valeur de MD5 du fichier, le premier MD5 est stocké dans la session en action, et grâce à la configuration du fichier de configuration struts2, on passe à la seccess.jsp, affiche la valeur MD5 calculée pour la première fois, et invite à lancer le second calcul : Code source dans Success.jsp : <body> La première fois qu’il a été calculéMD5La valeur est: <s :iterator value="Md5FilesEntity » id="Md5FilesEntity » status="L"> <s :property value="#Md5FilesEntity.fileAfterHashCode1 » /> </s :itérateur> <center> <form action="fileCrypt2 » méthode="get"> <table> <tr> <td>Nom du fichier:</td> <td><type d’entrée="fichier » nom = = = Md5FilesEntity.namefile » /> </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 » status="L"> <s :property value="#Md5FilesEntity.Md5FileCode » /> </s :itérateur> </textarea> </form> </center> </body> Étape 7 : Commencez la deuxième soumission et calculez-laMD5La valeur est calculée une seconde fois après l’avoir recalculée selon le processus ci-dessusMD5La valeur est comparée à celle de la première fois, si elle est deux foisMD5 s’il est identique, cela signifie qu’il n’y a pas de falsification ; Si deux foisMD5Si la valeur est différente, le document a été altéré. Ainsi, l’ensemble du système est achevé. Tests de systèmes à l’épreuve de la falsification des documents Mets le système sur le rackTomAct 6.0Monte et réaliseWebCourir. Voici un schéma de test du système: Étape 1: Ajoutez les fichiers à calculer. Et réprimer »Départ" pour commencer à calculer.
La deuxième étape est calculéeMD5, danssuccess.jspmontre la première calculéeMD5Valeur et affichage. Un second calcul est également effectué pour déterminer s’il a été altéré.
La troisième étape consiste à effectuer un second calcul sans modifier le documentMD5Value. S’il n’y a pas de falsification, la page sans le saut sera directement sautée et le « fichier n’a pas été modifié » sera affiché. S’il a été trafiqué, cela indiquera que le document a été altéré.
Étape 4 : Apportez des modifications au fichier et répétez le test ci-dessus Premier calcul :
Après que le calcul ait réussi:
La cinquième étape consiste à manipuler délibérément le document et à le calculer. En principe, le document est altéré et calculé deux foisMD5Non, lors de la comparaison, il faut vous demander que le fichier a été trafiqué.
À ce stade, les tests de l’ensemble du système sont terminés.
|