Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 15992|Răspunde: 1

[Tutorial de siguranță] Și Tencent îl folosește! Sistem anti-manipulare pentru fișiere web (implementare de criptare MD5) tutorial anti-hacking

[Copiază linkul]
Postat pe 20.11.2014 14:04:34 | | | |
MD5Prezentare generală a algoritmilor
MD5Funcția este către o bucată de informație(mesaj)Generează digesturi de informații(mesaj-digest), rezumatul este unic pentru informație,Poate fi folosit ca semnătură digitală. Folosit pentru a verifica validitatea documentului(Indiferent dacă există date pierdute sau corupte),Criptarea parolei utilizatorului, valoarea hash-ului este calculată în funcția hash. Introduceți un șiret de octeți de orice lungime pentru a genera unul128Întregul bitului. Datorită unor caracteristici ireversibile ale algoritmului, acesta are o securitate bună în aplicațiile de criptare. șiMD5Utilizarea algoritmilor nu necesită plata unor taxe de drepturi de autor. Nici unicitatea, nici ireversibilitatea nu sunt absolute, analizându-le teoretic ca o relație multe-la-unu, dar probabilitatea ca două informații diferite să producă același rezumat este mică. Irreversibil înseamnă că cantitatea de calcul și timpul de calcul necesar pentru a deduce intrarea din ieșire este prea mare, iar metoda de căutare a dicționarelor necesită prea mult spațiu de stocare.
WebSistemIdei de design
Acest sistem se bazează pe Java Web, și cu ajutorulstrut2pentru a realiza acest lucru. Ideea de bază a designului este să treciWebpagina pentru a calcula un fișier în memoria externă a sistemului de două oriMD5și compară, dacă este același, fișierul nu a fost modificat, dacă este diferit, înseamnă că fișierul a fost modificat.
WebFișier de versiune idei detaliate de design pentru sisteme rezistente la manipulare: trecuteJSPRecuperează un fișier care trebuie calculat în memoria externă a sistemului.JSPDupă depunere, trecistrut2deAcțiuneSari la cu valoriJavaStrat logic. la stratul logicAcțiuneChemare medieDaometode,DaoCalculul este încapsulatMD5valoare.DaoMetodăJSPDocumente care vin și calculatoareMD5După ce calculul este finalizat, se returnează calea originală a valoriiAcțiuneAceasta este prima dată când un fișier este calculatMD5valoare, păstrează-l înSesiune, astfel încât să poată fi comparat cu al doileaMD5Valori. După prima execuție reușită, sari laSuccespagin. Acum începe a doua oară fișierulMD5Calcul, tot prin metoda de mai sus. După calculMD5După valoare, se calculează a doua oarăMD5Valoarea este aceeași ca prima calculată și se salvează înSesiuneDacă valorile sunt aceleași, nu există nicio schimbare. Dacă este diferit, înseamnă că a fost modificată.
Implementarea sistemului
Pasul 1,Index.jspCod sursă în
<!-- Index.jspAdaugă fișiere din stocarea sistemului aici-->
                <center>
                        <form action="fileCrypt" metodă="get">
                                <table>
                                        <tr>
                                                <td>Nume fișier:</td>
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Pasul 2,SuporturiCodul sursă din fișierul de configurare
<!-- struts2Fișiere de configurare-->
<struts>
        <valoare constantă="adevărat" nume="struts.devMode" />
        <valoare constantă="zh_CN" nume="struts.locale" />
        <valoare constantă="utf-8" nume="struts.i18n.encoding" />
       
        <numele pachetului="default" extinde="struts-default">
                <numele acțiunii="mdeAction" class="com.crypt.action.mdeAction"
                        metoda="codeCrype">
                        <numele rezultatului="succes">/index.jsp</result>
                </action>
                <numele acțiunii="fileCrypt" clasa="com.crypt.action.FilesCryptAction">
                        <numele rezultatului="succes">/success.jsp</result>
                </action>
                <numele acțiunii="fișierCrypt2" clasă="com.crypt.action.FilesCryptAction" metoda="SetCrypt2">
                        <numele rezultatului="succes">/FilnallySuccess.jsp</result>
                        <numele rezultatului="fail">/fail.jsp</result>
                </action>
