Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 15992|Відповідь: 1

[Урок з безпеки] Tencent теж ним користується! Система протидриблення фальсифікації веб-файлів (реалізація шифрування MD5) — підручник з антихакерства

[Копіювати посилання]
Опубліковано 20.11.2014 14:04:34 | | | |
MD5Огляд алгоритму
MD5Функція належить до частини інформації(повідомлення)Генерація інформаційних дайджестів(дайджест повідомлення), резюме є унікальним для цієї інформації,Його можна використовувати як цифровий підпис. Використовується для перевірки достовірності документа(Чи є дані втрачені, чи пошкоджені),Шифрування пароля користувача, хеш-значення обчислюється у хеш-функції. Введіть байтрядок будь-якої довжини, щоб утворити його128Ціле число біта. Через деякі незворотні характеристики алгоритму він має добру безпеку в застосунках шифрування. таMD5Використання алгоритмів не вимагає сплати жодних зборів за авторські права. Ні унікальність, ні незворотність не є абсолютними, теоретично аналізуючи це як залежність багато до одного, але ймовірність того, що два різні фрагменти інформації дадуть однакове резюме, є невеликою. Незворотний означає, що обсяг обчислення та часу обчислення, необхідних для виведення вхідних даних із виходу, є надто великим, а метод пошуку словників потребує надто багато місця для зберігання.
ВебСистемаІдеї дизайну
Ця система базується на Java Web, і за допомогоюstrut2щоб досягти цього. Основна ідея дизайну — пройтивебсторінка для двічі обчислення файлу у зовнішній пам'яті системиMD5Value, і порівняйте, якщо файл не був підроблений, якщо він інший — це означає, що файл був підроблений.
ВебСистема для захисту від підробки версійного файлу: детальні ідеї для проєктування: пройшовJSPОтримати файл, який потрібно обчислити у зовнішній пам'яті системи.JSPПісля здачі — проходьтеstrut2зБойові діїПерейти до зі значеннямиJavaЛогічний шар. на логічному рівніБойові діїСередній сигналДаометоди,ДаоРозрахунок інкапсулюєтьсяMD5цінність.ДаоМетодJSPДокументи, які надходять, і калькуляториMD5Після завершення обчислення поверніть початковий шлях значенняБойові діїЦе перший випадок, коли файл було обчисленоMD5цінність, збережіть їїСесія, щоб його можна було порівняти з другимMD5Цінності. Після першої успішної виконання перейдіть доУспіхсторінка. Тепер починайте другий раз файлуMD5Обчислення, також за наведеним вище методом. Після розрахункуMD5Після значення обчислюється другий разMD5Значення таке ж, як і перше, обчислене і зберігається уСесіяЯкщо значення однакові, змін немає. Якщо він інший, це означає, що його підробляли.
Реалізація системи
Крок 1,Index.jspВихідний код у
<!-- Index.jspДодайте файли з системного сховища тут-->
                <center>
                        <form action="fileCrypt" метод="get">
                                <table>
                                        <tr>
                                                <td>Назва файлу</td>:
                                                <td><input type="ім'я файлу="Md5FilesEntity.filename" />
                                                </td>
                                                <td><тип введення="відправити" значення="почати" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Крок 2,СтійкиВихідний код у конфігураційному файлі
<!-- стійки2Конфігураційні файли-->
<struts>
        <constant value="true" name="struts.devMode" />
        <constant value="zh_CN" name="struts.locale" />
        <constant value="utf-8" name="struts.i18n.encoding" />
       
        <назва пакету="default" extends="struts-default">
                <ім'я дії="mdeAction" class="com.crypt.action.mdeAction"
                        method="codeCrype">
                        <ім'я результату="успіх">/index.jsp</result>
                </action>
                <ім'я дії="fileCrypt" class="com.crypt.action.FilesCryptAction">
                        <ім'я результату="успіх">/success.jsp</result>
                </action>
                <ім'я дії="fileCrypt2" class="com.crypt.action.FilesCryptAction" method="SetCrypt2">
                        <result name="success">/FilnallySuccess.jsp</result>
                        <ім'я результату="fail">/fail.jsp</result>
                </action>
