java - 加密重定向到外部网站的 URL

标签 java url encryption

我正在开发一个 Web 应用程序,它将用户重定向到外部 Web 应用程序。我想加密重定向网址,这样用户就不能直接修改网址。外部供应商希望使用三重 DES。这是我的问题:

  1. 我假设外部 Web 应用程序的开发人员和我必须交换某种“ key ”,以便我们可以解密和加密 URL,这是正确的吗?

  2. 这个“ key ”是我们最初可以通过电子邮件交换的某种文件或某种字符序列吗?

  3. 我用 Java 编写 Web 应用程序,而外部供应商用 .NET 编写他们的 Web 应用程序,这重要吗?

最佳答案

听起来您需要对请求参数进行签名,而不是对其进行加密。你可以尝试这样的事情;

1) 创建您想要使用数字签名保护的数据字符串,例如您的 URL 是;

http://www.example.com/doCourse?userid=123&courseid=abc

并且您想保护您创建的字符串中的 userid 和 courseid 参数;

courseid=abc&userid=123

请注意,在这种情况下,通常会按字母顺序创建参数字符串。

2) 使用Message Authentication Code使用 SHA-1 等加密哈希函数来生成字符串的哈希值。

这样做;

Key key = ..... //You need to agree a key with the other party.
String string = ..... //The data you want to sign eg "courseid=abc&userid=123"
Mac mac = Mac.getInstance("HMAC-SHA1");
mac.init(key);
byte[] result = mac.doFinal(string.getBytes("UTF-8");

MAC 基本上使用 key (您事先与对方同意)来生成数据的哈希值。

3) Base64 编码,然后对结果进行 URLEncode 并将其作为参数包含在重定向中(称之为“签名”)。

4) 对方执行与您相同的操作,他们生成字符串,使用 MAC 创建哈希、base64 编码和 URL 编码。接下来,他们将请求上的签名与他们生成的签名进行比较。如果相同则参数没有被篡改。如果哈希值不同,则用户必须修改它们。

您可能还想包括 cryptographic nonce请求阻止replay attacks 。如果您使用随机数,请确保在用于生成签名的字符串中包含随机数参数和值(确保用户无法篡改随机数)。

相对于加密的优点

  • URL 不会被模糊化,从而牺牲网络应用中对此的支持。
  • 可以通过网络应用程序前面仅检查签名的简单过滤器来实现安全性。
  • 您可以判断用户是否修改了数据,而仅通过加密无法保证这一点。使用 TDES,用户可能会更改密文并意外创建有效但不同的明文。

关于java - 加密重定向到外部网站的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6611304/

相关文章:

validation - URL 验证似乎已损坏

php - 使用 php 对 url 消息 ID 进行编码和解码

c - C语言中流密码的实现

java - JavaFX 中的复选框问题

java - 我的 bundle 正在使用哪个版本的软件包?

java - 公共(public) CLI : recognize file name *. 十

java - 在 Java 中,如何添加每个循环的结果?

java - 下载 Piktogramms 时文件太大

node.js - NodeJS https是否对流量进行对称加密

c - Arduino AES128加密-解密问题