Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 15992|Jawab: 1

[Tutorial Keselamatan] Tencent juga menggunakannya! Sistem anti-gangguan untuk file web (implementasi enkripsi MD5) tutorial anti-peretasan

[Salin tautan]
Diposting pada 20/11/2014 14.04.34 | | | |
MD5Ikhtisar algoritma
MD5Fungsinya adalah untuk sepotong informasi(pesan)Hasilkan ringkasan informasi(ringkasan pesan), ringkasan unik untuk informasi,Ini dapat digunakan sebagai tanda tangan digital. Digunakan untuk memverifikasi validitas dokumen(Apakah ada data yang hilang atau rusak),Enkripsi kata sandi pengguna, nilai hash dihitung dalam fungsi hash. Masukkan bytestring dengan panjang berapa pun untuk menghasilkannya128Bilangan bulat bit. Karena beberapa karakteristik algoritme yang tidak dapat diubah, ia memiliki keamanan yang baik dalam aplikasi enkripsi. danMD5Penggunaan algoritme tidak memerlukan pembayaran biaya hak cipta apa pun. Baik keunikan maupun irreverssibilitas tidak mutlak, secara teoritis menganalisisnya sebagai hubungan banyak-ke-satu, tetapi probabilitas dua informasi yang berbeda menghasilkan ringkasan yang sama kecil. Tidak dapat diubah berarti bahwa jumlah komputasi dan waktu komputasi yang diperlukan untuk menyimpulkan input dari output terlalu besar, dan metode pencarian kamus membutuhkan terlalu banyak ruang penyimpanan.
WebSistemIde desain
Sistem ini didasarkan pada Java Web, dan dengan bantuanpenyangga 2untuk mencapai ini. Ide desain dasar adalah lulusSitus webhalaman untuk menghitung file di memori eksternal sistem dua kaliMD5nilai, dan bandingkan, jika sama, file belum dirusak, jika berbeda, itu berarti file telah dirusak.
WebFile versi sistem anti gangguan ide desain terperinci: lulusjspAmbil file yang perlu dihitung di memori eksternal sistem.jspSetelah mengirimkan, luluspenyangga 2dariTindakanLoncat ke dengan nilaiJawalapisan logika. pada lapisan logisTindakanPanggilan sedangdaometode,daoPerhitungan dienkapsulasiMD5nilai.DaoMetodejspDokumen yang datang, dan kalkulatorMD5Setelah perhitungan selesai, kembalikan jalur asli dari nilai tersebutTindakanIni adalah pertama kalinya file dihitungMD5nilai, simpan diSesi, sehingga dapat dibandingkan dengan yang keduaMD5Nilai. Setelah eksekusi pertama berhasil, lompat kekeberhasilanhalaman. Sekarang mulai file kedua kalinyaMD5Perhitungan, juga dengan metode di atas. Setelah perhitunganMD5Setelah nilai, kedua kalinya dihitungMD5Nilainya sama dengan yang pertama dihitung dan disimpan disesiJika nilainya sama, tidak ada perubahan. Jika berbeda, itu berarti telah dirusak.
Implementasi sistem
Langkah 1,Index.jspkode sumber di
<!-- Index.jspTambahkan file dari penyimpanan sistem di sini-->
                <center>
                        <form action="fileCrypt" method="get">
                                <table>
                                        <tr>
                                                <td>Nama file</td>:
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Langkah 2,penyanggaKode sumber dalam file konfigurasi
<!-- penyangga2File konfigurasi-->
<struts>
        <constant value="true" name="struts.devMode" />
        <constant value="zh_CN" name="struts.locale" />
        <nilai konstan="utf-8" name="struts.i18n.encoding" />
       
        <package name="default" extends="struts-default">
                <action name="mdeAction" class="com.crypt.action.mdeAction"
                        method="codeCrype">
                        <result name="success">/index.jsp</result>
                </action>
                <action name="fileCrypt" class="com.crypt.action.FilesCryptAction">
                        <result name="success">/success.jsp</result>
                </action>
                <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" method="SetCrypt2">
                        <result name="success">/FilnallySuccess.jsp</result>
                        <result name="gagal">/fail.jsp</result>
                </action>
