簡體   English   中英

在java中的字符串中包含連接運算符(+)

[英]Include concatenation operator ( + ) with in the string in java

我正在使用“AES”算法在java中 加密包含用戶信息的文本並將其附加到URL(將被發送給客戶以訪問該應用程序。並且我成功地從URL中檢索加密文本客戶端(AngularJS)並通過休息調用將其發送回服務器端(java)以解密它並檢索相應的信息。

但我面臨的問題是,由於加密文本包含“+” ,Java將其視為連接運算符,並在解密之前用更改原始加密格式的空格替換它

我嘗試了encValue=encValue.replaceAll("\\\\+", "\\\\\\\\+")

ecryptedText (在angularJS中獲取加密的URL參數,當傳遞給Java時)

a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=

java(相同加密值)中的結果

a6fPPqUwnkobdB7D8B53en\\\\ FlNcEt Ehd4Ze6srqM/Q=

我希望加密文本保留其原始結構

謝謝

但我面臨的問題是,由於加密文本包含“+”,Java i將其視為連接運算符

這聽起來非常非常不可能。 它也無法解釋為什么你要獲得一個空間。 相反,這聽起來像是一個URL編碼問題...通常在URL查詢參數中使用+來編碼空間。

基本上,您應該使用URL安全的base64編碼,或者在將URL包含在URL中之前通過URL編碼器運行該字符串。 所以你的查詢參數應該是

a6fPPqUwnkobdB7D8B53en%2BFlNcEt%2BEhd4Ze6srqM/Q=

所以主要問題是Jon Skeet指出的,這是URL編碼問題,因為查詢參數中的“+”字符是Space編碼形式

因此,只有在AES加密之后Base64編碼 a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=將在解密文本的過程中引起問題,因為它在URL中用作查詢參數 (因為它包含“+”,編碼形式的空間在URL查詢參數中)。

在將加密文本實際用作URL查詢參數之前,請執行加密文本的URL編碼

a6fPPqUwnkobdB7D8B53en%2BFlNcEt%2BEhd4Ze6srqM%2FQ%3D

最終,不僅是“+” ,而且所有URL特定字符都將轉換為相應的字符集 (HTML5中的默認字符集是UTF-8。檢查ASCII編碼參考 )。

一旦你通過JavaScript(客戶端)獲取特定的URL查詢參數,原始文本的轉換就會自動發生(以及我所經歷的)。

a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM