Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 15992|Antwort: 1

[Sicherheits-Tutorial] Tencent nutzt es ebenfalls! Anti-Manipulationssystem für Webdateien (MD5-Verschlüsselungsimplementierung) Anti-Hacking-Tutorial

[Link kopieren]
Veröffentlicht am 20.11.2014 14:04:34 | | | |
MD5Algorithmusübersicht
MD5Die Funktion ist ein Informationsstück(Nachricht)Generiere Informationsdigests(Nachricht-Digest), die Zusammenfassung ist einzigartig für die Informationen,Sie kann als digitale Signatur verwendet werden. Verwendet zur Überprüfung der Gültigkeit des Dokuments(Ob Daten verloren gehen oder beschädigt sind),Bei der Verschlüsselung des Passworts des Benutzers wird der Hashwert in der Hashfunktion berechnet. Geben Sie eine Bytestring beliebiger Länge ein, um eine zu erzeugen128Die ganze Zahl des Bits. Aufgrund einiger irreversibler Eigenschaften des Algorithmus bietet er eine gute Sicherheit in Verschlüsselungsanwendungen. undMD5Der Einsatz von Algorithmen erfordert keine Zahlung von Urheberrechtsgebühren. Weder Eindeutigkeit noch Irreversibilität sind absolut, theoretisch werden sie als viele-zu-eins-Beziehung analysiert, aber die Wahrscheinlichkeit, dass zwei verschiedene Informationen dieselbe Zusammenfassung erzeugen, ist gering. Irreversibel bedeutet, dass die Menge an Berechnung und Rechenzeit, die benötigt wird, um die Eingabe aus der Ausgabe abzuleiten, zu groß ist und die Suche nach Wörterbüchern zu viel Speicherplatz benötigt.
WebSystemDesignideen
Dieses System basiert auf Java Web, und mit Hilfe vonstrut2um dies zu erreichen. Die grundlegende Designidee ist, zu bestehenWebPage, um eine Datei im externen Speicher des Systems zweimal zu berechnenMD5Wert und Vergleich, wenn es dasselbe ist, wurde die Akte nicht manipuliert; wenn sie anders ist, bedeutet das, dass die Akte manipuliert wurde.
WebVersionsdatei manipulationssicheres System detaillierte Designideen: bestandenJSPRufen Sie eine Datei ab, die im externen Speicher des Systems berechnet werden muss.JSPNach der Abgabe übergeben, passierenstrut2vonAktionSpringen Sie zu mit WertenJavaLogikschicht. an der logischen SchichtAktionMittlerer RufDaoMethoden,DaoDie Berechnung ist gekapseltMD5Wert.DaoMethodeJSPDokumente, die vorbeikommen, und TaschenrechnerMD5Nach Abschluss der Berechnung geben Sie den ursprünglichen Pfad des Wertes zurückAktionDies ist das erste Mal, dass eine Datei berechnet wurdeMD5Wert, speichere es inSitzung, sodass sie mit der zweiten verglichen werden kannMD5Werte. Nach der ersten erfolgreichen Ausführung springen Sie zuErfolgPage. Jetzt starte das zweite Mal der DateiMD5Berechnung, ebenfalls nach der oben genannten Methode. Nach der BerechnungMD5Nach dem Wert wird das zweite Mal berechnetMD5Der Wert ist derselbe wie der zuerst berechnete und wird gespeichert inSitzungWenn die Werte gleich sind, gibt es keine Veränderung. Wenn es anders ist, bedeutet das, dass es manipuliert wurde.
Systemimplementierung
Schritt 1,Index.jspQuellcode in
<!-- Index.jspHier Dateien aus dem Systemspeicher hinzufügen-->
                <center>
                        <form action="fileCrypt" method="get">
                                <table>
                                        <tr>
                                                <td>Dateiname</td>:
                                                <td><Eingabetyp="Dateiname="Md5FilesEntity.filename" />
                                                </td>
                                                <td><Eingabetyp="Einreichen" Wert="Start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Schritt 2,StrebenDer Quellcode in der Konfigurationsdatei
<!-- Struts2Konfigurationsdateien-->
<struts>
        <konstanter Wert="true" name="struts.devMode" />
        <konstanter Wert="zh_CN" name="struts.locale" />
        <konstanter Wert="utf-8" name="struts.i18n.encoding" />
       
        <Paketname="default" extends="struts-default">
                <action name="mdeAction" class="com.crypt.action.mdeAction"
                        method="codeCrype">
                        <Ergebnis Name="Erfolg">/index.jsp</result>
                </action>
                <action name="fileCrypt" class="com.crypt.action.FilesCryptAction">
                        <Ergebnis Name="Erfolg">/success.jsp</result>
                </action>
                <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" method="SetCrypt2">
                        <Ergebnis name="success">/FilnallySuccess.jsp</result>
                        <result name="fail">/fail.jsp</result>
                </action>
