|
MD5알고리즘 개요 MD5이 기능은 정보 조각에 관한 것입니다(메시지)정보 요약 생성(메시지 요약)요약은 정보에 고유합니다,디지털 서명으로도 사용할 수 있습니다. 문서의 유효성을 검증하는 데 사용됩니다(데이터가 손실되거나 손상되었는지 여부),사용자의 비밀번호 암호화 시 해시 값이 해시 함수에서 계산됩니다. 임의의 길이의 바이트트링을 입력하여 생성합니다128비트의 정수입니다. 알고리즘의 일부 되돌릴 수 없는 특성 덕분에 암호화 응용 분야에서 우수한 보안을 제공합니다. 그리고MD5알고리즘 사용에는 저작권 수수료 납부가 필요하지 않습니다. 고유성이나 비가역성은 절대적이지 않으며, 이론적으로는 다대일 관계로 분석할 수 있지만, 서로 다른 두 정보가 동일한 요약을 내놓을 확률은 작다. 비가역적이라는 것은 입력과 출력을 추론하는 데 필요한 계산 시간과 시간이 너무 많고, 사전 검색 방식이 너무 많은 저장 공간을 요구한다는 뜻입니다. 웹시스템디자인 아이디어 이 시스템은 자바 웹을 기반으로 합니다, 그리고 다음스트럿2이를 이루기 위해서입니다. 기본 설계 아이디어는 통과하는 것입니다웹시스템 외부 메모리에서 파일을 두 번 계산하기 위해MD5값과 비교, 동일하면 파일이 조작되지 않았고, 다르면 파일이 조작되었다는 뜻입니다. 웹버전 파일 변조 방지 시스템 상세 설계 아이디어: 통과JSP시스템의 외부 메모리에서 계산해야 할 파일을 불러옵니다.JSP제출 후 합격하세요스트럿2의작전값과 함께 있는 것으로 건너뛰기자바논리 계층. 논리 계층에서작전중간 울음소리다오방법,다오계산은 캡슐화되어 있습니다MD5가치.도(道)방법JSP들어오는 문서들과 계산기MD5계산이 완료된 후에는 값의 원래 경로를 반환합니다작전이번이 처음으로 파일 계산이 이루어진 경우입니다MD5가치, 저장해 두세요회기, 두 번째 것과 비교할 수 있도록MD5가치관. 첫 번째 성공적인 처형 후, 다음으로 점프하세요성공페이지. 이제 파일을 두 번째로 시작하세요MD5계산도 위의 방법을 사용합니다. 계산 후MD5값 이후에는 두 번째 값이 계산됩니다MD5값은 처음 계산된 값과 같으며 저장됩니다.세션값이 같으면 변화가 없습니다. 만약 다르다면, 조작이 있었다는 뜻입니다. 시스템 구현 1단계,Index.jsp소스 코드 <!-- Index.jsp여기에 시스템 저장소에서 파일을 추가하세요--> <center> <form action="fileCrypt" 메서드="get"> <table> <tr> <td>파일 이름:</td> <td><입력 유형="file" 이름="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"> <action name="mdeAction" class="com.crypt.action.mdeAction" method="codeCrype"> <결과 이름="성공">/index.jsp</result> </action> <action name="fileCrypt" 클래스="com.crypt.action.FilesCryptAction"> <결과 이름="성공">/success.jsp</result> </action> <action name="fileCrypt2" class="com.crypt.action.FilesCryptAction" 메서드="SetCrypt2"> <결과 이름="성공">/FilnallySuccess.jsp</result> <결과 이름="fail">/fail.jsp</result> </action> </struts> 세 번째 단계는 struts2 다음에 FilesCryptAction으로 점프하는 것입니다 패키지 com.crypt.action; import java.io.IOException; import javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpSession을 import; import org.apache.struts2.ServletActionContext; 수입 com.crypt.dao.Md5_dao; import com.opensymphony.xwork2.ActionSupport; import 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() throws IOException { 문자열 파일코드 = null; 시도해 { fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename()); session.setAttribute("fileCode", fileCode); //처음 계산된 경우는MD5이 값은 일시적으로 저장됩니다.세션보통 } catch (예외 e) { TODO 자동 생성 캐치 블록 e.printStackTrace(); } Md5FilesEntity.setFileAfterHashCode1(fileCode); "성공"을 반환; } public String SetCrypt2() { 문자열 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"))) { "성공"을 반환; } 그렇지 않으면 { "실패"로 반환; } } } 네 번째 단계에서는 액션이 값이 있는 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(fileName); String hashCode = Md5Crypt_1.getHash(파일명, "MD5"); System.out.println(hashCode); 해시코드를 반환; } } 다섯 번째 단계는 시스템에 파일의 MD5 값을 계산하는 API를 만들어 DAO에서 직접 호출하는 것이며, 이제 Md5Crypt_1 메서드에서 직접 처리됩니다 패키지 com.crypt.md5; import 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)이 Exception { 문자열 파일명 = "e:/111.txt"; 문자열 해시타입 = "MD5"; System.out.println(hashType + " == " + getHash(fileName, hashType)); } 공개 정적 문자열 getHash(String fileName, String hashType) throws exception { InputStream fis; fis = new FileInputStream(fileName); byte[] 버퍼 = 새로운 byte[1024]; MessageDigest md5 = MessageDigest.getInstance(hashType); int numRead = 0; while ((numRead = fis.read(buffer)) > 0) { md5.update(buffer, 0, numRead); } fis.close(); return to HexString(md5.digest()); } public static String toHexString(byte[] b) { StringBuilder sb = 새로운 StringBuilder(b.length * 2); //문자열 생성기를 구성하고 지정된 문자열 내용으로 초기화하세요 (정수: i = 0; 저는 B< 길이; i++) { sb.append(hexChar[(b& 0xf0) >>>4]); 추가메서드는 항상 이 문자들을 생성기 끝에 추가합니다 sb.append(hexChar[b& 0x0f]); } 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><입력 유형="file" 이름="Md5FilesEntity.filename" /> </td> <td><입력 유형="제출" 값="시작" /> </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만약 값이 다르다면, 문서가 조작된 것입니다. 이렇게 해서 전체 시스템이 완성된 것입니다. 문서 변조 방지 시스템 테스트 시스템을 거치대에 올려놓아토막트 6.0일어나서 깨달아라웹도망쳐. 아래는 시스템의 테스트 다이어그램입니다: 1단계: 계산해야 할 파일을 추가하세요. 그리고 단속을 강화하라"시작"계산 시작을 위한 버튼.
두 번째 단계는 계산됩니다MD5, insuccess.jsp첫 번째 계산된 값은MD5값, 그리고 디스플레이. 두 번째 계산도 조작되었는지 확인하기 위해 진행됩니다.
세 번째 단계는 문서를 조작하지 않고 두 번째 계산을 수행하는 것입니다MD5가치. 변조가 없다면, 이 점프가 없는 페이지가 바로 점프되며 "파일 변조되지 않았습니다"라는 문구가 표시됩니다. 만약 문서가 조작되었다면, 문서가 조작되었다는 것을 보여줍니다.
4단계: 파일을 변경하고 위 테스트를 반복합니다 첫 번째 계산:
계산이 성공한 후:
다섯 번째 단계는 문서를 고의로 조작하고 계산하는 것입니다. 원칙적으로 문서는 두 번 조작되고 계산됩니다MD5아니요, 비교할 때는 파일이 조작되었다는 알림이 뜨어야 합니다.
이 시점에서 전체 시스템의 테스트가 완료되었습니다.
|