Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 15992|Antwoord: 1

[Veiligheidstutorial] Tencent gebruikt het ook! Anti-manipulatiesysteem voor webbestanden (MD5-encryptie-implementatie) anti-hacking tutorial

[Link kopiëren]
Geplaatst op 20-11-2014 14:04:34 | | | |
MD5Overzicht van het algoritme
MD5De functie is om een stuk informatie te bereiken(bericht)Genereer informatiedigests(bericht-digest), de samenvatting is uniek voor de informatie,Het kan worden gebruikt als digitale handtekening. Gebruikt om de geldigheid van het document te verifiëren(Of er nu verloren of beschadigde data is),Bij versleuteling van het wachtwoord van de gebruiker wordt de hashwaarde berekend in de hashfunctie. Voer een bytestring van willekeurige lengte in om er een te genereren128Het geheel getal van het bit. Door enkele onomkeerbare kenmerken van het algoritme heeft het goede beveiliging in encryptietoepassingen. enMD5Het gebruik van algoritmen vereist geen betaling van auteursrechtkosten. Noch uniciteit noch onomkeerbaarheid zijn absoluut; theoretisch wordt het geanalyseerd als een veel-op-één relatie, maar de kans dat twee verschillende stukjes informatie dezelfde samenvatting produceren is klein. Onomkeerbaar betekent dat de hoeveelheid rekentijd en rekentijd die nodig is om de invoer van de uitvoer af te leiden te groot is, en de methode van het zoeken naar woordenboeken vereist te veel opslagruimte.
WebSysteemOntwerpideeën
Dit systeem is gebaseerd op Java Web, en met behulp vanStrut2om dit te bereiken. Het basisidee van het ontwerp is slagenwebpagina om een bestand in het externe geheugen van het systeem twee keer te berekenenMD5Waarde, en vergelijk, als het hetzelfde is, is het bestand niet gemanipuleerd, als het anders is, betekent dit dat het bestand is gemanipuleerd.
WebVersiebestand manipulatiebestendig systeem gedetailleerde ontwerpideeën: goedgekeurdJSPHaal een bestand op dat in het externe geheugen van het systeem moet worden berekend.JSPNa het indienen, pasStrut2vanActieSpring naar met waardenJavalogische laag. op de logische laagActieMedium roepDaoMethoden,DaoDe berekening is ingekapseldMD5Waarde.DaoMethodeJSPDocumenten die binnenkomen, en rekenmachinesMD5Nadat de berekening is voltooid, geef je het oorspronkelijke pad van de waarde terugActieDit is de eerste keer dat een bestand is berekendMD5waarde, sla het op inSessie, zodat deze met de tweede kan worden vergelekenMD5Waarden. Na de eerste succesvolle uitvoering, spring naarSuccespagina. Begin nu de tweede keer van het bestandMD5Berekening, ook via bovenstaande methode. Na berekeningMD5Na de waarde wordt de tweede keer berekendMD5De waarde is hetzelfde als de eerste berekende en wordt opgeslagen inSessieAls de waarden hetzelfde zijn, verandert er niets. Als het anders is, betekent dat dat er mee is geknoeid.
Systeemimplementatie
Stap 1,Index.jspbroncode in
<!-- Index.jspVoeg hier bestanden toe uit systeemopslag-->
                <center>
                        <form action="fileCrypt" method="get">
                                <table>
                                        <tr>
                                                <td>Bestandsnaam</td>:
                                                <td><invoertype="bestandsnaam="Md5FilesEntity.filename" />
                                                </td>
                                                <td><invoertype="verzenden" waarde="starten" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Stap 2,StuttenDe broncode in het configuratiebestand
<!-- struts2Configuratiebestanden-->
<struts>
        <constante waarde="true" naam="struts.devMode" />
        <constante waarde="zh_CN" naam="struts.locale" />
        <constante waarde="utf-8" naam="struts.i18n.encoding" />
       
        <pakketnaam="default" extends="struts-default">
                <actienaam="mdeAction" class="com.crypt.action.mdeAction"
                        method="codeCrype">
                        <resultaat naam="succes">/index.jsp</result>
                </action>
                <actienaam="fileCrypt" klasse="com.crypt.action.FilesCryptAction">
                        <resultaat naam="succes">/success.jsp</result>
                </action>
                <actienaam="fileCrypt2" klasse="com.crypt.action.FilesCryptAction" method="SetCrypt2">
                        <resultaat naam="succes">/FilnallySuccess.jsp</result>
                        <resultaat naam="fail">/fail.jsp</result>
                </action>
