我写了两个接口 一个是对字符串加密 的,一个是解密的 。加密的可以通过调用接口生成加密字符串如下:
Oc0PEwKrLzHqT25hYLhWP5wlk5HROPJoWC3chlqMHBoxLQ/WUcbKwsamjy+N2RsBDwFnFegg1tQXmuvWUcuxIMKwMC8RCjWjgVVCH385LBiXkGLM+q9hhlfEMjavM0vHfvx02/Af+njixF7M2yuVmf6lhH2BnQ2j4sR12HvfRHbDnzKQbhrydNh7k90qB43B
可是解密的时候 在MAIN方法测试可以解密,但是通过URL调用接口的时候就出错了 ,听说是url编码问题 不太了解,如下是解密的接口:
/**
* 对密钥解密
* @param enStr
* @return
* @throws Exception
*/
@ResponseBody
@RequestMapping(value="/deCryptKey/{enStr}",method=RequestMethod.GET)
public String deCryptKey(@PathVariable("enStr") String enStr) throws Exception{
//enStr = new String(enStr.getBytes("iso-8859-1"),"utf-8");
//enStr = java.net.URLDecoder.decode(enStr,"utf-8");
String deStr = KmService.deCryptKey(enStr);
return deStr;
}
------解决思路----------------------
你可以尝试用URLEncoder再加密一次。
------解决思路----------------------
没猜错的话,你应该是
加密:字符串->url传输->加密后的字符串
解密:解密后的字符串->url传输->字符串
很明显在url编码的时候出了问题,用spring框架么,问题是比较多的,别特是其内部写死了编码方式,so你需要两部操作
server.xml添加
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
web.xml添加
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
------解决思路----------------------
把已经加密的字符串再编码一次,获取到后再解码
//step1
String code= "Oc0PEwKrLzHqT25hYLhWP5wlk5HROPJoWC3chlqMHBoxLQ/WUcbKwsamjy+N2RsBDwFnFegg1tQXmuvWUcuxIMKwMC8RCjWjgVVCH385LBiXkGLM+q9hhlfEMjavM0vHfvx02/Af+njixF7M2yuVmf6lhH2BnQ2j4sR12HvfRHbDnzKQbhrydNh7k90qB43B
"
//编码
String urlEnCode = URLEncoder.encode(code,"UTF-8");
//step2
//解码
String urlDeCode = URLDecoder.decode(urlEnCode,"UTF-8");
//再解码
String deStr = KmService.deCryptKey(enStr);