如何解决如何加密和解密URL中的查询参数?
在我的系统中,我正在生成带有表示ID的查询参数的URL。我想对这些ID进行加密,以使它们不会在URL中被轻易地操纵。这些将是面向公众的URL,我不希望用户能够操纵该URL并能够获取其他用户的数据,所以我想对这些ID进行加密。
我将在Java应用程序中加密ID,然后在Javascript应用程序中解密ID。我在两个地方都可以使用一些通用的加密算法吗?是否有可用的库在Java和Javascript中执行此类操作?
我意识到我的两个应用程序都需要访问公用的“密码”或解密密钥,并将其存储在两个应用程序都可以访问的密钥库位置。
解决方法
IMO,您应该自己生成一个公共/私有密钥(OpenSSL,Java密钥工具...)。
- 使用javascript使用公共密钥加密您的数据
- 在服务器端-Java上,您可以使用私钥解密数据以执行业务行为。有许多示例/库可以通过私钥进行解密,例如
- https://www.devglan.com/java8/rsa-encryption-decryption-java
- https://gist.github.com/fanglijun/a0d1218c9ef0b0670904e62778f6ed12
您应该阅读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 举报,一经查实,本站将立刻删除。