</struts>   
Третій крок — перейти до FilesCryptAction після Struts2
пакет com.crypt.action;
імпорт java.io.IOException;
import javax.servlet.http.HttpServletRequest;
імпорт javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
імпорт com.crypt.dao.Md5_dao;
імпортувати com.opensymphony.xwork2.ActionSupport;
import com.crypt.entity.Md5FilesEntity;
публічний клас FilesCryptAction розширює ActionSupport {
        private Md5FilesEntity Md5FilesEntity = новий Md5FilesEntity();
       
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        public Md5FilesEntity getMd5FilesEntity() {
                повернути Md5FilesEntity;
        }
        public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
                Md5FilesEntity = md5FilesEntity;
        }
        public String execute() кидає IOException {
                String fileCode = null;
                try {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //Вперше це було розрахованоMD5Значення тимчасово зберігається уСесіяСереднє
                } catch (Виняток e) {
                        TODO Автоматично згенерований блок ловлі
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                повернення «успіху»;
        }
        публічний рядок SetCrypt2() {
                String fileCode2 = null;
                try {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } catch (Виняток e) {
                        TODO Автоматично згенерований блок ловлі
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                якщо (fileCode2 .equals(session.getAttribute("fileCode"))) {
                        повернення «успіху»;
                } else {
                        повернення «провал»;
                }
        }
}
          
На четвертому кроці дія починає стрибати до Md5_dao зі значеннями
пакет com.crypt.dao;
імпорт com.crypt.md5.Md5Crypt_1;
імпорт com.crypt.md5.Md5Crypt_2;
Публічний клас Md5_dao {
        public static String getFileCode(String fileName) кидає Exception {
                System.out.println(ім'я файлу);
                String hashCode = Md5Crypt_1.getHash(fileName, "MD5");
                System.out.println(hashCode);
                повернути хешКод;
        }
}       
П'ятий крок — створити API в системі для обчислення MD5-значення файлу, тобто викликати його безпосередньо в DAO, і тепер він обробляється безпосередньо методом Md5Crypt_1
пакунок com.crypt.md5;
імпорт java.io.*;
імпорт java.security.*;
Публічний клас Md5Crypt_1 {
        публічний статичний символ[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
                        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        public static void main(String[] args) викидає Exception {
                String fileName = "e:/111.txt";
                String hashType = "MD5";
                System.out.println(hashType + " == " + getHash(fileName, hashType));
        }
        публічний статичний рядок getHash(String fileName, String hashType)
                        кидає Виняток {
                InputStream fis;
                fis = новий FileInputStream(ім'я файлу);
                byte[] buffer = новий байт[1024];
                MessageDigest md5 = MessageDigest.getInstance(hashType);
                int numRead = 0;
                тоді як ((numRead = fis.read(buffer)) > 0) {
                        md5.update(buffer, 0, numRead);
                }
                fis.close();
                повернутися до HexString(md5.digest());
        }
        публічний статичний рядок toHexString(байт[] b) {
                StringBuilder sb = новий StringBuilder(b.довжина * 2); //Побудуйте генератор рядків і ініціалізуйте його з вмістом заданого рядка
                для (int i = 0; I < B.Length; i++) {
                        sb.append(hexChar[(b& 0xf0) >>> 4]); ДодатокМетоди завжди додають ці символи в кінець генератора
                        sb.append(hexChar[b& 0x0f]);
                }
                return sb.toString();
        }
}
Крок 6: Після успішного обчислення значення MD5 файлу перший MD5 зберігається в сесії в дії, і через конфігурацію конфігураційного файлу struts2 переходьте до seccess.jsp, відображайте значення MD5, розраховане вперше, і запрошуйте почати друге обчислення:
Вихідний код у Success.jsp:
<body>
   Вперше це було розрахованоMD5Значення дорівнює:
   <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.fileAfterHashCode1" />
        </s:ітератор>
       
                <center>
                        <form action="fileCrypt2" метод="get">
                                <table>
                                        <tr>
                                                <td>Назва файлу</td>:
                                                <td><input type="ім'я файлу="Md5FilesEntity.filename" />
                                                </td>
                                                <td><тип введення="відправити" значення="почати" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " ряди="10" перевалів="41"
                                        readonly="readonly">
        <s:iterator value="Md5FilesEntity" id="Md5FilesEntity" status="L">
                <s:property value="#Md5FilesEntity.Md5FileCode" />
        </s:ітератор>
        </textarea>
                        </form>
                </center>
  </body>
Крок 7: Почніть другу подачу та розрахуйте їїMD5Значення обчислюється вдруге після повторного обчислення за наведеним вище процесомMD5Значення порівнюється з значенням першого разу, якщо воно двічіMD5        якщо це те саме, це означає, що втручання не відбувається; Якщо двічіMD5Якщо вартість інша, документ був підроблений. Таким чином, вся система завершена.
Тестування системи на захист від підробки документів
Поставте систему на стійкуTomact 6.0Піднімайся і усвідомлюйвебБіжи. Нижче наведено тестову діаграму системи:
Крок 1: Додайте файли, які потрібно обчислити. І жорстко придушити»Початоккнопка для початку розрахунку.

Другий крок розраховуєтьсяMD5, уsuccess.jspпоказує перший обчисленийMD5цінність і демонстрація. Також запропонується другий розрахунок, щоб визначити, чи було його підроблено.

Третій крок — виконати другий розрахунок без втручання в документMD5цінність. Якщо втручання немає, сторінка без стрибка буде перескочена напряму, і з'явиться напис «файл не був підроблений». Якщо документ був підроблений, це покаже, що документ був підроблений.



Крок 4: Внесіть зміни у файл і повторіть наведений вище тест
Перше обчислення:


Після успішного обчислення:

П'ятий крок — навмисно підробити документ і розрахувати його. В принципі, документ підробляють і розраховують двічіMD5Ні, при порівнянні вам слід повідомити, що файл було підроблено.


На цьому етапі тестування всієї системи завершується.







Попередній:Асоціація видатних підприємців провела захід «Переробка відходів, використання ресурсів»
Наступний:[C#] 12306 Основа для захоплення квитків реалізована
Опубліковано 20.11.2014 14:13:20 |
Дізнався
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com