|
MD5Algoritmeoversikt MD5Funksjonen er til en informasjonsbit(melding)Generer informasjonsdigester(meldings-digest), sammendraget er unikt for informasjonen,Den kan brukes som en digital signatur. Brukt for å verifisere dokumentets gyldighet(Om det er tapt eller korrupt data),Kryptering av brukerens passord, hashverdien beregnes i hash-funksjonen. Skriv inn en bytestreng av hvilken som helst lengde for å generere en128Heltallet av biten. På grunn av noen irreversible egenskaper ved algoritmen har den god sikkerhet i krypteringsapplikasjoner. ogMD5Bruk av algoritmer krever ikke betaling av opphavsrettsgebyrer. Verken unikhet eller irreversibilitet er absolutte, teoretisk analysert som et mange-til-en-forhold, men sannsynligheten for at to forskjellige informasjonsbiter produserer samme oppsummering er liten. Irreversibel betyr at mengden beregning og beregningstid som kreves for å utlede input fra output er for stor, og metoden for å søke etter ordbøker krever for mye lagringsplass. VevSystemDesignideer Dette systemet er basert på Java Web, og med hjelp avstrut2for å oppnå dette. Den grunnleggende designideen er å beståNettPage for å beregne en fil i systemets eksterne minne to gangerMD5verdi, og sammenligne, hvis det er det samme, filen ikke er blitt tuklet med, hvis den er annerledes, betyr det at filen er blitt tuklet med. VevVersjonsfil, manipulasjonssikkert system, detaljerte designideer: beståttJSPHente en fil som må beregnes i systemets eksterne minne.JSPEtter innsending, beistrut2avHandlingHopp til med verdierJavaLogikklag. på det logiske lagetHandlingMedium kallDaoMetoder,DaoBeregningen er innkapsletMD5verdi.DaoMetodeJSPDokumenter som kommer over, og kalkulatorerMD5Etter at beregningen er fullført, returner du den opprinnelige stien til verdienHandlingDette er første gang en fil er beregnetMD5verdi, lagre det iSesjon, slik at den kan sammenlignes med den andreMD5Verdier. Etter den første vellykkede utførelsen, hopp tilSuksessside. Nå starter du andre gang i filenMD5Beregning, også ved metoden ovenfor. Etter beregningMD5Etter verdien beregnes den andre gangenMD5Verdien er den samme som den første beregnede og lagres iSesjonHvis verdiene er de samme, er det ingen endring. Hvis den er annerledes, betyr det at den er tuklet med. Systemimplementering Steg 1,Index.jspKildekode i <!-- Index.jspLegg til filer fra systemlagring her--> <center> <form action="fileCrypt" metode="get"> <table> <tr> <td>Filnavn:</td> <td><inputtype="file" name="Md5FilesEntity.filename" /> </td> <td><inputtype="send inn" verdi="start" /> </td> </tr> </table> </form> </center> Steg 2,StagKildekoden i konfigurasjonsfilen <!-- struts2Konfigurasjonsfiler--> <struts> <konstant verdi="true" navn="struts.devMode" /> <konstant verdi="zh_CN" navn="struts.locale" /> <konstant verdi="utf-8" navn="struts.i18n.encoding" /> <pakkenavn="default" extends="struts-default"> <handlingsnavn="mdeAction" klasse="com.crypt.action.mdeAction" method="codeCrype"> <resultatnavn="suksess">/index.jsp</result> </action> <handlingsnavn="fileCrypt" klasse="com.crypt.action.FilesCryptAction"> <resultatnavn="suksess">/success.jsp</result> </action> <handlingsnavn="fileCrypt2" klasse="com.crypt.action.FilesCryptAction" metode="SetCrypt2"> <resultatnavn="suksess">/FilnallySuccess.jsp</result> <result name="fail">/fail.jsp</result> </action> </struts> Det tredje steget er å hoppe til FilesCryptAction etter struts2 pakke com.crypt.action; import java.io.IOException; import javax.servlet.http.HttpServletRequest; importere javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; importere com.crypt.dao.Md5_dao; importere com.opensymphony.xwork2.ActionSupport; importere com.crypt.entity.Md5FilesEntity; offentlig klasse FilesCryptAction utvider ActionSupport { privat Md5FilesEntity Md5FilesEntity = ny Md5FilesEntity(); HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); public Md5FilesEntity getMd5FilesEntity() { returner Md5FilesEntity; } public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) { Md5FilesEntity = md5FilesEntity; } public String execute() kaster IOException { Strengfilkode = null; try { fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename()); session.setAttribute("fileCode", fileCode); //Første gang det ble regnet utMD5Verdien lagres midlertidig iSesjonMiddels } catch (Unntak e) { TODO Automatisk generert fangstblokk e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode1(fileCode); returnere "suksess"; } public String SetCrypt2() { String fileCode2 = null; try { fileCode2 = Md5_dao .getFileCode("e:" + Md5FilesEntity.getFilename()); } catch (Unntak e) { TODO Automatisk generert fangstblokk e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode2(fileCode2); System.out.println("session1"+session.getAttribute("fileCode")); if (fileCode2 .equals(session.getAttribute("fileCode"))) { returnere "suksess"; } ellers { returner "fail"; } } } I det fjerde steget begynner handlingen å hoppe til Md5_dao med verdier pakke com.crypt.dao; importere com.crypt.md5.Md5Crypt_1; importere com.crypt.md5.Md5Crypt_2; offentlig klasse Md5_dao { offentlig statisk streng getFileCode(String fileName) kaster Unntak { System.out.println(filnavn); Streng-hashkode = Md5Crypt_1.getHash(filnavn, "MD5"); System.out.println(hashCode); returner hashkode; } } Det femte steget er å lage et API i systemet for å beregne MD5-verdien til en fil, så kall den direkte i DAO-en, og nå behandles den direkte i Md5Crypt_1-metoden pakke com.crypt.md5; importere java.io.*; importere java.security.*; offentlig klasse Md5Crypt_1 { offentlig statisk karakter[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; offentlig statisk void main(String[] args) kaster Unntak { Strengfilnavn = "e:/111.txt"; Streng-hashtype = "MD5"; System.out.println(hashType + " == " + getHash(fileName, hashType)); } offentlig statisk Streng getHash(Strengfilnavn, Streng hashType) kast Unntak { InputStream fis; fis = ny FileInputStream(filnavn); byte[] buffer = ny byte[1024]; MessageDigest md5 = MessageDigest.getInstance(hashType); int numRead = 0; mens ((numRead = fis.read(buffer)) > 0) { md5.update(buffer, 0, numRead); } fis.close(); gå tilbake tilHexString(md5.digest()); } offentlig statisk String toHexString(byte[] b) { StringBuilder sb = ny StringBuilder (b.lengde * 2); //Bygg en strenggenerator og initialiser den til det angitte strenginnholdet for (int i = 0; I < B.lengde; i++) { sb.append(hexChar[(b& 0xf0) >>> 4]); Legg tilmetoder legger alltid til disse tegnene på slutten av generatoren sb.append(hexChar[b& 0x0f]); } return sb.toString(); } } Trinn 6: Etter å ha beregnet verdien av MD5 i filen, lagres den første MD5 i økten i aksjon, og gjennom konfigurasjonen av struts2-konfigurasjonsfilen, hopper du til seccess.jsp, viser MD5-verdien beregnet for første gang, og ber om å starte den andre beregningen: Kildekode i Success.jsp: <body> Første gang det ble regnet utmd5Verdien er: <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L"> <s:property value="#Md5FilesEntity.fileAfterHashCode1" /> </s:iterator> <center> <form action="fileCrypt2" metode="get"> <table> <tr> <td>Filnavn:</td> <td><inputtype="file" name="Md5FilesEntity.filename" /> </td> <td><inputtype="send inn" verdi="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> Trinn 7: Start den andre innleveringen og regn den utMD5Verdien beregnes andre gang etter å ha regnet på nytt i henhold til prosessen ovenforMD5Verdien sammenlignes med verdien fra første gang, hvis den er to gangerMD5 hvis det er det samme, betyr det at det ikke er noen tukling; Hvis to gangerMD5Hvis verdien er annerledes, er dokumentet blitt tuklet med. Dermed er hele systemet fullført. Dokumentmanipulasjonssikker systemtesting Sett systemet på stativetTomact 6.0Kom opp og innse detNettLøp. Nedenfor er et testdiagram av systemet: Trinn 1: Legg til filene som må beregnes. Og slå hardt ned"Start"knappen for å begynne å regne.
Det andre steget beregnesMD5, isuccess.jspviser den første beregnedeMD5verdi, og visning. En annen beregning utføres også for å avgjøre om den er blitt tuklet med.
Det tredje steget er å utføre en andre beregning uten å tukle med dokumentetMD5verdi. Hvis det ikke er noen tukling, vil siden uten hoppet bli hoppet direkte og «filen er ikke tuklet med» vises. Hvis det er tuklet med, vil det vises at dokumentet er tuklet med.
Trinn 4: Gjør endringer i filen og gjenta testen ovenfor Første beregning:
Etter at beregningen er vellykket:
Det femte steget er å bevisst tukle med dokumentet og beregne det. I prinsippet blir dokumentet tuklet med og beregnet to gangerMD5Nei, når du sammenligner, bør du bli bedt om at filen er tuklet med.
På dette tidspunktet er testingen av hele systemet fullført.
|