安全发送/检索数据

时间:2011-06-13 17:00:18

标签: c# asp.net encryption cryptography

我希望能够以半安全的方式发送和检索数据,而无需使用HTTPS或SSL。

目前,我正在使用salted MD5哈希摘要将数据发布到服务器,以防止参数被篡改:

http://www.myserver.com?name=John&digest=ed076287532e86365e841e92bfc50d8c

但我还要加密客户端上的纯文本数据,然后在服务器上将其解密回纯文本,以便数据看起来像:

http://www.myserver.com?name=sK5E4Ld4sw5ie&digest=ed076287532e86365e841e92bfc50d8c

用什么方法来实现这个目标?

2 个答案:

答案 0 :(得分:3)

最简单的方法是在客户端和服务器上包含预共享密钥(例如AES)。 或者,使用RSA密钥对(客户端公用,服务器私有),但RSA加密参数将占用更多空间。

答案 1 :(得分:0)

发送摘要(MD5或其他)不会阻止篡改,除非可以验证(通常是针对签名和服务器知道的证书)。否则,攻击者可以同时轻松地修改请求的实体和URI中的摘要。您当然需要使用私钥对摘要进行签名,假设事先知道您的公钥以进行验证。

虽然你说你不想使用SSL / TLS,但你应该仔细研究它,因为自制的加密很少像你想的那样安全(参见你自己的例子)。如果您正确使用密钥和/或证书,这应该为您提供完整性(无篡改)和机密性(加密)。

如果要加密实体,可以考虑:

  • PGP / OpenPGP / GPG(您可以在C#中使用BouncyCastle)
  • XML encryption(可能是XML DSig)。
  • HTTPsec(虽然我不确定它是如何“证明”的,但我不知道任何C#实现)