2010-02-01 46 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