微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何加密和解密URL中的查询参数?

如何解决如何加密和解密URL中的查询参数?

在我的系统中,我正在生成带有表示ID的查询参数的URL。我想对这些ID进行加密,以使它们不会在URL中被轻易地操纵。这些将是面向公众的URL,我不希望用户能够操纵该URL并能够获取其他用户的数据,所以我想对这些ID进行加密。

我将在Java应用程序中加密ID,然后在Javascript应用程序中解密ID。我在两个地方都可以使用一些通用的加密算法吗?是否有可用的库在Java和Javascript中执行此类操作?

我意识到我的两个应用程序都需要访问公用的“密码”或解密密钥,并将其存储在两个应用程序都可以访问的密钥库位置。

解决方法

IMO,您应该自己生成一个公共/私有密钥(OpenSSL,Java密钥工具...)。

  1. 使用javascript使用公共密钥加密您的数据
  1. 在服务器端-Java上,您可以使用私钥解密数据以执行业务行为。有许多示例/库可以通过私钥进行解密,例如

您应该阅读RSA算法的原理,以了解其工作原理。 基本上,您需要通过公用密钥(前端部分)对数据进行加密,并通过其私钥对其进行解密(后端部分)。

不推荐: 如果您仍想通过javascript在前端进行解密,则意味着您必须公开您的私钥,以便javascript可以读取并解密。从技术上讲可以,但是可能存在安全问题

另一种解决方案:

  • 您可以将(Id,secret_data .....)之类的数据加密为加密的字符串,然后将该字符串作为URL的参数发送(在服务器端生成)
  • 当最终用户单击该URL时,您将通过私钥(服务器端)解密参数以获取实际数据(Id,secret_data ...)
,

除非您的值实际上需要使用HMAC保密。这样,您可以验证所提供的url是否已被篡改,而无需实际共享密钥或要求客户端自行解密数据。

只需为所需的关键值生成一个hmac,然后将该值附加到url。当用户访问特定路径时,请阅读该网址并将其与hmac进行比较。

url = 'http://my.site/users/123
signature = hmac(secret_key,url);
signed_url = url.addQueryValue('s',signature);

在路上,查看签名并验证它是否与重新生成的hmac匹配。

您可以做的其他事情是将签名附加到签名,例如有效期。声明可用于跟踪访问,以及在一段时间后撤消对URL的访问。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。