Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 15992|Svar: 1

[Sikkerhedsvejledning] Tencent bruger det også! Anti-manipulationssystem til webfiler (MD5-krypteringsimplementering) anti-hacking vejledning

[Kopier link]
Opslået på 20/11/2014 14.04.34 | | | |
MD5Algoritmeoversigt
MD5Funktionen er at give et stykke information(besked)Generer informationsdigests(besked-digest), er resuméet unikt for informationen,Den kan bruges som en digital signatur. Bruges til at verificere dokumentets gyldighed(Om der er tabte eller korrupte data),Ved kryptering af brugerens adgangskode beregnes hashværdien i hashfunktionen. Indtast en bytestring af vilkårlig længde for at generere en128Heltallet af bitten. På grund af nogle irreversible egenskaber ved algoritmen har den god sikkerhed i krypteringsapplikationer. ogMD5Brugen af algoritmer kræver ikke betaling af ophavsretsgebyrer. Hverken entydighed eller irreversibilitet er absolutte, teoretisk set analyseret som et mange-til-én-forhold, men sandsynligheden for, at to forskellige informationer producerer det samme resumé, er lille. Irreversibel betyder, at mængden af beregning og beregningstid, der kræves for at udlede input fra outputtet, er for stor, og metoden til at søge efter ordbøger kræver for meget lagerplads.
WebSystemDesignidéer
Dette system er baseret på Java Web, og med hjælp afstrut2for at opnå dette. Den grundlæggende designidé er at beståWebSide for at beregne en fil i systemets eksterne hukommelse to gangeMD5værdi, og sammenligne, hvis filen er den samme, er den ikke blevet manipuleret med, og hvis den er anderledes, betyder det, at filen er blevet manipuleret.
WebVersionsfil-manipulationssikkert system detaljerede designidéer: godkendtJSPHent en fil, der skal beregnes i systemets eksterne hukommelse.JSPEfter indsendelse, besætstrut2afAktionSpring til med værdierJavaLogiklag. ved det logiske lagAktionMellemkalddaoMetoder,daoBeregningen er indkapsletMD5værdi.DaoMetodeJSPDokumenter, der kommer forbi, og lommeregnereMD5Når beregningen er færdig, returneres den oprindelige sti for værdienAktionDette er første gang, en fil er blevet beregnetMD5værdi, gem det iSession, så den kan sammenlignes med den andenMD5Værdier. Efter den første vellykkede udførelse, spring tilSuccesside. Start nu anden gang i filenMD5Beregning, også ved ovenstående metode. Efter beregningMD5Efter værdien beregnes anden gangMD5Værdien er den samme som den første beregnede og gemmes iSessionHvis værdierne er de samme, sker der ingen ændring. Hvis det er anderledes, betyder det, at det er blevet manipuleret med.
Systemimplementering
Trin 1,Index.jspKildekode i
<!-- Index.jspTilføj filer fra systemlageret her-->
                <center>
                        <form action="fileCrypt" metode="get">
                                <table>
                                        <tr>
                                                <td>Filnavn:</td>
                                                <td><inputtype="fil" navn="Md5FilesEntity.filename" />
                                                </td>
                                                <td><inputtype="indsend" værdi="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Trin 2,StagstængerKildekoden i konfigurationsfilen
<!-- struts2Konfigurationsfiler-->
<struts>
        <konstant værdi="sand" navn="struts.devMode" />
        <konstant værdi="zh_CN" navn="struts.locale" />
        <konstant værdi="utf-8" navn="struts.i18n.encoding" />
       
        <pakkenavn="default" extends="struts-default">
                <handlingsnavn="mdeAction" klasse="com.crypt.action.mdeAction"
                        method="codeCrype">
                        <resultatnavn="succes">/index.jsp</result>
                </action>
                <handlingsnavn="fileCrypt" klasse="com.crypt.action.FilesCryptAction">
                        <resultatnavn="succes">/success.jsp</result>
                </action>
                <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" metode="SetCrypt2">
                        <resultatnavn="succes">/FilnallySuccess.jsp</result>
                        <result name="fail">/fail.jsp</result>
                </action>
