在 java 中的字符串中包含连接运算符 ( + )
Include concatenation operator ( + ) with in the string in java
我正在使用"AES"加密包含java中的用户信息的文本 算法并将其附加到 url,(将发送给客户以访问该应用程序。我成功地从 [= 检索 加密文本65=] 在客户端 (AngularJS) 并发送回 服务器端(java) 通过 rest 调用对其进行解密并检索相应的信息。
但我面临的问题是,由于加密文本包含 "+",Java 将其视为 连接运算符 并用 space 替换它,在解密之前更改原始加密格式
我试过 encValue=encValue.replaceAll("\+", "\\+")
ecryptedText(在 angularJS 中提取的加密 URL 参数,并将其传递给 Java)
a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=
结果java(相同的加密值)
a6fPPqUwnkobdB7D8B53en\ FlNcEt Ehd4Ze6srqM/Q=
我希望加密文本保留其原始结构
谢谢
But the problem i am facing is , since the encrypted text include "+" ,Java i treating it as a concatenation operator
这对我来说听起来非常非常不可能。它也无法解释为什么您会收到 space。相反,这听起来像是一个 URL 编码问题......通常 URL 查询参数中的 +
用于编码 space.
基本上,您应该使用 URL-安全的 base64 编码,或者 运行 通过 URL-编码器的字符串,然后再将其包含在 URL 中。所以你的查询参数应该是
a6fPPqUwnkobdB7D8B53en%2BFlNcEt%2BEhd4Ze6srqM/Q=
正如 Jon Skeet 指出的那样,主要是问题是 URL 编码 问题,因为 "+"查询参数中的字符为Space.
的编码形式
所以仅仅Base64编码后AES加密a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=
就会在解密文本的过程中出现问题在 URL 中用作 查询参数(因为它在 URL 查询参数中包含 space 的编码形式“+”) .
解决方案
在实际将其用作 URL 查询参数之前,对加密文本执行 URL 编码。
a6fPPqUwnkobdB7D8B53en%2BFlNcEt%2BEhd4Ze6srqM%2FQ%3D
这里最终不仅 "+" ,而且所有 URL specific 字符都将转换为相应的字符集(HTML5中的默认字符集是UTF-8。检查ASCII Encoding Reference)。
一旦您通过 JavaScript(客户端)获取特定的 URL 查询参数,原始文本的转换就会自动发生(这就是我所经历的)。
a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=
我正在使用"AES"加密包含java中的用户信息的文本 算法并将其附加到 url,(将发送给客户以访问该应用程序。我成功地从 [= 检索 加密文本65=] 在客户端 (AngularJS) 并发送回 服务器端(java) 通过 rest 调用对其进行解密并检索相应的信息。
但我面临的问题是,由于加密文本包含 "+",Java 将其视为 连接运算符 并用 space 替换它,在解密之前更改原始加密格式
我试过 encValue=encValue.replaceAll("\+", "\\+")
ecryptedText(在 angularJS 中提取的加密 URL 参数,并将其传递给 Java)
a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=
结果java(相同的加密值)
a6fPPqUwnkobdB7D8B53en\ FlNcEt Ehd4Ze6srqM/Q=
我希望加密文本保留其原始结构
谢谢
But the problem i am facing is , since the encrypted text include "+" ,Java i treating it as a concatenation operator
这对我来说听起来非常非常不可能。它也无法解释为什么您会收到 space。相反,这听起来像是一个 URL 编码问题......通常 URL 查询参数中的 +
用于编码 space.
基本上,您应该使用 URL-安全的 base64 编码,或者 运行 通过 URL-编码器的字符串,然后再将其包含在 URL 中。所以你的查询参数应该是
a6fPPqUwnkobdB7D8B53en%2BFlNcEt%2BEhd4Ze6srqM/Q=
正如 Jon Skeet 指出的那样,主要是问题是 URL 编码 问题,因为 "+"查询参数中的字符为Space.
的编码形式所以仅仅Base64编码后AES加密a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=
就会在解密文本的过程中出现问题在 URL 中用作 查询参数(因为它在 URL 查询参数中包含 space 的编码形式“+”) .
解决方案
在实际将其用作 URL 查询参数之前,对加密文本执行 URL 编码。
a6fPPqUwnkobdB7D8B53en%2BFlNcEt%2BEhd4Ze6srqM%2FQ%3D
这里最终不仅 "+" ,而且所有 URL specific 字符都将转换为相应的字符集(HTML5中的默认字符集是UTF-8。检查ASCII Encoding Reference)。
一旦您通过 JavaScript(客户端)获取特定的 URL 查询参数,原始文本的转换就会自动发生(这就是我所经历的)。
a6fPPqUwnkobdB7D8B53en+FlNcEt+Ehd4Ze6srqM/Q=