码迷,mamicode.com
首页 > 其他好文 > 详细

query参数的RAS加密

时间:2019-01-06 14:29:52      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:encode   nlp   v2v   enc   bubuko   图片   lct   文件   参数   

问题

接口测试中遇到参数需要加密的情况,如登录、修改密码。

现有2个接口:

  • 登录接口,Post接口,password加密,参数类型body;
  • 修改密码接口,Get接口,orderPassword、newPassword加密,参数类型query;

以上参数都使用RAS进行加密。

在请求过程中发现以下问题:

  1. 通过接口请求,后端可解密登录接口的password,而修改密码接口参数解密失败。
  2. 在后端代码中直接调用解密方法,可解密修改密码接口参数。

原因

为何修改密码接口参数解密失败?

修改密码接口的参数类型是query

现有加密方法中是使用Base64.getEncoder()进行加密

byte[] byteContent =Base64.getEncoder().encode(bytes);

处理后的加密串是如下形式:

FuQpqfj51QVMMI/QTPe5FWgOKam+QZYcOvkiWR/QOwhUl6Yux8zYXaRmG8XX2tYVEdqIzlhnsPAoA4BarC54oiefwk9DDdZEVplctDloJY1VsiCmxhTvuPs/gBuP2DiodSLU7IcaEabAGSeIOhVO1DeQMMs7nQYTTn/2NslD6zA=

可以看到加密串中包含有/、+,在URL中这些特殊字符会被重新解析,而不是原文传输到后端,所以导致后端在解密通过Base64.getEncoder()加密过的query参数失败。

为何登录接口参数解密成功?

登录接口的参数类型是body,传输Json数据,以application/json方式进行编码,不会出现加密串在传输过程中被重新解析的问题。

解决方案

使用Base64.getUrlEncoder()(URL 和文件名安全型 base64 编码方案)对query参数进行加密

byte[] byteContent =Base64.getUrlEncoder().encode(bytes);

处理后的加密串是如下形式:

QfCQV2V0MyAS2G8Ja4HNnlpQvv6XZxObRGL3mD2XvB6l2nE8Vb3By_zicKneFiF8Rn5ZDjzPk6AB_4qDMzrbe2ez6cCkR8z_CPCKwt2IGVUnCQtaYdBVFAAkHzgR9L8TS1q--bFAmWLc-exSEAm5moWWH-fCoHYmMP0I4YHG1rA=

加密串中不包含/、+,将加密后的query参数拼接在URL后请求接口,后端成功解密,修改密码成功。

技术分享图片

结论

  • 对于URL中的RAS加密参数需要使用Base64.getUrlEncoder()进行加密;
  • URL中的参数包含中文等特殊字符也可以使用Base64.getUrlEncoder()处理后再进行传输。

 

query参数的RAS加密

标签:encode   nlp   v2v   enc   bubuko   图片   lct   文件   参数   

原文地址:https://www.cnblogs.com/6970-9192/p/10228353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!