我正在使用“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=
我希望加密的文本保留原来的结构。
谢谢
发布于 2015-12-10 10:43:06
但我面临的问题是,由于加密文本包括"+“,Java i将其视为级联操作符。
对我来说这听起来很不太可能。这也解释不了你为什么要得到一个空间。相反,这听起来像是一个URL编码问题.通常,URL查询参数中的+用于编码空间。
基本上,您应该使用URL安全的base64编码,或者在将字符串包含在URL中之前通过URL编码器运行字符串。因此,您的查询参数应该是
a6fPPqUwnkobdB7D8B53en%2BFlNcEt%2BEhd4Ze6srqM/Q=发布于 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=
https://stackoverflow.com/questions/34199665
复制相似问题