Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 15992|Risposta: 1

[Tutorial sulla sicurezza] Anche Tencent lo sta usando! Sistema anti-manomissione per file web (implementazione di crittografia MD5) tutorial anti-hacking

[Copiato link]
Pubblicato su 20/11/2014 14:04:34 | | | |
MD5Panoramica dell'algoritmo
MD5La funzione è a un pezzo di informazione(messaggio)Genera digesti informativi(messaggio-digestione), il riassunto è unico per le informazioni,Può essere utilizzato come firma digitale. Utilizzato per verificare la validità del documento(Che ci siano dati persi o corrotti),La crittografia della password dell'utente, il valore dell'hash, viene calcolato nella funzione hash. Inserisci una stringa di byte di qualsiasi lunghezza per generarne uno128L'intero del bit. Grazie ad alcune caratteristiche irreversibili dell'algoritmo, esso gode di buona sicurezza nelle applicazioni di crittografia. eMD5L'uso di algoritmi non richiede il pagamento di alcuna commissione per copyright. Né l'unicità né l'irreversibilità sono assolute, analizzandole teoricamente come una relazione molti-a-uno, ma la probabilità che due informazioni diverse producano lo stesso riassunto è bassa. Irreversibile significa che la quantità di calcolo e tempo di calcolo necessaria per dedurre l'input dall'output è troppo grande, e il metodo di ricerca dei dizionari richiede troppo spazio di archiviazione.
RagnatelaSistemaIdee di design
Questo sistema si basa su Java Web, e con l'aiuto distrut2per raggiungere questo obiettivo. L'idea di base del design è superareWebpagina per calcolare un file nella memoria esterna di sistema due volteMD5valore, e confrontare, se è lo stesso, il file non è stato manomesso, se è diverso, significa che il file è stato manomesso.
RagnatelaFile di versione, idee dettagliate di progettazione del sistema a prova di manomissione: superatoJSPRecupera un file che deve essere calcolato nella memoria esterna del sistema.JSPDopo aver inviato, superarestrut2diAzioneSalta a con valoriGiavalivello logico. al livello logicoAzioneChiamata mediadaometodi,daoIl calcolo è incapsulatoMD5valore.DaoMetodoJSPDocumenti che arrivano e calcolatriciMD5Dopo il calcolo completato, restituisci il percorso originale del valoreAzioneQuesta è la prima volta che un file viene calcolatoMD5valore, salvalo inSessione, così da poter essere confrontata con la secondaMD5Valori. Dopo la prima esecuzione riuscita, saltare aSuccessopagine. Ora inizia la seconda volta al fileMD5Calcolo, sempre con il metodo sopra descritto. Dopo il calcoloMD5Dopo il valore, viene calcolata la seconda voltaMD5Il valore è lo stesso del primo calcolato ed è salvato inSessioneSe i valori sono gli stessi, non cambia nulla. Se è diverso, significa che è stato manomesso.
Implementazione di sistema
Passo 1,Index.jspCodice sorgente in
<!-- Index.jspAggiungi file dall'archivio di sistema qui-->
                <center>
                        <form action="fileCrypt" metodo="get">
                                <table>
                                        <tr>
                                                <td>Nome file:</td>
                                                <td><input type="file" nome="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Passo 2,StrutIl codice sorgente nel file di configurazione
<!-- montanti2File di configurazione-->
<struts>
        <valore costante="true" nome="struts.devMode" />
        <valore costante="zh_CN" nome="struts.locale" />
        <valore costante="utf-8" nome="struts.i18n.encoding" />
       
        <nome del pacchetto="default" estende="struts-default">
                <nome dell'azione="mdeAzione" class="com.crypt.action.mdeAzione"
                        metodo="codeCrype">
                        <nome risultato="successo">/index.jsp</result>
                </action>
                <nome dell'azione="fileCrypt" class="com.crypt.action.FilesCryptAction">
                        <nome risultato="successo">/success.jsp</result>
                </action>
                <nome dell'azione="fileCrypt2" class="com.crypt.action.FilesCryptAction" metodo ="SetCrypt2">
                        <nome risultato="successo">/FilnallySuccess.jsp</result>
                        <nome risultato="fallito">/fail.jsp</result>
                </action>
</struts>   
Il terzo passo è saltare a FilesCryptAction dopo struts2
pacchetto com.crypt.action;
import java.io.IOException;
import javax.servlet.http.Http.HttpServletRequest;
import javax.servlet.http.HttpHttpSession;
import org.apache.struts2.ServletActionContext;
importazione com.crypt.dao.Md5_dao;
importa com.opensymphony.xwork2.ActionSupport;
importa com.crypt.entity.Md5FilesEntity;
la classe pubblica FilesCryptAction estende ActionSupport {
        privato Md5FilesEntity Md5FilesEntity = nuovo Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                return Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntityT= md5FilesEntity;
        }
        public String execute() throws IOException {
                Stringa fileCode = null;
                try {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //La prima volta che è stato calcolatoMD5Il valore viene temporaneamente salvato inSessioneMedio
                } catch (Eccezione e) {
                        TODO blocco di presa auto-generato
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                ritorno "successo";
        }
        public Stringa SetCrypt2() {
                Stringa fileCode2 = null;
                try {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } catch (Eccezione e) {
                        TODO blocco di presa auto-generato
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        ritorno "successo";
                } altrimenti {
                        restituisci "fallito";
                }
        }
}
          