</struts>   
Al treilea pas este să sari la FilesCryptAction după struts2
pachetul com.crypt.action;
import java.io.IOException;
import javax.servlet.http.HttpHttpServletRequest;
import javax.servlet.http.HttpHttpSession;
import org.apache.struts2.ServletActionContext;
import com.crypt.dao.Md5_dao;
import com.opensymphony.xwork2.ActionSupport;
import com.crypt.entity.Md5FilesEntity;
clasa publică FilesCryptAction extinde ActionSupport {
        privat Md5FilesEntity Md5FilesEntity = noul Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                return Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        public String execute() aruncă IOException {
                StringCode fișier = null;
                try {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //Prima dată când a fost calculatMD5Valoarea este salvată temporar înSesiuneMedie
                } prinde (Excepție e) {
                        TODO Bloc de prindere auto-generat
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                returnarea "succesului";
        }
        public String SetCrypt2() {
                Șirul fișierCodului2 = null;
                try {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } prinde (Excepție e) {
                        TODO Bloc de prindere auto-generat
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        returnarea "succesului";
                } altfel {
                        returnează "fail";
                }
        }
}
          
În al patrulea pas, acțiunea începe să sară la Md5_dao cu valori
pachetul com.crypt.dao;
import com.crypt.md5.Md5Crypt_1;
import com.crypt.md5.Md5Crypt_2;
clasa publică Md5_dao {
        public static String getFileCode(String fileName) aruncă Exception {
                System.out.println(NumeFișier);
                String hashCode = Md5Crypt_1.getHash(fileName, "MD5");
                System.out.println(hashCode);
                returnează hashCode;
        }
}       
Al cincilea pas este să creezi un API în sistem pentru a calcula valoarea MD5 a unui fișier, deci îl numești direct în DAO, iar acum este procesat direct în metoda Md5Crypt_1
pachetul com.crypt.md5;
import java.io.*;
import java.security.*;
Clasa publică Md5Crypt_1 {
        caracter static public[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        public static void main(String[] args) throws Exception {
                Nume de fișier de șir = "e:/111.txt";
                String hashType = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        public static String getHash(NumeFișier String, Tip hashString)
                        aruncă Excepția {
                InputStream fis;
                fis = new FileInputStream(fileName);
                Octet[] buffer = nou octet[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numRead = 0;
                while ((numRead = fis.read(buffer)) > 0) {
                        md5.update (buffer, 0, numRead);
                }
                fis.close();
                return laHexString(md5.digest());
        }
        public static String toHexString(byte[] b) {
                StringBuilder sb = noul StringBuilder(b.length * 2); //Construiește un generator de șiruri și inițializează-l la conținutul specificat al șirurilor
                pentru (int i = 0; Am < b.length; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); AdaugăMetodele adaugă întotdeauna aceste caractere la capătul generatorului
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
Pasul 6: După calcularea cu succes a valorii MD5 a fișierului, primul MD5 este stocat în sesiunea în acțiune, iar prin configurarea fișierului de configurare struts2, sari la seccess.jsp, afișează valoarea MD5 calculată pentru prima dată și se solicită începerea celui de-al doilea calcul:
Codul sursă în Success.jsp:
<body>
   Prima dată când a fost calculatMD5Valoarea este:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:iterator>
       
                <center>
                        <form action="fileCrypt2" metodă="get">
                                <table>
                                        <tr>
                                                <td>Nume fișier:</td>
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " rows="10" cols="41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:iterator>
        </textarea>
                        </form>
                </center>
  </body>
Pasul 7: Începe a doua depunere și calculează-oMD5Valoarea este calculată a doua oară după ce este calculată din nou, conform procesului de mai susMD5Valoarea este comparată cu valoarea primei dăți, dacă este de două oriMD5        dacă este aceeași, înseamnă că nu există nicio manipulare; Dacă de două oriMD5Dacă valoarea este diferită, documentul a fost modificat. Astfel, întregul sistem este complet.
Testarea sistemelor imposibil de manipulare a documentelor
Pune sistemul pe rackTomact 6.0Vino și realizeazăWebFugi. Mai jos este o diagramă de test a sistemului:
Pasul 1: Adaugă fișierele care trebuie calculate. Și să reprimă"Startul" pentru a începe calculul.

Al doilea pas este calculatMD5, însuccess.jsparată primul calculatMD5valoare și afișare. Un al doilea calcul este de asemenea solicitat pentru a determina dacă a fost manipulat.

Al treilea pas este efectuarea unui al doilea calcul fără a modifica documentulMD5valoare. Dacă nu există nicio manipulare, pagina fără salt va fi sărită direct și va fi afișat "fișierul nu a fost modificat". Dacă a fost modificată, va arăta că documentul a fost modificat.



Pasul 4: Fă modificări fișierului și repetă testul de mai sus
Primul calcul:


După ce calculul este reușit:

Al cincilea pas este să manipulezi deliberat documentul și să-l calculezi. În principiu, documentul este modificat și calculat de două oriMD5Nu, la comparație, ar trebui să ți se spună că fișierul a fost modificat.


În acest moment, testarea întregului sistem este finalizată.







Precedent:Asociația Antreprenorilor Remarcabili a organizat activitatea "Reciclarea deșeurilor, utilizarea resurselor"
Următor:[C#] 12306 Baza pentru luarea biletelor este realizată
Postat pe 20.11.2014 14:13:20 |
învățat
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com