Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 15992|Válasz: 1

[Biztonsági oktató] A Tencent is használja! Webfájlok manipulációellenes rendszere (MD5 titkosítás megvalósítása) hackelésellenes oktató

[Linket másol]
Közzétéve 2014. 11. 20. 14:04:34 | | | |
MD5Algoritmus áttekintés
MD5A funkció egy információ darab(üzenet)Információ összeállítások generálása(üzenet-összefoglaló), az összefoglaló egyedi az információra jellemző,Digitális aláírásként is használható. A dokumentum érvényességének ellenőrzésére használták(Hogy elveszett vagy sérült adat van-e),A felhasználó jelszavának titkosítása, a hash értéket a hash függvényben számítják ki. Írj be bármilyen hosszúságú bytestringet, hogy létrehozz egyet128A bit egész száma. Az algoritmus néhány visszafordíthatatlan tulajdonsága miatt jó biztonságot nyújt a titkosítási alkalmazásokban. ésMD5Az algoritmusok használata nem igényel szerzői jogi díjak kifizetését. Sem az egyediség, sem a visszafordíthatatlanság nem abszolút, elméletileg sok-egy kapcsolatként elemezzük, de annak valószínűsége, hogy két különböző információ ugyanazt az összefoglalót adja, kicsi. Az irreverzibilis azt jelenti, hogy a bemenet kivonásához szükséges számítási és számítási idő túl nagy, és a szótárak keresése túl sok tárolóhelyet igényel.
WebRendszerTervezési ötletek
Ez a rendszer a Java Weben alapul, és astrut2hogy ezt elérje. Az alapvető tervezési ötlet, hogy átmenjWeboldal, hogy kétszer is kiszámolja a fájlt a rendszer külső memóriájábanMD5és összehasonlítsuk, ha ugyanaz, akkor a fájlt nem manipulálták, ha más, az azt jelenti, hogy a fájlt manipulálták.
WebVerziófájl-ellenőrző rendszer részletes tervezési ötletek: átmentJSPSzerezzen egy fájlt, amelyet a rendszer külső memóriájában kell kiszámítani.JSPBeadás után átaddstrut2ofAkcióUgorjunk az értékekhezJavalogikai réteg. a logikai rétegnélAkcióKözepes hívásDaomódszerek,DaoA számítás be van zárvaMD5érték.DaoMódszerJSPDokumentumok, amelyek átérkeznek, és számológépekMD5A számítás befejezése után visszaadja az érték eredeti útjátAkcióEz az első alkalom, hogy egy fájlt kiszámítottakMD5érték, tartsd beSzekció, így összehasonlítható a másodikMD5Értékek. Az első sikeres kivégzés után ugorj aSikeroldal. Most kezdjük el a fájl második alkalmajátMD5Számítás is a fenti módszerrel. Számítás utánMD5Az érték után a második alkalom számít kiMD5Az érték megegyezik az elsővel, és mentődikSzekcióHa az értékek ugyanazok, nincs változás. Ha más, az azt jelenti, hogy manipulálták.
Rendszer megvalósítása
1. lépés,Index.jspForráskód a
<!-- Index.jspFájlok hozzáadása a rendszertárból itt-->
                <center>
                        <form action="fileCrypt" method="get">
                                <table>
                                        <tr>
                                                <td>Fájlnév:</td>
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
2. lépés,TartókA konfigurációs fájlban lévő forráskód
<!-- tartótartók2Konfigurációs fájlok-->
<struts>
        <constant value="true" name="struts.devMode" />
        <állandó érték="zh_CN" name="struts.locale" />
        <constant value="utf-8" name="struts.i18n.encoding" />
       
        <package name="default" extends="struts-default">
                <action name="mdeAction" class="com.crypt.action.mdeAction"
                        method="codeCrype">
                        <result name="siker">/index.jsp</result>
                </action>
                <action name="fileCrypt" class="com.crypt.action.FilesCryptAction">
                        <result name="siker">/success.jsp</result>
                </action>
                <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" method="SetCrypt2">
                        <result name="siker">/FilnallySuccess.jsp</result>
                        <result name="fail">/fail.jsp</result>
                </action>