Nel quarto passo, l'azione inizia a saltare al Md5_dao con i valori
pacchetto com.crypt.dao;
importazione com.crypt.md5.Md5Crypt_1;
import com.crypt.md5.Md5Crypt_2;
classe pubblica Md5_dao {
        String statico pubblico getFileCode(StringNamefile) lancia Exception {
                System.out.println(fileName);
                Stringa hashCode = Md5Crypt_1.getHash(fileName, "MD5");
                System.out.println(hashCode);
                return hashCode;
        }
}       
Il quinto passo è creare un'API nel sistema per calcolare il valore MD5 di un file, quindi chiamarlo direttamente nel DAO, e ora viene elaborato direttamente nel metodo Md5Crypt_1
pacchetto com.crypt.md5;
importazione java.io.*;
importa java.security.*;
classe pubblica Md5Crypt_1 {
        carattere statico pubblico[] 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 {
                StringstringName = "e:/111.txt";
                Stringa hashType = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        Stringa statica pubblica getHash(Nome fileStringa, Tipo di hash stringa)
                        getta Eccezione {
                InputStream fis;
                fis = nuovo FileInputStream(fileName);
                byte[] buffer = nuovo byte[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numRead = 0;
                mentre ((numRead = fis.read(buffer)) > 0) {
                        md5.update(buffer, 0, numRead);
                }
                fis.close();
                return toHexString(md5.digest());
        }
        Public static String toHexString(byte[] b) {
                StringBuilder sb = nuovo StringBuilder(b.length * 2); //Costruisci un generatore di stringhe e inizializzalo ai contenuti specificati della stringa
                per (int i = 0; Io < B.length; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); appendereI metodi aggiungono sempre questi caratteri alla fine del generatore
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
Passo 6: Dopo aver calcolato con successo il valore di MD5 del file, il primo MD5 viene memorizzato nella sessione in azione e, tramite la configurazione del file di configurazione struts2, si salta al seccess.jsp, mostra il valore MD5 calcolato per la prima volta e si avvia il secondo calcolo:
Codice sorgente in Success.jsp:
<body>
   La prima volta che è stato calcolatoMD5Il valore è:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:iteratore>
       
                <center>
                        <form action="fileCrypt2" metodo="get">
                                <table>
                                        <tr>
                                                <td>Nome file:</td>
                                                <td><input type="file" nome="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " righe="10" cols="41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:iteratore>
        </textarea>
                        </form>
                </center>
  </body>
Passo 7: Inizia la seconda sottomissione e calcolalaMD5Il valore viene calcolato la seconda volta dopo averlo calcolato di nuovo secondo il processo sopraMD5Il valore viene confrontato con il valore della prima volta, se è due volteMD5        Se è la stessa, significa che non c'è manomissione; Se due volteMD5Se il valore è diverso, il documento è stato manomesso. Così, l'intero sistema è completato.
Test di sistemi a prova di manomissione documentale
Metti il sistema sul rackTomAct 6.0Vieni su e realizzaWebCorrere. Di seguito è riportato un diagramma di prova del sistema:
Passo 1: Aggiungi i file da calcolare. E reprimere"Inizio" per iniziare a calcolare.

Il secondo passo viene calcolatoMD5, insuccess.jspmostra il primo calcolatoMD5valore e visualizzazione. Viene inoltre effettuato un secondo calcolo per determinare se sia stato manomesso.

Il terzo passo è effettuare un secondo calcolo senza interferire con il documentoMD5valore. Se non c'è alcuna manomissione, la pagina senza il salto verrà saltata direttamente e verrà visualizzato il "file non è stato manomesso". Se è stato manipolato, dimostrerà che il documento è stato manipolato.



Passo 4: Apporta modifiche al file e ripeti il test sopra
Primo calcolo:


Dopo che il calcolo è riuscito:

Il quinto passo è manomettere deliberatamente il documento e calcolarlo. In linea di principio, il documento viene manomesso e calcolato due volteMD5No, quando fai un confronto, dovresti essere informato che il file è stato manomesso.


A questo punto, i test dell'intero sistema sono completati.







Precedente:L'Associazione degli Imprenditori Eccezionali ha organizzato l'attività "Riciclo dei rifiuti, utilizzo delle risorse"
Prossimo:[C#] 12306 La base per il controllo dei biglietti è stata realizzata
Pubblicato su 20/11/2014 14:13:20 |
istruito
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com