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

3

加密不是我的长项。

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

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

3个回答

5
RSA是这里最好的选择,但实际上Silverlight 2或3库中都没有实现。在我看来,这是应该添加的,但直到Silverlight 4才有可能发生。不幸的是,自定义RSA实现可能真正痛苦,因此我认为不太可行。
这是我的解决方案...它肯定不像从服务器简单地发送公钥那样简单,但仍然可以安全地完成工作。
  1. 使用Diffie-Hellman密钥交换算法来协商一个用于以后加密的密钥。这个算法被设计用于不安全的信道,所以没有问题。在这里查看C#实现here
  2. 使用一种对称加密算法和Diffie-Hellman交换建立的密钥来发送用户名/密码。服务器可以使用相同的密钥进行解密,虽然客户端和服务器都知道该密钥,但是对于任何第三方来说仍然是未知的。在这种情况下,对称加密算法的强度实际上并不重要。一个简单的XOR密码应该能胜任。似乎还可以使用AES标准,它被System.Security.Cryptography命名空间包含在Silverlight BCL中。
希望这有所帮助。如果您对任何要点不清楚,请告诉我。

看起来很理想。我今晚会试一下。 - Mark Rendle
好的,祝你好运!只是要补充一下,如果我提供的 Diffie-Hellman 实现无法正常工作,你可以尝试我作为 Windows SSH 服务器项目的一部分编写的实现:https://code.launchpad.net/windows-ssh-server。 - Noldorin
那么我理解这也需要在Silverlight客户端实现Diffie-Hellman吗?有没有不必重写所有内容以编译为SL的实现方式? - Peet Brits

2

0

我发布了一个与.NET RSACryptoServiceProvider(PKCS和OAEP都支持)兼容且符合RSA标准的RSA库。它是开源的:

http://scrypt.codeplex.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接