首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在java中的字符串中包含连接运算符(+)

在java中的字符串中包含连接运算符(+)
EN

Stack Overflow用户
提问于 2015-12-10 10:37:55
回答 2查看 95关注 0票数 1

我正在使用“AES”算法加密java中包含用户信息的文本,并将其附加到url (将发送给客户以访问应用程序)。我成功地从客户端(AngularJS)中的url检索到了加密的文本,并通过rest调用将其发送回Server side(java),以解密并检索相应的信息。

但我面临的问题是,由于加密文本包括"+",所以Java将其视为级联操作符,并将其替换为space,在解密前更改原始加密格式。

我试过encValue=encValue.replaceAll("\\+", "\\\\+")

ecryptedText (在angularJS中获取并传递给angularJS的加密URL参数)

a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=

在java (相同加密值)中的结果

a6fPPqUwnkobdB7D8B53en\\ FlNcEt Ehd4Ze6srqM/Q=

我希望加密的文本保留原来的结构。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-10 10:43:06

但我面临的问题是,由于加密文本包括"+“,Java i将其视为级联操作符。

对我来说这听起来很不太可能。这也解释不了你为什么要得到一个空间。相反,这听起来像是一个URL编码问题.通常,URL查询参数中的+用于编码空间。

基本上,您应该使用URL安全的base64编码,或者在将字符串包含在URL中之前通过URL编码器运行字符串。因此,您的查询参数应该是

代码语言:javascript
运行
复制
a6fPPqUwnkobdB7D8B53en%2BFlNcEt%2BEhd4Ze6srqM/Q=
票数 2
EN

Stack Overflow用户

发布于 2015-12-10 12:51:29

因此,问题主要是正如Jon所指出的,这是URL编码问题,因为查询参数中的"+"字符是Space编码形式

因此,仅在AES加密 a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=之后进行加密a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=后的编码就会在解密文本的过程中产生问题,因为在URL查询参数中,文本被用作查询参数(因为它包含"+",编码后的空间形式)。

溶液

在实际使用加密文本作为查询参数之前,先执行加密文本的编码。

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

最终,不仅"+",而且所有URL特定的字符都将转换为相应的( HTML5中的默认字符集为UTF-8 )。检查ASCII编码参考文献)。

并且,一旦您在直通JavaScript (客户端)中获取特定的URL查询参数,对原始文本的转换就会自动进行(就像我所经历的那样)。

a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34199665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档