Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 15992|Отговор: 1

[Урок по безопасност] Tencent също го използва! Анти-манипулиране на уеб файлове (MD5 имплементация на криптиране) урок за антихакерство

[Копирай линк]
Публикувано в 20.11.2014 г. 14:04:34 ч. | | | |
MD5Преглед на алгоритъма
MD5Функцията е към парче информация(съобщение)Генериране на информационни дайджести(съобщение-дайджест), резюмето е уникално за информацията,Може да се използва като цифров подпис. Използва се за проверка на валидността на документа(Независимо дали има изгубени или повредени данни),Криптирането на паролата на потребителя, хеш стойността се изчислява в хеш функцията. Въведете байтов низ с всякаква дължина, за да генерирате такъв128Цялото число на бита. Поради някои необратими характеристики на алгоритъма, той има добра сигурност в приложенията за криптиране. иMD5Използването на алгоритми не изисква плащане на такси за авторски права. Нито уникалността, нито необратимостта са абсолютни, като теоретично се анализира като много към едно отношение, но вероятността две различни парчета информация да произведат едно и също обобщение е малка. Необратимо означава, че времето за изчисление и изчисление, необходимо за извеждане на входа от изхода, е твърде голямо, а методът за търсене на речници изисква твърде много място за съхранение.
УебСистемаИдеи за дизайн
Тази система е базирана на Java Web, и с помощта наstrut2да постигнем това. Основната идея за дизайн е да се издържиУебстраница за изчисляване на файл във външната памет на системата два пътиMD5Стойност и сравнете, ако е едно и също – файлът не е бил манипулиран, ако е различен, това означава, че файлът е бил манипулиран.
УебПодробни идеи за дизайн, устойчиви на манипулация на версията: приети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="file" name="Md5FilesEntity.filename" />
                                                </td>
                                                <td><input type="submit" стойност="start" />
                                                </td>
                                        </tr>
                                </table>
                        </form>
                </center>
Стъпка 2,ПодпориИзходният код в конфигурационния файл
<!-- struts2Конфигурационни файлове-->
<struts>
        <константна стойност="истинско" име="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.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;
import com.opensymphony.xwork2.ActionSupport;
импорт com.crypt.entity.Md5FilesEntity;
public class FilesCryptAction разширява ActionSupport {
        private Md5FilesEntity Md5FilesEntity = new 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) хвърля изключение {
                System.out.println(fileName);
                String hashCode = Md5Crypt_1.getHash(fileName, "MD5");
                System.out.println(hashCode);
                връщане на hashCode;
        }
}       
Петата стъпка е да се създаде API в системата, който да изчислява MD5 стойността на файл, така че да се извика директно в DAO, и сега той се обработва директно чрез метода Md5Crypt_1
пакет com.crypt.md5;
Import java.io.*;
import java.security.*;
Публичен клас Md5Crypt_1 {
        публичен статичен char[] 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 num Read = 0;
                докато ((numRead = fis.read(buffer)) > 0) {
                        md5.update(buffer, 0, numRead);
                }
                fis.close();
                връщане към HexString(md5.digest());
        }
        public static String 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="submit" стойност="start" />
                                                </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