|
MD5Algoritmeoversigt MD5Funktionen er at give et stykke information(besked)Generer informationsdigests(besked-digest), er resuméet unikt for informationen,Den kan bruges som en digital signatur. Bruges til at verificere dokumentets gyldighed(Om der er tabte eller korrupte data),Ved kryptering af brugerens adgangskode beregnes hashværdien i hashfunktionen. Indtast en bytestring af vilkårlig længde for at generere en128Heltallet af bitten. På grund af nogle irreversible egenskaber ved algoritmen har den god sikkerhed i krypteringsapplikationer. ogMD5Brugen af algoritmer kræver ikke betaling af ophavsretsgebyrer. Hverken entydighed eller irreversibilitet er absolutte, teoretisk set analyseret som et mange-til-én-forhold, men sandsynligheden for, at to forskellige informationer producerer det samme resumé, er lille. Irreversibel betyder, at mængden af beregning og beregningstid, der kræves for at udlede input fra outputtet, er for stor, og metoden til at søge efter ordbøger kræver for meget lagerplads. WebSystemDesignidéer Dette system er baseret på Java Web, og med hjælp afstrut2for at opnå dette. Den grundlæggende designidé er at beståWebSide for at beregne en fil i systemets eksterne hukommelse to gangeMD5værdi, og sammenligne, hvis filen er den samme, er den ikke blevet manipuleret med, og hvis den er anderledes, betyder det, at filen er blevet manipuleret. WebVersionsfil-manipulationssikkert system detaljerede designidéer: godkendtJSPHent en fil, der skal beregnes i systemets eksterne hukommelse.JSPEfter indsendelse, besætstrut2afAktionSpring til med værdierJavaLogiklag. ved det logiske lagAktionMellemkalddaoMetoder,daoBeregningen er indkapsletMD5værdi.DaoMetodeJSPDokumenter, der kommer forbi, og lommeregnereMD5Når beregningen er færdig, returneres den oprindelige sti for værdienAktionDette er første gang, en fil er blevet beregnetMD5værdi, gem det iSession, så den kan sammenlignes med den andenMD5Værdier. Efter den første vellykkede udførelse, spring tilSuccesside. Start nu anden gang i filenMD5Beregning, også ved ovenstående metode. Efter beregningMD5Efter værdien beregnes anden gangMD5Værdien er den samme som den første beregnede og gemmes iSessionHvis værdierne er de samme, sker der ingen ændring. Hvis det er anderledes, betyder det, at det er blevet manipuleret med. Systemimplementering Trin 1,Index.jspKildekode i <!-- Index.jspTilføj filer fra systemlageret her--> <center> <form action="fileCrypt" metode="get"> <table> <tr> <td>Filnavn:</td> <td><inputtype="fil" navn="Md5FilesEntity.filename" /> </td> <td><inputtype="indsend" værdi="start" /> </td> </tr> </table> </form> </center> Trin 2,StagstængerKildekoden i konfigurationsfilen <!-- struts2Konfigurationsfiler--> <struts> <konstant værdi="sand" navn="struts.devMode" /> <konstant værdi="zh_CN" navn="struts.locale" /> <konstant værdi="utf-8" navn="struts.i18n.encoding" /> <pakkenavn="default" extends="struts-default"> <handlingsnavn="mdeAction" klasse="com.crypt.action.mdeAction" method="codeCrype"> <resultatnavn="succes">/index.jsp</result> </action> <handlingsnavn="fileCrypt" klasse="com.crypt.action.FilesCryptAction"> <resultatnavn="succes">/success.jsp</result> </action> <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" metode="SetCrypt2"> <resultatnavn="succes">/FilnallySuccess.jsp</result> <result name="fail">/fail.jsp</result> </action> </struts> Det tredje skridt er at hoppe til FilesCryptAction efter struts2 pakken com.crypt.action; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import 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; public class FilesCryptAction udvider 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 blev det beregnetMD5Værdien gemmes midlertidigt iSessionMedium } catch (Undtagelse e) { TODO Automatisk genereret catch block e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode1(fileCode); Returner "succes"; } public String SetCrypt2() { Strengfilkode2 = null; try { fileCode2 = Md5_dao .getFileCode("e:" + Md5FilesEntity.getFilename()); } catch (Undtagelse e) { TODO Automatisk genereret catch block e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode2(fileCode2); System.out.println("session1"+session.getAttribute("fileCode")); hvis (fileCode2 .equals(session.getAttribute("fileCode"))) { Returner "succes"; } ellers { returner "fejl"; } } } I det fjerde trin begynder handlingen at springe til Md5_dao med værdier pakke com.crypt.dao; importere com.crypt.md5.Md5Crypt_1; import com.crypt.md5.Md5Crypt_2; offentlig klasse Md5_dao { offentlig statisk Streng getFileCode(String fileName) kaster Undtagelse { System.out.println(filNavn); Streng-hashkode = Md5Crypt_1.getHash(filnavn, "MD5"); System.out.println(hashCode); returner hashkode; } } Det femte trin er at lave et API i systemet til at beregne MD5-værdien af en fil, så kald den direkte i DAO'en, og nu behandles den direkte i Md5Crypt_1-metoden pakke com.crypt.md5; import 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 Undtagelse { Strengfilnavn = "e:/111.txt"; Streng-hashtype = "MD5"; System.out.println(hashType + " == " + getHash(filNavn, hashType)); } offentlig statisk Streng getHash(Strengfilnavn, Streng hashType) kast Undtagelse { 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(); return toHexString(md5.digest()); } offentlig statisk String toHexString(byte[] b) { StringBuilder sb = ny StringBuilder(b.length * 2); //Byg en strenggenerator og initialiser den til det specificerede strengindhold for (int i = 0; I < B.længde; i++) { sb.append(hexChar[(b& 0xf0) >>> 4]); TilføjMetoder tilføjer altid disse tegn til enden af generatoren sb.append(hexChar[b& 0x0f]); } return sb.toString(); } } Trin 6: Efter at have beregnet værdien af MD5 i filen, gemmes den første MD5 i sessionen i aktion, og gennem konfigurationen af struts2-konfigurationsfilen hoppes til seccess.jsp, vises MD5-værdien første gang og bedes om at starte den anden beregning: Kildekode i Success.jsp: <body> Første gang blev det beregnetmd5Værdien 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="fil" navn="Md5FilesEntity.filename" /> </td> <td><inputtype="indsend" værdi="start" /> </td> </tr> </table> </form> <form> <textarea style="text-align: left; " rækker="10" kol="41" readonly="readonly"> <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L"> <s:property value="#Md5FilesEntity.Md5FileCode" /> </s:iterator> </textarea> </form> </center> </body> Trin 7: Start den anden indsendelse og beregn denMD5Værdien beregnes anden gang efter at have regnet den igen i henhold til ovenstående procesMD5Værdien sammenlignes med værdien fra første gang, hvis den er to gangeMD5 hvis det er det samme, betyder det, at der ikke er nogen manipulation; Hvis to gangeMD5Hvis værdien er forskellig, er dokumentet blevet manipuleret med. Dermed er hele systemet færdigt. Dokumentmanipulationssikker systemtest Sæt systemet på stativetTomact 6.0Kom op og indse detWebLøb. Nedenfor er et testdiagram over systemet: Trin 1: Tilføj de filer, der skal beregnes. Og slå ned"Start"knappen for at begynde at beregne.
Det andet trin beregnesMD5, isuccess.jspviser den første beregnedeMD5værdi og visning. En anden beregning foretages også for at afgøre, om den er blevet manipuleret med.
Det tredje trin er at udføre en anden beregning uden at pille ved dokumentetMD5værdi. Hvis der ikke er nogen manipulation, vil siden uden springet blive sprunget direkte, og "filen er ikke blevet manipuleret med" vil blive vist. Hvis det er blevet manipuleret med, vil det vise, at dokumentet er blevet manipuleret med.
Trin 4: Foretag ændringer i filen og gentag ovenstående test Første beregning:
Efter beregningen er succesfuld.:
Det femte trin er bevidst at manipulere dokumentet og regne det ud. I princippet bliver dokumentet manipuleret og beregnet to gangeMD5Nej, når du sammenligner, bør du blive bedt om, at filen er blevet manipuleret med.
På dette tidspunkt er testningen af hele systemet afsluttet.
|