Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 15992|Odpověď: 1

[Bezpečnostní tutoriál] Tencent ho také používá! Systém proti manipulaci s webovými soubory (implementace šifrování MD5) návod proti hackování

[Kopírovat odkaz]
Zveřejněno 20.11.2014 14:04:34 | | | |
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.







Předchozí:Asociace vynikajících podnikatelů uspořádala akci "Recyklace odpadu, využívání zdrojů"
Další:[C#] 12306 Základ pro sbírání lístků je realizován
Zveřejněno 20.11.2014 14:13:20 |
učený
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com