|
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Ні, при порівнянні вам слід повідомити, що файл було підроблено.
На цьому етапі тестування всієї системи завершується.
|