</struts>   
A harmadik lépés a struts2 után a FilesCryptAction opcióra való ugrás
com.crypt.action csomag;
importál java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
importos com.crypt.dao.Md5_dao;
importál com.opensymphony.xwork2.ActionSupport;
importál com.crypt.entity.Md5FilesEntity;
public class FilesCryptAction bővíti az ActionSupport {
        private Md5FilesEntity Md5FilesEntity = új Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                return Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        public String execute() dob IOException {
                String fileCode = null;
                try {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //Az első alkalommal, amikor kiszámítottákMD5Az érték ideiglenesen elmentődikSzekcióKözepes
                } fogás (Kivétel e) {
                        TODO Automatikusan generált fogóblokk
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                "siker" visszatérés;
        }
        public String SetCrypt2() {
                String fileCode2 = null;
                try {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } fogás (Kivétel e) {
                        TODO Automatikusan generált fogóblokk
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        "siker" visszatérés;
                } más {
                        vissza "fail";
                }
        }
}
          
A negyedik lépésben az akció elkezd ugrani az értékekkel rendelkező Md5_dao
com.crypt.dao csomag;
importos com.crypt.md5.Md5Crypt_1;
importot com.crypt.md5.Md5Crypt_2;
Nyilvános osztály 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;
        }
}       
Az ötödik lépés, hogy létrehozunk egy API-t a rendszerben, amely kiszámítja egy fájl MD5 értékét, így közvetlenül a DAO-ban hívjuk, és most közvetlenül a Md5Crypt_1 módszerrel dolgozzák fel
com.crypt.md5 csomag;
importálás java.io.*;
import java.security.*;
Nyilvános osztály Md5Crypt_1 {
        nyilvános statikus karakter[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        public static void main(String[] args) dob Exception {
                String fileName = "e:/111.txt";
                String hashType = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        public static String getHash(String fileName, String hashType)
                        dobja Kivétel {
                InputStream fis;
                fis = új FileInputStream (fileName);
                byte[] buffer = új bájt[1024];
                MessageDigest md5 = MessageDigest.getInstance (hashType);
                int numRead = 0;
                míg ((numRead = fis.read(buffer)) > 0) {
                        md5.update(buffer, 0, numRead);
                }
                fis.close();
                return to HexString(md5.digest());
        }
        public static String toHexString(byte[] b) {
                StringBuilder sb = új StringBuilder(b.length * 2); //Építs egy stringgenerátort, és inicializáld a megadott string tartalmához
                for (int i = 0; I < b.length; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); csatolása metódok mindig hozzáadják ezeket a karaktereket a generátor végéhez
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
6. lépés: Miután sikeresen kiszámították a fájl MD5 értékét, az első MD5 elmarad a működés közben lévő ülésben, és a struts2 konfigurációs fájl konfigurációján keresztül ugrunk a seccess.jsp-re, megjelenítjük az első alkalommal kiszámított MD5 értéket, és felszólítjuk a második számítás elindítását:
Forráskód Success.jsp-ben:
<body>
   Az első alkalommal, amikor kiszámítottákMD5Az érték a következőképpen:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:iterátor>
       
                <center>
                        <form action="fileCrypt2" method="get">
                                <table>
                                        <tr>
                                                <td>Fájlnév:</td>
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: bal; " sorok = "10" érzőpontok = "41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:iterátor>
        </textarea>
                        </form>
                </center>
  </body>
7. lépés: Kezdjük el a második beküldést és számold kiMD5Az értéket másodszor számolják ki, miután újra kiszámítjuk a fenti eljárás szerint.MD5Az értéket az első alkalom értékével hasonlítjuk össze, ha kétszerMD5        ha ugyanaz, az azt jelenti, hogy nincs manipuláció; Ha kétszerMD5Ha az érték eltér, akkor a dokumentumot manipulálták. Így az egész rendszer befejeződik.
Dokumentumhamisítás-ellenes rendszer tesztelése
Tedd a rendszert a rackreTomact 6.0Feljöjjön és rájöjjönWebFuss. Az alábbiakban a rendszer tesztdiagramja látható:
1. lépés: Add hozzá azokat a fájlokat, amiket ki kell számolni. És lépj fel"Kezdés" gombot, hogy elkezdj számolni.

A második lépést kiszámítjukMD5, insuccess.jspmegmutatja az első kiszámítottMD5érték és megjelenítés. Egy második számítást is indítanak annak megállapítására, hogy manipuláltak-e vele.

A harmadik lépés, hogy a dokumentum manipulálása nélkül végezz egy második számítástMD5érték. Ha nincs manipuláció, akkor az oldal, ahol nincs ugrás, közvetlenül ugranak, és megjelenik a "fájl nem manipulált" jelenik meg. Ha manipulálták, akkor az azt mutatja, hogy a dokumentumot manipulálták.



4. lépés: Változtatásokat végezzen a fájlban, és ismételje meg a fenti tesztet
Első számítás:


Miután a számítás sikeres lett:

Az ötödik lépés, hogy szándékosan manipuláljuk a dokumentumot és kiszámolod azt. Elvileg a dokumentumot kétszer is manipulálják és kiszámítjákMD5Nem, összehasonlításkor azt kell jelezni, hogy a fájlt manipulálták.


Ekkor a teljes rendszer tesztelése befejeződött.







Előző:A Kiváló Vállalkozók Szövetsége megtartotta a "Hulladék újrahasznosítása, erőforrás-felhasználás" tevékenységet
Következő:[C#] 12306 A jegyfoglalás alapja megvalósul
Közzétéve 2014. 11. 20. 14:13:20 |
tanult
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com