2010-02-01 78 views
2

我使用客户端的浏览器来提交HTTP请求。 对于生成报告,securityToken作为POST提交,为了下载报告,需要由用户浏览器提交相同的标记,这次使用GET。普通HTTP GET和POST通信的安全数据序列化

对于实际表示加密数据的securityToken,您会推荐哪种编码。

我试过BASE64,但是这个失败了,因为standard可以包含“+”字符,它在HTTP GET中被转换为“'(空格)。

然后我尝试了URL编码,但是这样做失败了,因为对于HTTP POST而言,诸如%3d的内容不经翻译而传输,但是当浏览器执行HTTP GET时,数据将被转换为'='。

什么编码,你会建议,允许通过HTTP POST安全传输& GET没有数据被误解。

环境是Java,Tomcat。

谢谢, Maxim。

回答

2

十六进制字符串。

Apache commons-codec有一个Hex类提供此功能。

它看起来是这样的: http://youraddress.com/context/servlet?param=ac7432be432b21

+0

我在想的东西更紧凑然后十六进制,像:BigInteger的双向=新的BigInteger( “STR_GOES_HERE” .getBytes()); System.out.println(bi.toString(36));这将输出一个-Z0-9字符范围,唯一的问题是我找不到一个合适的方法将其转换回字符串,任何想法? – 2010-02-01 11:31:42

+0

Hex类具有'encodeHex(..)'和'decodeHex(..)'方法 – Bozho 2010-02-01 11:36:06

+0

对不起,我相信我应该通过一个例子更好地解释一下自己:编码“HelloWorld”到base16中是“48656c6c6f576f726c64”,编码到base37是“1jo7hzvcp48urzvo”;这是十六进制十六字符,十六个字符为基本37这就是我寻求使用这种编码的原因。我的问题是我无法将“1jo7hzvcp48urzvo”转换回“HelloWorld”。 帮助,将不胜感激。 – 2010-02-01 12:01:37