Silverlight:加密Web服务的用户名和密码

时间:2009-05-18 15:29:09

标签: silverlight encryption

加密不是我的目标。

我正在Silverlight 3中编写一个应用程序,它与Web服务进行通信以验证用户身份。 Web服务不一定在SSL下托管。我试图在传递用户名和密码之前找到一种方法可逆地加密用户名和密码,而不依赖于密钥和盐被硬编码到Silverlight程序集中。它不支持RSA(或任何非对称算法),因此我无法使用服务器中的公钥。

有没有做这种事情的模式?

3 个答案:

答案 0 :(得分:5)

RSA真的是最好的方式,但实际上Silverlight 2或3库中没有实现。在我看来,这是真正应该添加的东西,尽管它现在直到Silverlight 4才会发生。不幸的是,自定义RSA实现可能真的很痛苦,所以我期望它不太可行。

这是我提出的解决方案......它肯定不像简单地从服务器发送公钥那么简单,但它应该安全地完成工作。

  1. 使用Diffie-Hellman key exchange算法就用于以后加密的密钥达成一致。这是为了在不安全的频道上工作,所以这里没有问题。有关C#实现,请参阅here
  2. 使用Diffie-Hellman交换机建立的密钥进行排序对称加密,以通过连接发送用户名/密码。然后,服务器可以使用相同的密钥进行解密,虽然客户端和服务器都知道该密钥,但对任何第三方来说都是 unknown 。在这种情况下,对称加密算法的强度实际上并不重要。 (如果我错了,有人会纠正我。)一个简单的XOR密码应该可以完成这项工作。您似乎也可以使用AES标准,包含在Silverlight BCL的System.Security.Cryptography命名空间中。
  3. 希望有所帮助。如果你不清楚任何一点,请告诉我。

答案 1 :(得分:2)

这是一个在Silverlight中具有RSA加密开源的库 http://www.riawebsoft.ru/Silverlight/Rsa/Test.aspx

答案 2 :(得分:0)

我发布了一个与.NET RSACryptoServiceProvider兼容的RSA库(包括PKCS和OAEP),并且符合RSA标准。这是开源的:

http://scrypt.codeplex.com