Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 15992|Atsakyti: 1

[Saugos pamoka] "Tencent" taip pat juo naudojasi! Apsaugos nuo klastojimo sistema žiniatinklio failams (MD5 šifravimo diegimas) apsaugos nuo įsilaužimo pamoka

[Kopijuoti nuorodą]
Paskelbta 2014-11-20 14:04:34 | | | |
MD5Algoritmo apžvalga
MD5Funkcija yra informacijos dalis(pranešimas)Generuoti informacijos santraukas(pranešimas-santrauka), suvestinė yra unikali informacijai,Jis gali būti naudojamas kaip skaitmeninis parašas. Naudojamas dokumento galiojimui patikrinti(Ar yra prarastų ar sugadintų duomenų),Vartotojo slaptažodžio šifravimas, maišos vertė apskaičiuojama maišos funkcijoje. Įveskite bet kokio ilgio bytestringą, kad jį sugeneruotumėte128Sveikasis bitų skaičius. Dėl kai kurių negrįžtamų algoritmo savybių jis turi gerą šifravimo programų saugumą. irMD5Naudojant algoritmus nereikia mokėti jokių autorių teisių mokesčių. Nei unikalumas, nei negrįžtamumas nėra absoliutūs, teoriškai analizuojant jį kaip ryšį "daugelis su vienu", tačiau tikimybė, kad dvi skirtingos informacijos dalys sukurs tą pačią santrauką, yra maža. Negrįžtamas reiškia, kad skaičiavimo ir skaičiavimo laikas, reikalingas įvesties išvedimui iš išvesties, yra per didelis, o žodynų paieškos metodas reikalauja per daug vietos saugykloje.
ŽiniatinklissistemaDizaino idėjos
Ši sistema pagrįsta Java Webir pasitelkusstatramstis2šiam tikslui pasiekti. Pagrindinė dizaino idėja yra išlaikytiŽiniatinklispuslapis, kad du kartus apskaičiuotumėte failą sistemos išorinėje atmintyjeMD5ir palyginkite, jei jis tas pats, failas nebuvo sugadintas, jei jis skiriasi, tai reiškia, kad failas buvo sugadintas.
ŽiniatinklisVersija failas nuo klastojimo apsaugotos sistemos Išsamios dizaino idėjos: praėjoJSPGaukite failą, kurį reikia apskaičiuoti išorinėje sistemos atmintyje.JSPPateikę išlaikykitestatramstis2VeiksmasPereiti prie su reikšmėmisjavaloginis sluoksnis. loginiame lygmenyjeVeiksmasVidutinis skambutisdaometodai,daoSkaičiavimas yra kapsuliuotasMD5vertę.DaoMetodasJSPAteinantys dokumentai ir skaičiuotuvaiMD5Baigę skaičiavimą, grąžinkite pradinį reikšmės keliąVeiksmasTai pirmas kartas, kai failas skaičiuojamasMD5vertę, išsaugokite jąSesija, kad jį būtų galima palyginti su antruojuMD5Vertybės. Po pirmojo sėkmingo vykdymo pereikite prieSėkmėpuslapyje. Dabar pradėkite antrą failo kartąMD5Skaičiavimas, taip pat aukščiau nurodytu metodu. Po skaičiavimoMD5Po vertės apskaičiuojamas antras kartasMD5Reikšmė yra tokia pati kaip pirmoji apskaičiuota ir įrašomasesijaJei reikšmės yra vienodos, nesikeičia. Jei jis skiriasi, tai reiškia, kad jis buvo sugadintas.
Sistemos diegimas
1 žingsnis,Index.jspšaltinio kodas
<!-- Index.jspČia pridėkite failus iš sistemos saugyklos-->
                <center>
                        <form action="fileCrypt" method="get">
                                <table>
                                        <tr>
                                                <td>Failo vardas</td>:
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
2 žingsnis,statramsčiaiKonfigūracijos failo šaltinio kodas
<!-- statramsčiai2Konfigūracijos failai-->
<struts>
        <constant value="true" name="struts.devMode" />
        <constant value="zh_CN" name="struts.locale" />
        <constant value="utf-8" name="struts.i18n.encoding" />
       
        <paketo pavadinimas="default" extends="struts-default">
                <veiksmo pavadinimas="mdeAction" class="com.crypt.action.mdeAction"
                        method="codeCrype">
                        <result name="success">/index.jsp</result>
                </action>
                <veiksmo pavadinimas="fileCrypt" class="com.crypt.action.FilesCryptAction">
                        <result name="success">/success.jsp</result>
                </action>
                <veiksmo pavadinimas="fileCrypt2" class="com.crypt.action.FilesCryptAction" method="SetCrypt2">
                        <result name="success">/FilnallySuccess.jsp</result>
                        <result name="fail">/fail.jsp</result>
                </action>
