|
MD5Přehled algoritmu MD5Funkce je k určité informaci(zpráva)Generujte informační přehledy(zpráva-digest), shrnutí je jedinečné pro informace,Lze jej použít jako digitální podpis. Používá se k ověření platnosti dokumentu(Zda došlo ke ztrátě nebo poškození dat),Při šifrování uživatelského hesla se hash hodnota vypočítává v hashovací funkci. Zadejte bajtový řetězec libovolné délky, abyste ho vygenerovali128Celé číslo bitu. Díky některým nevratným vlastnostem algoritmu má v šifrovacích aplikacích dobré zabezpečení. aMD5Používání algoritmů nevyžaduje placení žádných poplatků za autorská práva. Ani jedinečnost, ani nevratnost nejsou absolutní, teoreticky je analyzujeme jako vztah mnoho-na-jedné, ale pravděpodobnost, že dvě různé informace povedou ke stejnému shrnutí, je malá. Nevratné znamená, že množství výpočtu a času potřebného k odvození vstupu z výstupu je příliš velké a metoda vyhledávání slovníků vyžaduje příliš mnoho úložného prostoru. WebSystémNápady na design Tento systém je založen na Java Web, a s pomocíStrut2aby toho dosáhl. Základní myšlenka návrhu je projítWebstránce pro výpočet souboru v externí paměti systému dvakrátMD5a porovnání, pokud je stejný, soubor nebyl pozměněn, pokud je jiný, znamená to, že soubor byl pozměněn. WebSystém odolný proti manipulaci s verzemi souborů – detailní návrhy návrhu: schválenýJSPZískejte soubor, který je třeba vypočítat v externí paměti systému.JSPPo odevzdání přeskočStrut2zAkcePřeskočit na s hodnotamiJavalogická vrstva. na logické vrstvěAkceStřední voláníDAOMetody,DAOVýpočet je zapouzdřenMD5hodnotu.DaoMetodaJSPDokumenty, které přicházejí, a kalkulačkyMD5Po dokončení výpočtu vraťte původní cestu hodnotyAkceJe to poprvé, co byl soubor vypočítánMD5hodnotu, ulož ji doZasedání, aby jej bylo možné porovnat s druhouMD5Hodnoty. Po první úspěšné provedení přejděte naÚspěchstránka. Nyní začni podruhé se souboremMD5Výpočty, také výše uvedenou metodou. Po výpočtuMD5Po této hodnotě se počítá druhý časMD5Hodnota je stejná jako při prvním vypočítání a ukládá se vZasedáníPokud jsou hodnoty stejné, žádná změna nenastane. Pokud je jiný, znamená to, že byl upraven. Implementace systému Krok 1,Index.jspZdrojový kód v <!-- Index.jspPřidejte soubory ze systémového úložiště zde--> <center> <form action="fileCrypt" method="get"> <table> <tr> <td>Název souboru</td>: <td><input type="file" name="Md5FilesEntity.filename" /> </td> <td><typ vstupu=hodnota "odeslat" = "začít" /> </td> </tr> </table> </form> </center> Krok 2,VzpěryZdrojový kód v konfiguračním souboru <!-- vzpěry2Konfigurační soubory--> <struts> <konstantní hodnota="true" jméno="struts.devMode" /> <konstantní hodnota="zh_CN" jméno="struts.locale" /> <konstantní hodnota="utf-8" jméno="struts.i18n.encoding" /> <název balíčku="default" extends="struts-default"> <název akce="mdeAction" class="com.crypt.action.mdeAction" method="codeCrype"> <název výsledku="úspěch">/index.jsp</result> </action> <název akce="fileCrypt" class="com.crypt.action.FilesCryptAction"> <název výsledku="úspěch">/success.jsp</result> </action> <název akce="fileCrypt2" class="com.crypt.action.FilesCryptAction" metoda="SetCrypt2"> <název výsledku="úspěch">/FilnallySuccess.jsp</result> <název výsledku="fail">/fail.jsp</result> </action> </struts> Třetím krokem je přejít na FilesCryptAction po struts2 balíček com.crypt.action; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpHttpSession; import org.apache.struts2.ServletActionContext; importní com.crypt.dao.Md5_dao; import com.opensymphony.xwork2.ActionSupport; import com.crypt.entity.Md5FilesEntity; public class FilesCryptAction rozšiřuje ActionSupport { soukromý Md5FilesEntity Md5FilesEntity = nový Md5FilesEntity(); HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); public Md5FilesEntity getMd5FilesEntity() { return Md5FilesEntity; } public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) { Md5FilesEntity = md5FilesEntity; } public String execute() hodí IOException { String fileCode = null; try { fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename()); session.setAttribute("fileCode", fileCode); //Poprvé to bylo spočítánoMD5Hodnota je dočasně uložena vZasedáníStředně } catch (Exception e) { TODO Automaticky generovaný blok zachycení e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode1(fileCode); návrat "úspěchu"; } public String SetCrypt2() { String fileCode2 = null; try { fileCode2 = Md5_dao .getFileCode("e:" + Md5FilesEntity.getFilename()); } catch (Exception e) { TODO Automaticky generovaný blok zachycení e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode2(fileCode2); System.out.println("session1"+session.getAttribute("fileCode")); if (fileCode2 .equals(session.getAttribute("fileCode"))) { návrat "úspěchu"; } jinak { return "fail"; } } } Ve čtvrtém kroku se akce začne přesouvat na Md5_dao s hodnotami balíček com.crypt.dao; importní com.crypt.md5.Md5Crypt_1; import com.crypt.md5.Md5Crypt_2; veřejná třída 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; } } Pátým krokem je vytvořit API v systému, které spočítá hodnotu MD5 souboru, tedy jej přímo zavolat v DAO a nyní je přímo zpracováno metodou Md5Crypt_1 balíček com.crypt.md5; import java.io.*; import java.security.*; veřejná třída Md5Crypt_1 { veřejný statický char[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; public static void main(String[] args) hází Výjimka { String fileName = "e:/111.txt"; String hashType = "MD5"; System.out.println(hashType + " == " + getHash(fileName, hashType)); } public static String getHash(Název souboru řetězce, Typ hashe řetězce) hodí Výjimka { InputStream fis; fis = nový FileInputStream(fileName); byte[] buffer = nový byte[1024]; MessageDigest md5 = MessageDigest.getInstance(hashType); int numRead = 0; zatímco ((numRead = fis.read(buffer)) > 0) { md5.update(buffer, 0, numRead); } fis.close(); return toHexString(md5.digest()); } public static String toHexString(byte[] b) { StringBuilder sb = nový StringBuilder(b.délka * 2); //Sestavte generátor řetězců a inicializujte ho na zadaný obsah řetězce pro (int i = 0; I < B.Length; i++) { sb.append(hexChar[(b& 0xf0) >>> 4]); připojitMetody vždy přidávají tyto znaky na konec generátoru sb.append(hexChar[b& 0x0f]); } return sb.toString(); } } Krok 6: Po úspěšném výpočtu hodnoty MD5 souboru je první MD5 uložen v relaci v akci a prostřednictvím konfigurace konfiguračního souboru struts2 přeskočí na seccess.jsp, zobrazí se hodnota MD5 vypočítaná poprvé a vyzve se k zahájení druhého výpočtu: Zdrojový kód v Success.jsp: <body> Poprvé to bylo spočítánoMD5Hodnota je: <s:hodnota iterátoru="Md5FilesEntity" id="Md5FilesEntity" stav="L"> <s:property value="#Md5FilesEntity.fileAfterHashCode1" /> </s:iterátor> <center> <form action="fileCrypt2" method="get"> <table> <tr> <td>Název souboru</td>: <td><input type="file" name="Md5FilesEntity.filename" /> </td> <td><typ vstupu=hodnota "odeslat" = "začít" /> </td> </tr> </table> </form> <form> <textarea style="text-align: left; " řádky="10" koly="41" readonly="readonly"> <s:hodnota iterátoru="Md5FilesEntity" id="Md5FilesEntity" stav="L"> <s:property value="#Md5FilesEntity.Md5FileCode" /> </s:iterátor> </textarea> </form> </center> </body> Krok 7: Začněte druhý příspěvek a spočítajte hoMD5Hodnota se vypočítá podruhé po jejím opětovném výpočtu podle výše uvedeného procesuMD5Hodnota se porovnává s hodnotou poprvé, pokud je to dvakrátMD5 pokud je stejná, znamená to, že nedochází k žádné manipulaci; Pokud dvakrátMD5Pokud je hodnota jiná, dokument byl upraven. Tím je celý systém dokončen. Testování systémů odolných vůči manipulaci s dokumenty Dej systém na stojanTomact 6.0přijď nahoru a uvědom si toWebUtíkej. Níže je testovací diagram systému: Krok 1: Přidejte soubory, které je potřeba vypočítat. A zakročit"Start" tlačítko pro zahájení výpočtu.
Druhý krok je vypočítánMD5, vsuccess.jspukazuje první vypočítanýMD5hodnotu a prezentaci. Je také vyzvána druhá kalkulace, která určí, zda nebyla pozměněna.
Třetím krokem je provést druhý výpočet bez zásahu do dokumentuMD5hodnotu. Pokud nedochází k manipulaci, stránka bez přeskoku bude přeskočena přímo a zobrazí se "soubor nebyl manipulován". Pokud byl dokument pozměněn, bude to ukazovat, že dokument byl pozměněn.
Krok 4: Provedete změny v souboru a opakujte výše uvedený test První výpočt:
Po úspěšném výpočtu:
Pátým krokem je úmyslné manipulování s dokumentem a jeho výpočt. V zásadě je dokument upravován a vypočítán dvakrátMD5Ne, při porovnávání byste měli být upozorněni, že soubor byl pozměněn.
V této fázi je testování celého systému dokončeno.
|