版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qin_shi/article/details/83176411
前言
服务器要求对请求进行sha1加密,请求用的Retrofit,所以要对请求的RequestBody进行加密
获取sha
public class EncryptUtils {
public static String getSHA(String info) {
byte[] digesta = null;
try {
// 得到一个SHA-1的消息摘要
MessageDigest alga = MessageDigest.getInstance("SHA-1");
// 添加要进行计算摘要的信息
alga.update(info.getBytes());
// 得到该摘要
digesta = alga.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 将摘要转为字符串
String rs = byte2hex(digesta);
return rs;
}
private static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (byte aB : b) {
stmp = (Integer.toHexString(aB & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs;
}
}
EncryptUtils 是个工具类,传入String后,会获取相对应的sha。MessageDigest是加密方法类。
加密RequestBody
private RequestBody buildRequsetBody(String content) {
//此处封装了请求的信息
String signature = EncryptUtils.encryptBody(content);
StringBuilder builder = new StringBuilder();
builder.append(“os”).append("=").append("android").append("&")
builder.append(“signature”).append("=").append(signature).append("&")
String requestString = builder.substring(0, builder.length() - 1);
return RequestBody.create(MediaType.parse("application/x-www-form-urlencoded; charset=utf-8"), requestString);
}
请求接口
@POST("register/email")
Observable<MyHttpResponse<LoginDataBean>> registerEmail(@Body RequestBody requestBody);
使用Rxjava2 + Retrofit
调用请求接口
baseConfigureApiService.fectchCommodityList(buildRequsetBody("要加密的数据"));
baseConfigureApiService为其实现类。