|
MD5Algoritmus áttekintés MD5A funkció egy információ darab(üzenet)Információ összeállítások generálása(üzenet-összefoglaló), az összefoglaló egyedi az információra jellemző,Digitális aláírásként is használható. A dokumentum érvényességének ellenőrzésére használták(Hogy elveszett vagy sérült adat van-e),A felhasználó jelszavának titkosítása, a hash értéket a hash függvényben számítják ki. Írj be bármilyen hosszúságú bytestringet, hogy létrehozz egyet128A bit egész száma. Az algoritmus néhány visszafordíthatatlan tulajdonsága miatt jó biztonságot nyújt a titkosítási alkalmazásokban. ésMD5Az algoritmusok használata nem igényel szerzői jogi díjak kifizetését. Sem az egyediség, sem a visszafordíthatatlanság nem abszolút, elméletileg sok-egy kapcsolatként elemezzük, de annak valószínűsége, hogy két különböző információ ugyanazt az összefoglalót adja, kicsi. Az irreverzibilis azt jelenti, hogy a bemenet kivonásához szükséges számítási és számítási idő túl nagy, és a szótárak keresése túl sok tárolóhelyet igényel. WebRendszerTervezési ötletek Ez a rendszer a Java Weben alapul, és astrut2hogy ezt elérje. Az alapvető tervezési ötlet, hogy átmenjWeboldal, hogy kétszer is kiszámolja a fájlt a rendszer külső memóriájábanMD5és összehasonlítsuk, ha ugyanaz, akkor a fájlt nem manipulálták, ha más, az azt jelenti, hogy a fájlt manipulálták. WebVerziófájl-ellenőrző rendszer részletes tervezési ötletek: átmentJSPSzerezzen egy fájlt, amelyet a rendszer külső memóriájában kell kiszámítani.JSPBeadás után átaddstrut2ofAkcióUgorjunk az értékekhezJavalogikai réteg. a logikai rétegnélAkcióKözepes hívásDaomódszerek,DaoA számítás be van zárvaMD5érték.DaoMódszerJSPDokumentumok, amelyek átérkeznek, és számológépekMD5A számítás befejezése után visszaadja az érték eredeti útjátAkcióEz az első alkalom, hogy egy fájlt kiszámítottakMD5érték, tartsd beSzekció, így összehasonlítható a másodikMD5Értékek. Az első sikeres kivégzés után ugorj aSikeroldal. Most kezdjük el a fájl második alkalmajátMD5Számítás is a fenti módszerrel. Számítás utánMD5Az érték után a második alkalom számít kiMD5Az érték megegyezik az elsővel, és mentődikSzekcióHa az értékek ugyanazok, nincs változás. Ha más, az azt jelenti, hogy manipulálták. Rendszer megvalósítása 1. lépés,Index.jspForráskód a <!-- Index.jspFájlok hozzáadása a rendszertárból itt--> <center> <form action="fileCrypt" method="get"> <table> <tr> <td>Fájlnév:</td> <td><input type="file" name="Md5FilesEntity.filename" /> </td> <td><input type="submit" value="start" /> </td> </tr> </table> </form> </center> 2. lépés,TartókA konfigurációs fájlban lévő forráskód <!-- tartótartók2Konfigurációs fájlok--> <struts> <constant value="true" name="struts.devMode" /> <állandó érték="zh_CN" name="struts.locale" /> <constant value="utf-8" name="struts.i18n.encoding" /> <package name="default" extends="struts-default"> <action name="mdeAction" class="com.crypt.action.mdeAction" method="codeCrype"> <result name="siker">/index.jsp</result> </action> <action name="fileCrypt" class="com.crypt.action.FilesCryptAction"> <result name="siker">/success.jsp</result> </action> <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" method="SetCrypt2"> <result name="siker">/FilnallySuccess.jsp</result> <result name="fail">/fail.jsp</result> </action> </struts> A harmadik lépés a struts2 után a FilesCryptAction opcióra való ugrás com.crypt.action csomag; importál java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; importos com.crypt.dao.Md5_dao; importál com.opensymphony.xwork2.ActionSupport; importál com.crypt.entity.Md5FilesEntity; public class FilesCryptAction bővíti az ActionSupport { private Md5FilesEntity Md5FilesEntity = új Md5FilesEntity(); HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); public Md5FilesEntity getMd5FilesEntity() { return Md5FilesEntity; } public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) { Md5FilesEntity = md5FilesEntity; } public String execute() dob IOException { String fileCode = null; try { fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename()); session.setAttribute("fileCode", fileCode); //Az első alkalommal, amikor kiszámítottákMD5Az érték ideiglenesen elmentődikSzekcióKözepes } fogás (Kivétel e) { TODO Automatikusan generált fogóblokk e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode1(fileCode); "siker" visszatérés; } public String SetCrypt2() { String fileCode2 = null; try { fileCode2 = Md5_dao .getFileCode("e:" + Md5FilesEntity.getFilename()); } fogás (Kivétel e) { TODO Automatikusan generált fogóblokk e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode2(fileCode2); System.out.println("session1"+session.getAttribute("fileCode")); if (fileCode2 .equals(session.getAttribute("fileCode"))) { "siker" visszatérés; } más { vissza "fail"; } } } A negyedik lépésben az akció elkezd ugrani az értékekkel rendelkező Md5_dao com.crypt.dao csomag; importos com.crypt.md5.Md5Crypt_1; importot com.crypt.md5.Md5Crypt_2; Nyilvános osztály Md5_dao { public static String getFileCode(String fileName) throws Exception { System.out.println(fileName); String hashCode = Md5Crypt_1.getHash(fileName, "MD5"); System.out.println(hashCode); return hashCode; } } Az ötödik lépés, hogy létrehozunk egy API-t a rendszerben, amely kiszámítja egy fájl MD5 értékét, így közvetlenül a DAO-ban hívjuk, és most közvetlenül a Md5Crypt_1 módszerrel dolgozzák fel com.crypt.md5 csomag; importálás java.io.*; import java.security.*; Nyilvános osztály Md5Crypt_1 { nyilvános statikus karakter[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; public static void main(String[] args) dob Exception { String fileName = "e:/111.txt"; String hashType = "MD5"; System.out.println(hashType + " == " + getHash(fileName, hashType)); } public static String getHash(String fileName, String hashType) dobja Kivétel { InputStream fis; fis = új FileInputStream (fileName); byte[] buffer = új bájt[1024]; MessageDigest md5 = MessageDigest.getInstance (hashType); int numRead = 0; míg ((numRead = fis.read(buffer)) > 0) { md5.update(buffer, 0, numRead); } fis.close(); return to HexString(md5.digest()); } public static String toHexString(byte[] b) { StringBuilder sb = új StringBuilder(b.length * 2); //Építs egy stringgenerátort, és inicializáld a megadott string tartalmához for (int i = 0; I < b.length; i++) { sb.append(hexChar[(b& 0xf0) >>> 4]); csatolása metódok mindig hozzáadják ezeket a karaktereket a generátor végéhez sb.append(hexChar[b& 0x0f]); } return sb.toString(); } } 6. lépés: Miután sikeresen kiszámították a fájl MD5 értékét, az első MD5 elmarad a működés közben lévő ülésben, és a struts2 konfigurációs fájl konfigurációján keresztül ugrunk a seccess.jsp-re, megjelenítjük az első alkalommal kiszámított MD5 értéket, és felszólítjuk a második számítás elindítását: Forráskód Success.jsp-ben: <body> Az első alkalommal, amikor kiszámítottákMD5Az érték a következőképpen: <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L"> <s:property value="#Md5FilesEntity.fileAfterHashCode1" /> </s:iterátor> <center> <form action="fileCrypt2" method="get"> <table> <tr> <td>Fájlnév:</td> <td><input type="file" name="Md5FilesEntity.filename" /> </td> <td><input type="submit" value="start" /> </td> </tr> </table> </form> <form> <textarea style="text-align: bal; " sorok = "10" érzőpontok = "41" readonly="readonly"> <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L"> <s:property value="#Md5FilesEntity.Md5FileCode" /> </s:iterátor> </textarea> </form> </center> </body> 7. lépés: Kezdjük el a második beküldést és számold kiMD5Az értéket másodszor számolják ki, miután újra kiszámítjuk a fenti eljárás szerint.MD5Az értéket az első alkalom értékével hasonlítjuk össze, ha kétszerMD5 ha ugyanaz, az azt jelenti, hogy nincs manipuláció; Ha kétszerMD5Ha az érték eltér, akkor a dokumentumot manipulálták. Így az egész rendszer befejeződik. Dokumentumhamisítás-ellenes rendszer tesztelése Tedd a rendszert a rackreTomact 6.0Feljöjjön és rájöjjönWebFuss. Az alábbiakban a rendszer tesztdiagramja látható: 1. lépés: Add hozzá azokat a fájlokat, amiket ki kell számolni. És lépj fel"Kezdés" gombot, hogy elkezdj számolni.
A második lépést kiszámítjukMD5, insuccess.jspmegmutatja az első kiszámítottMD5érték és megjelenítés. Egy második számítást is indítanak annak megállapítására, hogy manipuláltak-e vele.
A harmadik lépés, hogy a dokumentum manipulálása nélkül végezz egy második számítástMD5érték. Ha nincs manipuláció, akkor az oldal, ahol nincs ugrás, közvetlenül ugranak, és megjelenik a "fájl nem manipulált" jelenik meg. Ha manipulálták, akkor az azt mutatja, hogy a dokumentumot manipulálták.
4. lépés: Változtatásokat végezzen a fájlban, és ismételje meg a fenti tesztet Első számítás:
Miután a számítás sikeres lett:
Az ötödik lépés, hogy szándékosan manipuláljuk a dokumentumot és kiszámolod azt. Elvileg a dokumentumot kétszer is manipulálják és kiszámítjákMD5Nem, összehasonlításkor azt kell jelezni, hogy a fájlt manipulálták.
Ekkor a teljes rendszer tesztelése befejeződött.
|