</struts>   
De derde stap is om na struts2 naar FilesCryptAction te springen
pakket com.crypt.action;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.crypt.dao.Md5_dao;
import com.opensymphony.xwork2.ActionSupport;
importeren com.crypt.entity.Md5FilesEntity;
publieke klasse FilesCryptAction breidt ActionSupport { uit
        privé Md5FilesEntity Md5FilesEntity = nieuwe Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                return Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        publieke String execute() werpt IOException {
                String fileCode = null;
                try {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //De eerste keer dat het werd berekendMD5De waarde wordt tijdelijk opgeslagen inSessieGemiddeld
                } vangen (Uitzondering e) {
                        TODO Automatisch gegenereerd vangblok
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                "succes" teruggeven;
        }
        publieke String SetCrypt2() {
                String fileCode2 = null;
                try {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } vangen (Uitzondering e) {
                        TODO Automatisch gegenereerd vangblok
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        "succes" teruggeven;
                } anders {
                        return "fail";
                }
        }
}
          
In de vierde stap begint de actie te springen naar de Md5_dao met waarden
pakket com.crypt.dao;
import com.crypt.md5.Md5Crypt_1;
import com.crypt.md5.Md5Crypt_2;
publieke klasse Md5_dao {
        publieke statische string getFileCode(String fileName) werpt Exception {
                System.out.println(bestandsnaam);
                String hashCode = Md5Crypt_1.getHash(bestandsnaam, "MD5");
                System.out.println(hashCode);
                return hashCode;
        }
}       
De vijfde stap is het maken van een API in het systeem om de MD5-waarde van een bestand te berekenen, dus roep het direct aan in de DAO, en nu wordt het direct verwerkt in de Md5Crypt_1-methode
pakket com.crypt.md5;
import java.io.*;
import java.security.*;
publieke klasse Md5Crypt_1 {
        publieke statische karakter[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        publieke statische void main(String[] args) werpt Exception {
                Stringbestandsnaam = "e:/111.txt";
                String hashType = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        publieke statische String getHash(String bestandsnaam, String hashType)
                        worpen Uitzondering {
                InputStream fi's;
                fis = nieuwe FileInputStream(bestandsnaam);
                byte[] buffer = nieuwe byte[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numLezen = 0;
                terwijl (numRead = fis.read(buffer)) > 0) {
                        md5.update(buffer, 0, numRead);
                }
                fis.close();
                terug naar HexString(md5.digest());
        }
        publieke statische String toHexString(byte[] b) {
                StringBuilder sb = nieuwe StringBuilder (b.length * 2); //Bouw een stringgenerator en initialiseer deze naar de gespecificeerde stringinhoud
                voor (int i = 0; I < B.lengte; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); ToevoegenMethoden voegen deze tekens altijd toe aan het einde van de generator
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
Stap 6: Na succesvol berekenen van de MD5-waarde van het bestand, wordt de eerste MD5 opgeslagen in de sessie in actie, en via de configuratie van het struts2-configuratiebestand springt men naar de seccess.jsp, toont de berekende MD5-waarde voor het eerst en start de tweede berekening:
Broncode in Success.jsp:
<body>
   De eerste keer dat het werd berekendmd5De waarde is:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:iterator>
       
                <center>
                        <form action="fileCrypt2" method="get">
                                <table>
                                        <tr>
                                                <td>Bestandsnaam</td>:
                                                <td><invoertype="bestandsnaam="Md5FilesEntity.filename" />
                                                </td>
                                                <td><invoertype="verzenden" waarde="starten" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " rijen="10" kols="41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:iterator>
        </textarea>
                        </form>
                </center>
  </body>
Stap 7: Begin met de tweede inzending en bereken dieMD5De waarde wordt de tweede keer berekend nadat deze opnieuw is berekend volgens het bovenstaande procesMD5De waarde wordt vergeleken met de waarde van de eerste keer, als deze twee keer isMD5        als het hetzelfde is, betekent dat dat er geen manipulatie is; Als het twee keer zo isMD5Als de waarde anders is, is er met het document gemanipuleerd. Zo is het hele systeem compleet.
Systeemtesten met documentmanipulatie-proof
Zet het systeem op het rekTomact 6.0Kom omhoog en besef hetwebRen. Hieronder staat een testdiagram van het systeem:
Stap 1: Voeg de bestanden toe die berekend moeten worden. En hard optreden"Start"knop om te beginnen met berekenen.

De tweede stap wordt berekendMD5, insuccess.jsptoont de eerste berekendeMD5waarde, en tonen. Er wordt ook een tweede berekening uitgevoerd om te bepalen of er met het is geknoeid.

De derde stap is het uitvoeren van een tweede berekening zonder aan het document te sleutelenMD5Waarde. Als er geen manipulatie is, wordt de pagina zonder de sprong direct gesprongen en wordt de pagina "bestand is niet aangepast" weergegeven. Als er met het is geknoeid, zal het laten zien dat het document is gemanipuleerd.



Stap 4: Verander het bestand en herhaal bovenstaande test
Eerste berekening:


Nadat de berekening succesvol is:

De vijfde stap is het bewust manipuleren van het document en het berekenen. In principe wordt het document gemanipuleerd en tweemaal berekendMD5Nee, bij het vergelijken zou je moeten worden geïnterpreteerd dat het dossier is gemanipuleerd.


Op dit punt is het testen van het hele systeem afgerond.







Vorig:De Association of Outstanding Entrepreneurs organiseerde de activiteit "Waste Recycling, Resource Utilization"
Volgend:[C#] 12306 De basis voor het grijpen van tickets wordt duidelijk
Geplaatst op 20-11-2014 14:13:20 |
geleerd
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com