文件防篡改系统(MD5加密实现)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文件防篡改系统
MD5算法概述
MD5的作用是对一段信息(message)生成信息摘(message-digest),该摘要对该信息具有唯一性,可以作为数字签名。用于验证文件的有效性(是否有丢失或损坏的数据),对用户密码的加密,在哈希函数中计算散列值。输入一个任意长度的字节串,生成一个128位的整数。由于算法的某些不可逆特征,在加密应用上有较好的安全性。并且MD5算法的使用不需要支付任何版权费用。唯一性和不可逆性都不是绝对的,从理论上分析是一种多对一的关系,但两个不同的信息产生相同摘要的概率很小。不可逆是指从输出反推输入所需的运算量和计算时间太大,使用穷搜字典的方法又需要太多的存储空间。
Web系统设计思路
本系统是基于java web,并借助strut2来实现的。基本的设计思路是通过web页面来先后两次计算系统外存中某文件的MD5值,并且进行比对,若是相同,文件没有被篡改,若是不同,则说明文件被篡改过。
Web版本文件防篡改系统详细的设计思路:通过jsp面取出系统外存中的某个需要计算的文件,jsp提交以后,通过strut2 的action 带值跳转到java的逻辑层中。在逻辑层的action中调用dao方法,dao 中封装了计算MD5值的方法。Dao方法中接受了jsp传过来的文件,并计算器MD5值,计算完成以后,将其值原路径返还给action,这是第一次计算文件的MD5值,将其保存在Session中,便于将其与
第二次的MD5值进行比对。第一次顺利执行完以后跳转到success 页面中。现在开始进行文件的第二次MD5计算,同样通过上述的方法。在计算完MD5值后,把第二次算出来的MD5值与第一次计算出来的,并且保存在session中的值进行比对,若相同,则没有变。若是不同,则说明被篡改过。
系统实现
第一步,Index.jsp中的源代码,
第二步,struts配置文件中的源代码
method="codeCrype">
method="SetCrypt2">
第三步,经过struts2的跳转到FilesCryptAction
package com.crypt.action;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.crypt.dao.Md5_dao;
import com.opensymphony.xwork2.ActionSupport;
import com.crypt.entity.Md5FilesEntity;
public class FilesCryptAction extends ActionSupport {
private Md5FilesEntity Md5FilesEntity = new Md5FilesEntity();
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
public Md5FilesEntity getMd5FilesEntity() {
return Md5FilesEntity;
}
public void setMd5FilesEntity(Md5FilesEntity md5FilesEntity) {
Md5FilesEntity = md5FilesEntity;
}
public String execute() throws IOException {
String fileCode = null;
try {
fileCode = Md5_dao.getFileCode("e:" + Md5FilesEntity.getFilename());
session.setAttribute("fileCode", fileCode);//将第一次算出来的MD5值暂时保存在session中
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Md5FilesEntity.setFileAfterHashCode1(fileCode);
return "success";