在许多接口,尤其涉及到金额的地方,都需要用加密算法对数据进行加密。像密码、金额之类的,如果不做加密,被篡改数据,公司的损失会很大。
这里主要说MD5加密(即摘要算法),也就是采用哈希算法,将不定长度的内容转化为32位16进制固定长度的内容。前后台都使用这套算法,再将两者的加密数据比对,如果一致说明数据加密正确,否则数据可能出现篡改。
在pyhon里,可以导入hashlib进行加密,如下
方法一:
执行结果如下图:
方法二:
执行结果如下图:
系统在提供接口给第三方系统使用时,通常为了安全性会做接口加密。
设计原则 :使用HTTPS安全协议 或 传输内容使用非对称加密,这里采用后者。
在对参数进行加密,生成sign时,相同的参数两次加密的结果不一样。
加密规则:
1.拼接出来的字符串不一致
测试时,在加密前将要加密的字符串打印出来比较,发现两次字符串一致。
2.编码问题
加密时,两次的默认编码不一致。
在上述加上默认编码: byte[] btInput = content.getBytes("utf-8"); ,问题解决。
简单实现:
1.接口调用方和接口提供方约定好统一的参数加密算法。
2.接口调用方在调用时把加密后的signature放在参数中去请求接口。
3.判断时间戳有效期。
4.将参数用约定号的加密算法进行加密,与参数中的signature进行比较,一致则调用接口。
方法/步骤
1、创建java文件:在指定的报名上右键单击-》new-》class文件,
2、在弹出的窗口中填写class文件名称,点击确定,生成java文件,
3、编写加密代码,使用md5将账号和密码组合加密。
4、编写解密代码,将上一步加密的密码,传入解密方法解密,
5、调用加密解密方法,测试代码是否可用
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、第一步,运行MD5验证工具,单击“浏览”选项,可以浏览以添加需要验证的软件,镜像或视频文件等,见下图,转到下面的步骤。
2、第二步,执行完上面的操作之后,打开并搜索镜像,例如win7旗舰版,下载软件的文件系统信息MD5值,见下图,转到下面的步骤。
3、第三步,执行完上面的操作之后,单击“浏览”按钮添加文件,见下图,转到下面的步骤。
4、第四步,执行完上面的操作之后,md5验证将自动开始计算。
片刻之后,经过验证,将显示当前下载的MD5和sha1值,见下图。这样,就解决了这个问题了。