1、必须找一个在Android和JDK上通用的加密算法,后面发现了http://www.cnblogs.com/hjtdlx/p/3926141.html这篇文章,试了一下,是可以用的。
2、Android和Server端的传输采用JSON格式,除了加密还要校验是否被修改。传输格式:
{params:xxx,sign:xxx}
其中,params为经过DES3加密的json数据,sign为原json数据md5值。这样,在收到数据后先进行DES解密,然后将解密后的json数据进行MD5,和传过来的sign比对就可以知道是不是原数据。
加密的相关代码
/** * 加密处理 * @param data json数据 * @return * @throws Exception */ private String encodeSign(String data) throws Exception{ JSONObject jsonObject = new JSONObject(); jsonObject.put("params", Des3.encode(data)); jsonObject.put("sign",MD5Util.encryptPassword(data)); return data = jsonObject.toJSONString(); }
解密的时候只需在统一的拦截器里面处理即可
private JSONObject decodeSign(JSONObject result){ try { String params = Des3.decode(result.getString("params")); String sign = result.getString("sign"); if(sign.equals(MD5Util.encryptPassword(params))){ result = JSONObject.parseObject(params); }else{ throw new RuntimeException("validate sign fail"); } } catch (Exception e) { e.printStackTrace(); } return result; }
3、开发的时候发现MD5的加密产生的结果不一致,后面发现MD5加密的方法中String.getBytes()没有指定字符集编码,Android和Server端的编码格式不一样导致。
时间: 2024-08-29 11:39:03