</struts>   
Det tredje skridt er at hoppe til FilesCryptAction efter struts2
pakken com.crypt.action;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
importere com.crypt.dao.Md5_dao;
importere com.opensymphony.xwork2.ActionSupport;
importere com.crypt.entity.Md5FilesEntity;
public class FilesCryptAction udvider ActionSupport {
        privat Md5FilesEntity Md5FilesEntity = ny Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                returner Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        public String execute() kaster IOException {
                Strengfilkode = null;
                try {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //Første gang blev det beregnetMD5Værdien gemmes midlertidigt iSessionMedium
                } catch (Undtagelse e) {
                        TODO Automatisk genereret catch block
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                Returner "succes";
        }
        public String SetCrypt2() {
                Strengfilkode2 = null;
                try {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } catch (Undtagelse e) {
                        TODO Automatisk genereret catch block
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                hvis (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        Returner "succes";
                } ellers {
                        returner "fejl";
                }
        }
}
          
I det fjerde trin begynder handlingen at springe til Md5_dao med værdier
pakke com.crypt.dao;
importere com.crypt.md5.Md5Crypt_1;
import com.crypt.md5.Md5Crypt_2;
offentlig klasse Md5_dao {
        offentlig statisk Streng getFileCode(String fileName) kaster Undtagelse {
                System.out.println(filNavn);
                Streng-hashkode = Md5Crypt_1.getHash(filnavn, "MD5");
                System.out.println(hashCode);
                returner hashkode;
        }
}       
Det femte trin er at lave et API i systemet til at beregne MD5-værdien af en fil, så kald den direkte i DAO'en, og nu behandles den direkte i Md5Crypt_1-metoden
pakke com.crypt.md5;
import java.io.*;
importere java.security.*;
offentlig klasse Md5Crypt_1 {
        offentlig statisk karakter[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        offentlig statisk void main(String[] args) kaster Undtagelse {
                Strengfilnavn = "e:/111.txt";
                Streng-hashtype = "MD5";
                System.out.println(hashType + " == " + getHash(filNavn, hashType));
        }
        offentlig statisk Streng getHash(Strengfilnavn, Streng hashType)
                        kast Undtagelse {
                InputStream fis;
                fis = ny FileInputStream(filnavn);
                byte[] buffer = ny byte[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numRead = 0;
                mens ((numRead = fis.read(buffer)) > 0) {
                        md5.update(buffer, 0, numRead);
                }
                fis.close();
                return toHexString(md5.digest());
        }
        offentlig statisk String toHexString(byte[] b) {
                StringBuilder sb = ny StringBuilder(b.length * 2); //Byg en strenggenerator og initialiser den til det specificerede strengindhold
                for (int i = 0; I < B.længde; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); TilføjMetoder tilføjer altid disse tegn til enden af generatoren
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
Trin 6: Efter at have beregnet værdien af MD5 i filen, gemmes den første MD5 i sessionen i aktion, og gennem konfigurationen af struts2-konfigurationsfilen hoppes til seccess.jsp, vises MD5-værdien første gang og bedes om at starte den anden beregning:
Kildekode i Success.jsp:
<body>
   Første gang blev det beregnetmd5Værdien er:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:iterator>
       
                <center>
                        <form action="fileCrypt2" metode="get">
                                <table>
                                        <tr>
                                                <td>Filnavn:</td>
                                                <td><inputtype="fil" navn="Md5FilesEntity.filename" />
                                                </td>
                                                <td><inputtype="indsend" værdi="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " rækker="10" kol="41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:iterator>
        </textarea>
                        </form>
                </center>
  </body>
Trin 7: Start den anden indsendelse og beregn denMD5Værdien beregnes anden gang efter at have regnet den igen i henhold til ovenstående procesMD5Værdien sammenlignes med værdien fra første gang, hvis den er to gangeMD5        hvis det er det samme, betyder det, at der ikke er nogen manipulation; Hvis to gangeMD5Hvis værdien er forskellig, er dokumentet blevet manipuleret med. Dermed er hele systemet færdigt.
Dokumentmanipulationssikker systemtest
Sæt systemet på stativetTomact 6.0Kom op og indse detWebLøb. Nedenfor er et testdiagram over systemet:
Trin 1: Tilføj de filer, der skal beregnes. Og slå ned"Start"knappen for at begynde at beregne.

Det andet trin beregnesMD5, isuccess.jspviser den første beregnedeMD5værdi og visning. En anden beregning foretages også for at afgøre, om den er blevet manipuleret med.

Det tredje trin er at udføre en anden beregning uden at pille ved dokumentetMD5værdi. Hvis der ikke er nogen manipulation, vil siden uden springet blive sprunget direkte, og "filen er ikke blevet manipuleret med" vil blive vist. Hvis det er blevet manipuleret med, vil det vise, at dokumentet er blevet manipuleret med.



Trin 4: Foretag ændringer i filen og gentag ovenstående test
Første beregning:


Efter beregningen er succesfuld.:

Det femte trin er bevidst at manipulere dokumentet og regne det ud. I princippet bliver dokumentet manipuleret og beregnet to gangeMD5Nej, når du sammenligner, bør du blive bedt om, at filen er blevet manipuleret med.


På dette tidspunkt er testningen af hele systemet afsluttet.







Tidligere:Association of Outstanding Entrepreneurs afholdt aktiviteten "Waste Recycling, Resource Utilization"
Næste:[C#] 12306 Grundlaget for billetsnuppelse er realiseret
Opslået på 20/11/2014 14.13.20 |
klog
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com