|
MD5Algoritmöversikt MD5Funktionen är att en informationsbit ska vara(meddelande)Generera informationssammanfattningar(meddelande-digest), sammanfattningen är unik för informationen,Den kan användas som en digital signatur. Används för att verifiera dokumentets giltighet(Om det finns förlorad eller korrupt data),Kryptering av användarens lösenord, hashvärdet beräknas i hashfunktionen. Ange en bytesträng av valfri längd för att generera en128Heltalet av biten. På grund av vissa irreversibla egenskaper hos algoritmen har den god säkerhet i krypteringsapplikationer. ochMD5Användningen av algoritmer kräver inga upphovsrättsavgifter. Varken unikhet eller irreversibilitet är absoluta, teoretiskt sett analyserar man det som en många-till-en-relation, men sannolikheten att två olika informationsbitar ger samma sammanfattning är liten. Irreversibel innebär att mängden beräkningstid och beräkningstid som krävs för att härleda indata från utdata är för stor, och metoden att söka efter ordböcker kräver för mycket lagringsutrymme. WebbSystemDesignidéer Detta system är baserat på Java Web, och med hjälp avstrut2för att uppnå detta. Den grundläggande designidén är att klara detwebbPage för att beräkna en fil i systemets externa minne två gångerMD5värde, och jämför, om det är samma sak har filen inte manipulerats, om den är annorlunda betyder det att filen har manipulerats. WebbVersionsfil, manipulationssäker system, detaljerade designidéer: godkändJSPHämta en fil som behöver beräknas i systemets externa minne.JSPEfter inlämning, passastrut2avÅtgärderHoppa till med värdenJavaLogiklagret. vid det logiska lagretÅtgärderMedium läteDaoMetoder,DaoBeräkningen kapslas inMD5värde.DaoMetodJSPDokument som kommer över, och kalkylatorerMD5När beräkningen är klar, returnera den ursprungliga vägen för värdetÅtgärderDetta är första gången en fil har beräknatsMD5Värde, spara det iSession, så att den kan jämföras med den andraMD5Värderingar. Efter den första lyckade avrättningen, hoppa tillFramgångsida. Börja nu med filen andra gångenMD5Beräkning, också med ovanstående metod. Efter beräkningMD5Efter värdet beräknas den andra gångenMD5Värdet är detsamma som det första beräknade och sparas iSessionOm värdena är desamma sker ingen förändring. Om det är annorlunda betyder det att det har manipulerats. Systemimplementering Steg 1,Index.jspkällkod i <!-- Index.jspLägg till filer från systemlagring här--> <center> <form action="fileCrypt" metod="get"> <table> <tr> <td>Filnamn</td>: <td><input type="file" name="Md5FilesEntity.filename" /> </td> <td><inmatningstyp="skicka in" värde="start" /> </td> </tr> </table> </form> </center> Steg 2,FjäderbenenKällkoden i konfigurationsfilen <!-- struts2Konfigurationsfiler--> <struts> <konstant värde="true" name="struts.devMode" /> <konstant värde="zh_CN" name="struts.locale" /> <konstant värde="utf-8" namn="struts.i18n.encoding" /> <paketnamn="default" extends="struts-default"> <handlingsnamn="mdeAction" klass="com.crypt.action.mdeAction" method="codeCrype"> <resultat namn="framgång">/index.jsp</result> </action> <action name="fileCrypt" class="com.crypt.action.FilesCryptAction"> <resultat namn="framgång">/success.jsp</result> </action> <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" method="SetCrypt2"> <resultat namn="framgång">/FilnallySuccess.jsp</result> <result name="fail">/fail.jsp</result> </action> </struts> Det tredje steget är att hoppa till FilesCryptAction efter struts2 paketet com.crypt.action; import java.io.IOException; importera javax.servlet.http.HttpServletRequest; importera javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; importera com.crypt.dao.Md5_dao; importera com.opensymphony.xwork2.ActionSupport; importera com.crypt.entity.Md5FilesEntity; publik klass FilesCryptAction utökar ActionSupport { privat Md5FilesEntity Md5FilesEntity = ny Md5FilesEntity(); HttpServletRequest-begäran = ServletActionContext.getRequest(); HttpSession session = request.getSession(); public Md5FilesEntity getMd5FilesEntity() { returnera Md5FilesEntity; } public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) { Md5FilesEntity = md5FilesEntity; } public String execute() kastar IOException { String fileCode = null; try { fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename()); session.setAttribute("fileCode", fileCode); //Första gången var det beräknatMD5Värdet sparas tillfälligt iSessionMedium } fångar (Undantag e) { TODO Autogenererad fångstblock e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode1(fileCode); returnera "framgång"; } publik String SetCrypt2() { SträngfilCode2 = null; try { fileCode2 = Md5_dao .getFileCode("e:" + Md5FilesEntity.getFilename()); } fångar (Undantag e) { TODO Autogenererad fångstblock e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode2(fileCode2); System.out.println("session1"+session.getAttribute("fileCode")); if (fileCode2 .equals(session.getAttribute("fileCode"))) { returnera "framgång"; } annars { returnera "fail"; } } } I det fjärde steget börjar handlingen hoppa till Md5_dao med värden paketet com.crypt.dao; importera com.crypt.md5.Md5Crypt_1; importera com.crypt.md5.Md5Crypt_2; Public Class Md5_dao { offentlig statisk sträng getFileCode(String fileName) kastar Undantag { System.out.println(filnamn); String hashCode = Md5Crypt_1.getHash(filnamn, "MD5"); System.out.println(hashCode); returnera hashkod; } } Det femte steget är att skapa ett API i systemet för att beräkna MD5-värdet för en fil, så anropa det direkt i DAO:n, och nu bearbetas det direkt i Md5Crypt_1-metoden paketet com.crypt.md5; importera java.io.*; importera java.security.*; Public Class Md5Crypt_1 { publik statisk char[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; public static void main(String[] args) kastar Exception { Strängfilnamn = "e:/111.txt"; Stränghashtyp = "MD5"; System.out.println(hashType + " == " + getHash(filnamn, hashType)); } publik statisk Sträng getHash(Strängfilnamn, StränghashTyp) kast Undantag { InputStream fis; fis = ny FileInputStream(filnamn); byte[] buffer = ny byte[1024]; MessageDigest md5 = MessageDigest.getInstance(hashType); int numLäs = 0; medan ((numRead = fis.read(buffer)) > 0) { md5.update(buffer, 0, numRead); } fis.close(); återgå till HexString(md5.digest()); } publik statisk String toHexString(byte[] b) { StringBuilder sb = ny StringBuilder(b.length * 2); //Konstruera en stränggenerator och initiera den till det angivna stränginnehållet för (int i = 0; I < B.längd; i++) { sb.append(hexChar[(b& 0xf0) >>> 4]); Lägg tillmetoder lägger alltid till dessa tecken i generatorns slut sb.append(hexChar[b& 0x0f]); } return sb.toString(); } } Steg 6: Efter att värdet av MD5 i filen framgångsrikt har beräknats, lagras den första MD5 i sessionen i aktion, och genom konfigurationen av struts2-konfigurationsfilen, hoppa till seccess.jsp, visa MD5-värdet som beräknats första gången och be om att starta den andra beräkningen: Källkod i Success.jsp: <body> Första gången var det beräknatmd5Värdet är: <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L"> <s:property value="#Md5FilesEntity.fileAfterHashCode1" /> </s:iterator> <center> <form action="fileCrypt2" method="get"> <table> <tr> <td>Filnamn</td>: <td><input type="file" name="Md5FilesEntity.filename" /> </td> <td><inmatningstyp="skicka in" värde="start" /> </td> </tr> </table> </form> <form> <textarea style="text-align: left; " rader="10" kol="41" readonly="readonly"> <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L"> <s:property value="#Md5FilesEntity.Md5FileCode" /> </s:iterator> </textarea> </form> </center> </body> Steg 7: Starta den andra insändningen och räkna ut denMD5Värdet beräknas andra gången efter att det beräknats igen enligt ovanstående processMD5Värdet jämförs med värdet från första gången, om det är två gångerMD5 om det är samma sak betyder det att det inte finns någon manipulation; Om två gångerMD5Om värdet är annorlunda har dokumentet manipulerats. Därmed är hela systemet färdigt. Dokumentmanipulationssäker systemtestning Lägg systemet på ställetTomact 6.0Kom upp och insewebbSpring. Nedan följer ett testdiagram över systemet: Steg 1: Lägg till de filer som behöver beräknas. Och slå ner på det"Start"knappen för att börja räkna.
Det andra steget beräknasMD5, isuccess.jspvisar den första beräknadeMD5värde och uppvisning. En andra beräkning påbörjas också för att avgöra om den har manipulerats.
Det tredje steget är att utföra en andra beräkning utan att manipulera dokumentetMD5värde. Om det inte sker någon manipulation kommer sidan utan hoppet att hoppas direkt och "filen har inte manipulerats" visas. Om det har manipulerats kommer det att visa att dokumentet har manipulerats.
Steg 4: Gör ändringar i filen och upprepa ovanstående test Första beräkningen:
Efter att beräkningen lyckats:
Det femte steget är att medvetet manipulera dokumentet och beräkna det. I princip manipuleras och beräknas dokumentet två gångerMD5Nej, när du jämför bör du bli tillfrågad om att filen har manipulerats.
Vid denna punkt är testningen av hela systemet avslutad.
|