</struts>   
Trečias žingsnis yra pereiti prie FilesCryptAction po statramsčių2
paketas com.crypt.action;
importuoti java.io.IOException;
importuoti javax.servlet.http.HttpServletRequest;
importuoti javax.servlet.http.HttpSession;
importuoti org.apache.struts2.ServletActionContext;
importo com.crypt.dao.Md5_dao;
importuoti com.opensymphony.xwork2.ActionSupport;
importuoti com.crypt.entity.Md5FilesEntity;
viešoji klasė FilesCryptAction išplečia ActionSupport {
        privatus Md5FilesEntity Md5FilesEntity = naujas Md5FilesEntity();
       
        HttpServletRequest užklausa = ServletActionContext.getRequest();
        HttpSession sesija = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                grąžinti Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        public String execute() meta IOException {
                Eilutės failo kodas = null;
                pabandykite {
                        failo kodas = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("failo kodas", failo kodas); //Pirmą kartą jis buvo apskaičiuotasMD5Reikšmė laikinai išsaugomasesijaVidutinis
                } laimikis (e išimtis) {
                        TODO Automatiškai sugeneruotas gaudymo blokas
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(failo kodas);
                grąžinti "sėkmę";
        }
        viešoji eilutė SetCrypt2() {
                Eilutės failasCode2 = nulinis;
                pabandykite {
                        failo kodas2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } laimikis (e išimtis) {
                        TODO Automatiškai sugeneruotas gaudymo blokas
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(failo kodas2);
                System.out.println("session1"+session.getAttribute("failo kodas"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        grąžinti "sėkmę";
                } else {
                        grąžinti "nepavyko";
                }
        }
}
          
Ketvirtame žingsnyje veiksmas pradeda šokinėti į Md5_dao su reikšmėmis
paketas com.crypt.dao;
importo com.crypt.md5.Md5Crypt_1;
importo com.crypt.md5.Md5Crypt_2;
Viešoji klasė Md5_dao {
        viešoji statinė eilutė getFileCode(String fileName) išmeta Išimtis {
                System.out.println(failo pavadinimas);
                String hashCode = Md5Crypt_1.getHash(fileName, "MD5");
                System.out.println(maišos kodas);
                grąžinti maišos kodą;
        }
}       
Penktas žingsnis yra sukurti API sistemoje, kad būtų galima apskaičiuoti failo MD5 vertę, todėl iškvieskite jį tiesiai į DAO, o dabar jis tiesiogiai apdorojamas Md5Crypt_1 metodu
paketas com.crypt.md5;
importo java.io.*;
importuoti java.security.*;
Viešoji klasė Md5Crypt_1 {
        public static char[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        public static void main(String[] args) meta Išimtis {
                String fileName = "e:/111.txt";
                String hashType = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        viešoji statinė eilutė getHash(String fileName, String hashType)
                        meta Išimtis {
                InputStream fis;
                fis = naujas FileInputStream(failo pavadinimas);
                baitas[] buferis = naujas baitas[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numRead = 0;
                o ((numRead = fis.read(buffer)) > 0) {
                        md5.update(buferis, 0, numRead);
                }
                fis.close();
                grįžti įHexString(md5.digest());
        }
        public static String toHexString(byte[] b) {
                StringBuilder sb = naujas StringBuilder(b.length * 2); //Sukurkite eilučių generatorių ir inicijuokite jį į nurodytą eilutės turinį
                for (int i = 0; I < b.ilgis; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); Pridėtimetodai visada prideda šiuos simbolius generatoriaus pabaigoje
                        sb.append(hexChar[b& 0x0f]);
                }
                grąžinti sb.toString();
        }
}
Žingsnis 6: Sėkmingai apskaičiavus failo MD5 vertę, pirmasis MD5 išsaugomas veikiančioje sesijoje ir, sukonfigūravus statramsčių2 konfigūracijos failą, pereikite prie seccess.jsp, parodykite pirmą kartą apskaičiuotą MD5 vertę ir paraginkite pradėti antrą skaičiavimą:
Šaltinio kodas Success.jsp:
<body>
   Pirmą kartą jis buvo apskaičiuotasmd5Vertė yra:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:iteratorius>
       
                <center>
                        <form action="fileCrypt2" method="get">
                                <table>
                                        <tr>
                                                <td>Failo vardas</td>:
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: kairėje; " rows="10" cols="41"
                                        readonly="tik skaityti">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:iteratorius>
        </textarea>
                        </form>
                </center>
  </body>
7 veiksmas: pradėkite antrą pateikimą ir apskaičiuokite jįMD5Vertė apskaičiuojama antrą kartą, dar kartą ją apskaičiavus pagal aukščiau pateiktą procesąMD5Vertė lyginama su pirmo karto verte, jei ji yra du kartusMD5        jei jis yra tas pats, tai reiškia, kad nėra klastojimo; Jei du kartusMD5Jei vertė skiriasi, dokumentas buvo suklastotas. Taigi visa sistema yra užbaigta.
Dokumentų nesuklastojimo sistemos testavimas
Padėkite sistemą ant stovoTomact 6.0ateiti ir suvoktiŽiniatinklisBėk. Žemiau pateikiama sistemos bandymo schema:
1 žingsnis: Pridėkite failus, kuriuos reikia apskaičiuoti. Ir susidoroti"Pradėti", kad pradėtumėte skaičiuoti.

Apskaičiuojamas antrasis žingsnisMD5,success.jsprodo pirmąjį apskaičiuotąMD5reikšmę ir ekraną. Antrasis skaičiavimas taip pat raginamas nustatyti, ar jis buvo suklastotas.

Trečias žingsnis - atlikti antrą skaičiavimą nesugadinant dokumentoMD5vertę. Jei nėra klastojimo, puslapis be šuolio bus peršoktas tiesiai ir bus rodomas "failas nebuvo sugadintas". Jei jis buvo suklastotas, tai parodys, kad dokumentas buvo suklastotas.



4 veiksmas: pakeiskite failą ir pakartokite aukščiau pateiktą testą
Pirmasis skaičiavimas:


Po sėkmingo skaičiavimo:

Penktas žingsnis - sąmoningai suklastoti dokumentą ir jį apskaičiuoti. Iš esmės dokumentas yra suklastotas ir apskaičiuojamas du kartusMD5Ne, lygindami turėtumėte būti paraginti, kad failas buvo sugadintas.


Šiuo metu visos sistemos testavimas baigtas.







Ankstesnis:Išskirtinių verslininkų asociacija vykdė veiklą "Atliekų perdirbimas, išteklių panaudojimas"
Kitą:[C#] 12306 Realizuotas bilietų grobimo pagrindas
Paskelbta 2014-11-20 14:13:20 |
Sužinojau
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com