加密和哈希AJAX调用与两个服务器通信

时间:2015-10-10 14:32:21

标签: ajax asp.net-mvc encryption

我创建了两个示例应用程序

  1. ASP.NET WEB API和
  2. ASP.NET MVC应用程序
  3. 我的一些MVC应用程序屏幕通过进行AJAX调用来访问WEB API,这是我能够成功实现的。

    现在我想在不使用的情况下实现Hasing / Encryption HTTPS。

    我的问题是为了实现Hasing / Encryption 对于AJAX调用,我需要

    1. 首先对MVC方法进行AJAX调用。
    2. 加密/散列JSON,
    3. 将其返回浏览器
    4. 然后使用Encrypted / Hashed JSON对WEB API进行AJAX调用
    5. 这种做法是否正确?

1 个答案:

答案 0 :(得分:0)

客户端是否应该能够解密从MVC方法返回的数据?

如果没有,那么您可以在MVC和Web API中使用相同的预共享密钥,并且您的方法相对安全。您需要使用HMAC而不是简单的哈希来验证数据的真实性。使用第二个不同的密钥作为HMAC密钥。

使用第二个密钥对加密数据(encrypt-then-MAC)运行HMAC,并将其与密文一起发送。当Web API收到密文和MAC时,它应首先在尝试解密之前验证MAC。

为了使这一点至少有点安全,您需要使用非对称加密来进行对称密钥的密钥交换。

准备:生成两个RSA(或其他)密钥对。一个用于MVC端点,另一个用于Web API。将私钥移动到服务器端点,并将编码形式的公钥添加到客户端页面。

  1. 客户端:生成AES密钥,使用MVC公钥对其进行加密并将其发送到MVC
  2. MVC:使用RSA私钥解密加密的AES,使用恢复的AES密钥加密数据并将其返回给客户端
  3. 客户端:使用AES密钥解密数据并使用它执行某些操作
  4. 客户端:使用AES密钥加密(部分)数据,使用Web API的公钥加密AES密钥,并将两个密文发送到Web API
  5. Web API:使用私钥解密加密的AES密钥,使用AES密钥解密数据,对数据执行某些操作并返回一些结果(可能使用AES加密)
  6. 为了使其更加健壮,您可以生成两个对称密钥,并使用一个用于加密,另一个用于HMAC,以便验证对称密文。