Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 15992|Ответ: 1

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

[Скопировать ссылку]
Опубликовано 20.11.2014 14:04:34 | | | |
MD5Обзор алгоритма
MD5Функция принадлежит к части информации(сообщение)Генерируйте информационные дайджесты(дайджест сообщения), резюме уникально для данной информации,Её можно использовать как цифровую подпись. Используется для проверки достоверности документа(Будь то потерянные или повреждённые данные),Шифрование пароля пользователя, хеш-значение вычисляется в хеш-функции. Введите строку байтов любой длины, чтобы её сгенерировать128Целое число бита. Из-за некоторых необратимых характеристик алгоритма он обладает хорошей безопасностью в приложениях шифрования. иMD5Использование алгоритмов не требует оплаты каких-либо сборов за нарушение авторских прав. Ни уникальность, ни необратимость не являются абсолютными, теоретически анализируя их как отношение «много к одному», но вероятность того, что два разных фрагмента информации дадут одно и то же резюме, мала. Необратимость означает, что время вычислений и вычислений, необходимый для вывода входных данных из выхода, слишком велик, а метод поиска словарей требует слишком много места для хранения.
ПаутинаСистемаИдеи для дизайна
Эта система основана на Java Web, и с помощьюstrut2чтобы достичь этого. Основная идея дизайна — сдатьВебpage для дважды вычисления файла во внешней памяти системыMD5и сравните, если файл одинаковый, файл не был подделён, если он отличается — значит, файл был подделён.
ПаутинаВерсия файла, защищённая от подделок системы, подробные идеи для проектирования: прошлоJSPПолучите файл, который нужно вычислить во внешней памяти системы.JSPПосле сдачи — проходитеstrut2изБойПерейти к значениямJavaлогический слой. на логическом уровнеБойСредний вызовДАОметоды,ДАОРасчёт инкапсулированMD5ценность.ДаоМетодJSPДокументы, которые приходят, и калькуляторыMD5После завершения расчёта верните исходный путь значенияБойЭто первый случай, когда файл был рассчитанMD5ценность, сохраняй еёСессия, чтобы его можно было сравнить со вторымMD5Ценности. После первой успешной казни перейдите кУспехСтраница. Теперь начните второй раз файлаMD5Вычисление, также по вышеуказанному методу. После расчётаMD5После значения вычисляется второй разMD5Значение совпадает с первым вычисленным и сохраняется вСессияЕсли значения одинаковые, изменений не будет. Если он отличается, значит, его подделывали.
Реализация системы
Шаг 1,Index.jspИсходный код в
<!-- Index.jspДобавляйте файлы из системного хранилища здесь-->
                <center>
                        <form action="fileCrypt" method="get">
                                <table>
                                        <tr>
                                                <td>Имя файла</td>:
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="отправить" значение="старт" />
                                                </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>
                <action name="fileCrypt" class="com.crypt.action.FilesCryptAction">
                        <имя результата="успех">/success.jsp</result>
                </action>
                <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" method="SetCrypt2">
                        <имя результата="успех">/FilnallySuccess.jsp</result>
                        <имя результата="fail">/fail.jsp</result>
                </action>
</struts>   
Третий шаг — перейти в FilesCryptAction после Struts2
посылка com.crypt.action;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
импорт com.crypt.dao.Md5_dao;
импортировать com.opensymphony.xwork2.ActionSupport;
import com.crypt.entity.Md5FilesEntity;
public class 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;
                попробовать {
                        fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
                        session.setAttribute("fileCode", fileCode); //В первый раз это было рассчитаноMD5Значение временно сохраняется вСессияТерпимая
                } catch (Исключение e) {
                        TODO Автоматически сгенерированный блок ловли
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode1(fileCode);
                возврат «успеха»;
        }
        public String SetCrypt2() {
                String fileCode2 = null;
                попробовать {
                        fileCode2 = Md5_dao
                                        .getFileCode("e:" + Md5FilesEntity.getFilename());
                } catch (Исключение e) {
                        TODO Автоматически сгенерированный блок ловли
                        e.printStackTrace();
                }
                Md5FilesEntity.setFileAfterHashCode2(fileCode2);
                System.out.println("session1"+session.getAttribute("fileCode"));
                if (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) throws Exception {
                System.out.println (имя файла);
                String hashCode = Md5Crypt_1.getHash(fileName, "MD5");
                System.out.println(hashCode);
                return hashCode;
        }
}       
Пятый шаг — создать API в системе для вычисления значения MD5 файла, вызывая его напрямую в DAO, и теперь он обрабатывается напрямую в методе Md5Crypt_1
посылка com.crypt.md5;
импорт java.io.*;
import 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) бросает исключение {
                String fileName = "e:/111.txt";
                String hashType = "MD5";
                System.out.println(hashType + " ==" + getHash(fileName, hashType));
        }
        public static String getHash(String fileName, string hashType)
                        бросает исключение {
                InputStream fis;
                fis = новый FileInputStream(fileName);
                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.length * 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" method="get">
                                <table>
                                        <tr>
                                                <td>Имя файла</td>:
                                                <td><input type="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="отправить" значение="старт" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                        <form>
                                <textarea style="text-align: left; " rows="10" cols="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