,MD5全名Message-Digest Algorithm 5(信息-摘要算法)是一种不可逆的加密算法。
那么MD5校验又是怎么回事呢?
一般软件或者说文件都有自己的固定文件格式或者架构信息,说简单一点就是。”世界上没有完全相同的2片叶子” ,因为MD5是一种不可逆的加密算法。
那么对于某些网上公开下载的软件,视频,尤其是镜像文件。如果被修改了可能会导致用不了或者其他的问题,发布者镜像MD5算法计算一组数值。让下载的用户进行MD5数值对比,也就是MD5校验啦。由于MD5加密不可逆算,如果数值一样,那就表示文件没有被修改的。反之,则被修改了
MD5校验工具,其实就是一个MD5加密计算的软件啦。把下载好的软件或工具拖动放到软件里面计算然后得到软件的MD5值。
下面我们到网上去搜索”MD5校验工具“下载一个
安装好之后,运行MD5校验工具。一般都会是下面这个图片这种格局显示啦,点击”浏览”选项,可以浏览添加你需要校验的软件,镜像或视频文件等等
MD5校验---下载软件,记录MD5值
打开搜索一个镜像,比如win7旗舰版。我找到下载该软件的文件系统信息MD5值如下图( 注意下载软件之前把这个MD5数值最好拷贝截图下来,待会软件下载好之后需要进行验证的喔)
步骤阅读
下面我们就下载找一个范例吧,你们自己可以下载进行测试哈。不一定是光盘的,只要下载提供者有提供MD5建议都尝试校验一下。好的就对比一下我刚刚的那个镜像文件吧,点击浏览进行添加文件
添加好文件之后,md5校验会自动开始计算。计算的时间,根据文件的大小和压缩包内的数量不同。稍等片刻,校验好了之后,如下图会出现当前下载的MD5和sha1值。
对比一下之前的那个备份的,如果相同表示文件没有被修改过,如果不同,那建议不要使用
MD5加密是一直复杂的不可逆的加密算法技术,通过MD5校验可以有效的检测下载资源的软件,镜像等资源。就不会出现,下载了一晚上,某X大片后来发现居然是 “葫芦娃”的悲剧。O(∩_∩)O哈哈~
一般在深度给的系统下载地址,都会同时下载回来一个MD5工具的,不用另下载了,你点击那个MD5.EXE,就可以了,然后选择要测试的文件,就可以算出它的数值,现才网站上的对比一下,一样就是OK了.
import org.apache.commons.codec.digest.DigestUtils;
//导入org.apache.commons.codec.digest.DigestUtils;
String timeStamp = "${__time(/1000,)}";
//定义时间timeStamp=服务器时间;
String randomStr = "${__Random(11111111,99999999)}";
//定义时间随机数=8位1-9的随机数;
String tmp = timeStamp + randomStr + "xxxxx";
//定义tmp=时间timeStamp,8位随机数和密码xxxxx;
log.info("timeStamp:" + timeStamp);
//打印timeStamp;
log.info("randomStr:" + randomStr);
//打印randomStr;
log.info("tmp:" + tmp);
//打印tmp;
//String un = DigestUtils.sha1Hex(tmp);
//定义un=哈希sha1加密的tmp;
//log.info("un:" + un);
//打印un;
String signature = DigestUtils.md5Hex (DigestUtils.sha1Hex(tmp)).toUpperCase();
//定义signature==哈希sha1加密的tmp然后再进行md5加密后进行大写;
log.info("signature:" + signature);
//打印signature;
vars.put("signature", signature);
//打印signature;
vars.put("timeStamp", timeStamp);
//打印timeStamp;
vars.put("randomStr", randomStr);
//打印randomStr;
方法/步骤
1、创建java文件:在指定的报名上右键单击-》new-》class文件,
2、在弹出的窗口中填写class文件名称,点击确定,生成java文件,
3、编写加密代码,使用md5将账号和密码组合加密。
4、编写解密代码,将上一步加密的密码,传入解密方法解密,
5、调用加密解密方法,测试代码是否可用
系统在提供接口给第三方系统使用时,通常为了安全性会做接口加密。
设计原则 :使用HTTPS安全协议 或 传输内容使用非对称加密,这里采用后者。
在对参数进行加密,生成sign时,相同的参数两次加密的结果不一样。
加密规则:
1.拼接出来的字符串不一致
测试时,在加密前将要加密的字符串打印出来比较,发现两次字符串一致。
2.编码问题
加密时,两次的默认编码不一致。
在上述加上默认编码: byte[] btInput = content.getBytes("utf-8"); ,问题解决。
简单实现:
1.接口调用方和接口提供方约定好统一的参数加密算法。
2.接口调用方在调用时把加密后的signature放在参数中去请求接口。
3.判断时间戳有效期。
4.将参数用约定号的加密算法进行加密,与参数中的signature进行比较,一致则调用接口。