本篇介绍的是RAS与MD5的混合使用的demo,前后端加密流程可以有很多中,旨在思路,就直接上代码
public class Demo1 {
//基本的url 经过RAS加密
private static final String BASE_URL = "JVxVRAXQssre4hozo40u49aTWLSuFYwr8Vm6XH0k5S8=";
public static void main(String[] args) {
//假设http请求 从服务器端获取Key
String netServerKey = getNetServerKey();
// 这里操作是在客户端做的
//客户端对netServerKey进行MD5的解密 --- 只是保证了数据传输的安全性
String myKey = MD5.convertMD5(netServerKey);
//再次对myKey进行自定义规则的处理 得到真正的key
String parseKey = parseKey(myKey);
//通过秘钥parseKey 去解析一些在客户端存储比较重要的数据--(数据是经过RSA加密处理的)
try {
String baseUrl = RSAUtil.decrypt(BASE_URL, parseKey);
System.out.println(baseUrl);
} catch (Exception e) {
e.printStackTrace();
}
}
//这里的操作是加密操作是在服务器端做的
public static String getNetServerKey(){
String serverKey = "onacbe"; //对key进行了自定义规则的排序
return MD5.convertMD5(serverKey); //而这个自定义规则的排序后的Key进行MD5加密后返回到客户端
}
//自定义规则---解析得到真正的key
private static String parseKey(String myKey) {
String[] keys = new String[myKey.length()];
for (int i =0;i<myKey.length();i++){
keys[i] = String.valueOf(myKey.charAt(i));
}
StringBuilder builder = new StringBuilder();
int length = keys.length;
for (int j = length - 1; j > -1; j--) {
if (j > 0 && j % 2 != 0) {
String temp = keys[j];
keys[j] = keys[j - 1];
keys[j - 1] = temp;
}
builder.append(keys[j]);
}
String s = builder.toString();
return s.substring(0, 1).toUpperCase() + s.substring(1) + length + length;
}
}