</struts>   
Langkah ketiga adalah melompat ke FilesCryptAction setelah struts2
paket com.crypt.action;
impor java.io.IOException;
impor javax.servlet.http.HttpServletRequest;
impor javax.servlet.http.HttpSession;
impor org.apache.struts2.ServletActionContext;
impor com.crypt.dao.Md5_dao;
impor com.opensymphony.xwork2.ActionSupport;
impor com.crypt.entity.Md5FilesEntity;
kelas publik FilesCryptAction memperluas ActionSupport {
        pribadi Md5FilesEntity Md5FilesEntity = baru Md5FilesEntity();
       
        Permintaan HttpServletRequest = ServletActionContext.getRequest();
        Sesi HttpSession = request.getSession();
        publik Md5FilesEntity getMd5FilesEntity() {
                mengembalikan Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                md5FilesEntity = md5FilesEntity;
        }
        public String execute() melemparkan IOException {
                String fileCode = null;
                coba {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //Pertama kali dihitungMD5Nilai disimpan sementara disesiSedang
                } catch (Pengecualian e) {
                        TODO Blok tangkapan yang dihasilkan secara otomatis
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                mengembalikan "kesuksesan";
        }
        publik String SetCrypt2() {
                String fileCode2 = null;
                coba {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } catch (Pengecualian e) {
                        TODO Blok tangkapan yang dihasilkan secara otomatis
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        mengembalikan "kesuksesan";
                } else {
                        mengembalikan "gagal";
                }
        }
}
          
Pada langkah keempat, tindakan mulai melompat ke Md5_dao dengan nilai
paket com.crypt.dao;
impor com.crypt.md5.Md5Crypt_1;
impor com.crypt.md5.Md5Crypt_2;
kelas publik Md5_dao {
        String statis publik getFileCode(String fileName) melemparkan Pengecualian {
                Sistem.keluar.println(Nama file);
                String hashCode = Md5Crypt_1.getHash(fileName, "MD5");
                System.out.println(hashCode);
                mengembalikan hashCode;
        }
}       
Langkah kelima adalah membuat API dalam sistem untuk menghitung nilai MD5 dari sebuah file, jadi sebut langsung di DAO, dan sekarang langsung diproses dalam metode Md5Crypt_1
paket com.crypt.md5;
impor java.io.*;
impor java.security.*;
kelas publik Md5Crypt_1 {
        char statis publik[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        public static void main(String[] args) melemparkan Pengecualian {
                String fileName = "e:/111.txt";
                String hashType = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        String statis publik getHash(String fileName, String hashType)
                        melemparkan Pengecualian {
                Input Stream fis;
                fis = FileInputStream baru(fileName);
                byte[] buffer = byte baru[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numBaca = 0;
                sementara ((numRead = fis.read(buffer)) > 0) {
                        md5.update(buffer, 0, numRead);
                }
                fis.close();
                kembali ke HexString(md5.digest());
        }
        publik statis String toHexString(byte[] b) {
                StringBuilder sb = StringBuilder baru (b.panjang * 2); //Buat generator string dan inisialisasi ke konten string yang ditentukan
                untuk (int i = 0; i < b.panjang; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); menambahkanmetode selalu menambahkan karakter ini ke akhir generator
                        sb.append(hexChar[b& 0x0f]);
                }
                mengembalikan sb.toString();
        }
}
Langkah 6: Setelah berhasil menghitung nilai MD5 dari file, MD5 pertama disimpan dalam sesi yang sedang beraksi, dan melalui konfigurasi file konfigurasi struts2, lompat ke seccess.jsp, tampilkan nilai MD5 yang dihitung untuk pertama kalinya, dan minta untuk memulai perhitungan kedua:
Kode sumber dalam Success.jsp:
<body>
   Pertama kali dihitungMD5Nilainya adalah:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </dtk:iterator>
       
                <center>
                        <form action="fileCrypt2" method="get">
                                <table>
                                        <tr>
                                                <td>Nama file</td>:
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" value="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: kiri; " rows="10" cols="41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </dtk:iterator>
        </textarea>
                        </form>
                </center>
  </body>
Langkah 7: Mulai pengiriman kedua dan hitungMD5Nilai dihitung untuk kedua kalinya setelah menghitungnya lagi sesuai dengan proses di atasMD5Nilainya dibandingkan dengan nilai pertama kali, jika dua kaliMD5        jika sama, itu berarti tidak ada gangguan; Jika dua kaliMD5Jika nilainya berbeda, dokumen telah dirusak. Dengan demikian, seluruh sistem selesai.
Pengujian sistem anti kerusakan dokumen
Letakkan sistem di rakTomact 6.0Datang dan menyadariSitus webLari. Di bawah ini adalah diagram pengujian sistem:
Langkah 1: Tambahkan file yang perlu dihitung. Dan menindak keras"mulai" untuk mulai menghitung.

Langkah kedua dihitungMD5, dalamsuccess.jspmenunjukkan yang pertama dihitungMD5nilai, dan tampilan. Perhitungan kedua juga diminta untuk menentukan apakah itu telah dirusak.

Langkah ketiga adalah melakukan perhitungan kedua tanpa merusak dokumenMD5nilai. Jika tidak ada gangguan, halaman tanpa lompatan akan langsung dilompati dan "file belum dirusak" akan ditampilkan. Jika telah dirusak, itu akan menunjukkan bahwa dokumen tersebut telah dirusak.



Langkah 4: Buat perubahan pada file dan ulangi tes di atas
Perhitungan pertama:


Setelah perhitungan berhasil:

Langkah kelima adalah dengan sengaja mengutak-atik dokumen dan menghitungnya. Pada prinsipnya, dokumen tersebut dirusak dan dihitung dua kaliMD5Tidak, saat membandingkan, Anda harus diminta bahwa file telah dirusak.


Pada titik ini, pengujian seluruh sistem selesai.







Mantan:Asosiasi Pengusaha Berprestasi menyelenggarakan kegiatan "Daur Ulang Sampah, Pemanfaatan Sumber Daya"
Depan:[C#] 12306 Dasar untuk merebut tiket direalisasikan
Diposting pada 20/11/2014 14.13.20 |
arif
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com