</struts>   
Der dritte Schritt ist, nach struts2 zu FilesCryptAction zu springen
Paket com.crypt.action;
import java.io.IOException;
javax.servlet.http.Http.HttpServletRequest importieren;
javax.servlet.http.HttpSession importieren;
import org.apache.struts2.ServletActionContext;
importiere com.crypt.dao.Md5_dao;
Import von com.opensymphony.xwork2.ActionSupport;
com.crypt.entity.Md5FilesEntity importieren;
öffentliche Klasse FilesCryptAction erweitert ActionSupport {
        privat Md5FilesEntity Md5FilesEntity = neuer Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                return Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        public String execute() wirft IOException {
                String fileCode = null;
                versuchen {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //Das erste Mal wurde es berechnetMD5Der Wert wird vorübergehend gespeichert inSitzungMittel
                } catch (Ausnahme e) {
                        TODO Autogenerierter Fangblock
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                "Erfolg" zurückkehren;
        }
        public String SetCrypt2() {
                String fileCode2 = null;
                versuchen {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } catch (Ausnahme e) {
                        TODO Autogenerierter Fangblock
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        "Erfolg" zurückkehren;
                } sonst {
                        "fehlgeschlagen";
                }
        }
}
          
Im vierten Schritt beginnt die Aktion, zur Md5_dao mit Werten zu springen
Paket com.crypt.dao;
importiere com.crypt.md5.Md5Crypt_1;
importiere com.crypt.md5.Md5Crypt_2;
öffentliche Klasse Md5_dao {
        öffentlich statischer String getFileCode(String fileName) wirft Exception {
                System.out.println(Dateiname);
                String-HashCode = Md5Crypt_1.getHash(fileName, "MD5");
                System.out.println(hashCode);
                Hashcode zurückgeben;
        }
}       
Der fünfte Schritt besteht darin, eine API im System zu erstellen, um den MD5-Wert einer Datei zu berechnen, also direkt im DAO aufzurufen, und dann wird sie direkt in der Md5Crypt_1-Methode verarbeitet
Paket com.crypt.md5;
importieren java.io.*;
java.security importieren.*;
öffentliche Klasse Md5Crypt_1 {
        öffentliche statische Zeichen[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        public static void main(String[] args) wirft Exception {
                String-Dateiname = "e:/111.txt";
                String-Hashtyp = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        öffentlich statischer String getHash(String-Dateiname, String-HashTyp)
                        Würfe Ausnahme {
                InputStream-Fis;
                fis = neuer FileInputStream(Dateiname);
                byte[] buffer = neues Byte[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numRead = 0;
                während ((numRead = fis.read(buffer)) > 0) {
                        md5.update(buffer, 0, numRead);
                }
                fis.close();
                zurück zu HexString(md5.digest());
        }
        öffentlich statisch String toHexString(byte[] b) {
                StringBuilder sb = neuer StringBuilder (b.length * 2); //Erstelle einen Zeichenkettengenerator und initialisiere ihn auf den angegebenen Zeichenfolgeninhalt
                für (int i = 0; Ich < B.Länge; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); AnhängenMethoden fügen diese Zeichen immer am Ende des Generators hinzu
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
Schritt 6: Nach erfolgreicher Berechnung des MD5-Werts der Datei wird das erste MD5 in der Sitzung in Aktion gespeichert, und durch die Konfiguration der Struts2-Konfigurationsdatei springt das seccess.jsp, zeigt den berechneten MD5-Wert erstmals an und fordert die zweite Berechnung auf:
Quellcode in Success.jsp:
<body>
   Das erste Mal wurde es berechnetmd5Der Wert ist:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:propertyvalue="#Md5FilesEntity.fileAfterHashCode1" />
        </s:iterator>
       
                <center>
                        <form action="fileCrypt2" method="get">
                                <table>
                                        <tr>
                                                <td>Dateiname</td>:
                                                <td><Eingabetyp="Dateiname="Md5FilesEntity.filename" />
                                                </td>
                                                <td><Eingabetyp="Einreichen" Wert="Start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " Reihen="10" Kol="41"
                                        Nur lesen="Nur lesen">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:iterator>
        </textarea>
                        </form>
                </center>
  </body>
Schritt 7: Starte die zweite Einreichung und berechne sieMD5Der Wert wird beim zweiten Mal berechnet, nachdem er erneut berechnet wurde, gemäß dem obigen ProzessMD5Der Wert wird mit dem Wert des ersten Mal verglichen, wenn er doppelt istMD5        wenn es dasselbe ist, bedeutet das, dass keine Manipulation vorliegt; Wenn zweimalMD5Wenn der Wert anders ist, wurde das Dokument manipuliert. So ist das gesamte System abgeschlossen.
Dokumentenmanipulationssichere Systemtests
Stell das System auf das GestellTomact 6.0Komm hoch und erkenne esWebLauf. Nachfolgend ist ein Testdiagramm des Systems aufgeführt:
Schritt 1: Füge die Dateien hinzu, die berechnet werden müssen. Und hart durchgehen"Start"Button, um mit der Berechnung zu beginnen.

Der zweite Schritt wird berechnetMD5, insuccess.jspzeigt die erste berechneteMD5Wert und Anzeige. Eine zweite Berechnung wird ebenfalls durchgeführt, um festzustellen, ob sie manipuliert wurde.

Der dritte Schritt besteht darin, eine zweite Berechnung durchzuführen, ohne das Dokument zu manipulierenMD5Wert. Wenn keine Manipulation vorliegt, wird die Seite ohne den Sprung direkt übersprungen und die "Datei wurde nicht manipuliert" angezeigt. Wenn es manipuliert wurde, wird angezeigt, dass das Dokument manipuliert wurde.



Schritt 4: Ändern Sie die Datei und wiederholen Sie den obigen Test
Erste Berechnung:


Nachdem die Berechnung erfolgreich ist:

Der fünfte Schritt besteht darin, das Dokument absichtlich zu manipulieren und es zu berechnen. Grundsätzlich wird das Dokument zweimal manipuliert und berechnetMD5Nein, beim Vergleich sollte man darauf hinweisen, dass die Datei manipuliert wurde.


An diesem Punkt ist die Prüfung des gesamten Systems abgeschlossen.







Vorhergehend:Der Verband der herausragenden Unternehmer veranstaltete die Aktivität "Abfallrecycling, Ressourcennutzung"
Nächster:[C#] 12306 Die Grundlage für das Losfangen wird erkannt
Veröffentlicht am 20.11.2014 14:13:20 |
gelehrt
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com