DES和RSA加密数据传输信息Java实现
DES加密的方式现在已经不安全了,而我们的RAS加密的速度很慢,并且有长度限制,每一个块只能达到117字节,在给移动终端编写接口时传输的信息大都明文传输,而使用Https协议又不是很方便,所有我就写了一个DES和RSA加密对数据进行加密的方案,大致的想法是先随机生成密钥,用DES对数据进行加密,再用RSA对DES加密密钥进行加密,再传输,服务端先分开字符串,用私钥解密密钥,再用密钥对DES加密的内容进行解密,就完成了数据的安全传输。下面写一下实现的方法
String result = "";
String cryptionKey = "";
String key = GetKey.getKey();//产生随机字符串
try {
result = desUtil.encrypt(json.toString(), key);//用DES加密
cryptionKey = SecUtil.encrypt(Data.pub, key);//用RSA对密钥进行加密
} catch (Exception e) {
e.printStackTrace();
}
result = result + "|" + cryptionKey;
String url = "http://localhost:8080/login";
String param = "json=" + result;
String s = HttpRequest.sendPost(url, param);
GetKey.class
public class GetKey {
public static String getKey(){
String s = UUID.randomUUID().toString();
System.out.println(s);
String [] str = s.split("-");
s = "";
for(String st : str){
s = s + st;
}
return s;
}
}
两个加密算法因为很长,就给出了连接
在服务端我们接受到了数据进行解密
public static JSONObject analyseMes(String json){
json = json.replace(" ", "+");//传输过程中RSA密文“+”变成了空格,再替换回来
String [] mes = json.split("[|]");//分析字符串
String key = SecUtil.decryptMax(Data.pri, mes[1]);//解密密钥
String result = null;
try {
result = desUtil.decrypt(mes[0], key);//用key对数据进行解密
} catch (Exception e) {
e.printStackTrace();
}
JSONObject jsonObject = JSON.parseObject(result);
return jsonObject;
}
两个解密算法也可以访问连接
加密速度都不是很快,在大用户量访问的情况下,服务器处理大量的数据受到了限制,上面的实现方式应该不是很合理,所以使用Https是一个很好的方案,并且只用在关键的数据上加密,其他的数据可以不进行处理,同时使用单点登录也是一个很好的选择,后面也会对上面的实现方式进行改进。