base64加密和MD5加密
程序员文章站
2024-03-20 10:16:28
...
今天项目开发遇到了一个需要加密的需求,其加密方式大概为将请求的json串的所有字符按照升序从新排列,再将秘钥放拼接在排序后的字符串头,然后进行md5(32位)加密再转成小写即获得参数签名结果sign值。最后把sing值拼接在请求json前,进行base64加密后就为最后的请求参数
示例
1.josn串:{"source":"1","version":"2.0","idently_id":" CMV14223786","data":{}}
2.排序后:"""""""""""""",,,.01122234678::::CMV_aacdddeeeiiilnnoorrssttuvy{{}}
3.sign为:sign = downcase(md5(secretKey+排序后json))
4.最后request为:req=base64(sign + 排序前json串)
代码
base64和md5都是使用jdk自带api
1.排序:
private String sortJson(String json) {
char[] chars = json.toCharArray();
Arrays.sort(chars);
return new String(chars);
}
2.签名:
public String sign(String json,String key){
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
md5.update((key + sortJson(json)).getBytes("UTF-8"));
String md5String=new BigInteger(1, md5.digest()).toString(16);
return fillMD5(md5String).toLowerCase();
}catch (Exception e){
e.printStackTrace();
}
return "";
}
private String fillMD5(String md5){
//如果不够32位则回调自身补零,最后返回32位长度的签名
return md5.length()==32?md5:fillMD5("0"+md5);
}
3.base64加密:
private String base64Encode(String str){
if (str == null || "".equals(str)){
return "";
}
Base64.Encoder encoder = Base64.getEncoder();
byte[] encode = encoder.encode(str.getBytes());
return new String(encode);
}
上一篇: 时间复杂度 二分查找
下一篇: DOM和BOM