【问题标题】:Silverlight: encrypting username and password for web serviceSilverlight:为 Web 服务加密用户名和密码
【发布时间】:2010-11-30 02:31:39
【问题描述】:

加密不是我的强项。

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

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

【问题讨论】:

    标签: silverlight encryption


    【解决方案1】:

    RSA 确实是最好的方法,但在 Silverlight 2 或 3 库中确实没有实现。在我看来,这是真的应该添加的东西,尽管在 Silverlight 4 之前它不太可能发生。不幸的是,自定义 RSA 实现可能真的很痛苦,所以我认为它不太可行。

    这是我提出的解决方案...它当然不像简单地从服务器发送公钥那么简单,但它仍然可以安全地完成这项工作。

    1. 使用Diffie-Hellman key exchange 算法来商定用于以后加密的密钥。这是为在不安全的通道上工作而设计的,因此这里没有问题。有关 C# 实现,请参阅 here
    2. 使用某种对称加密和 Diffie-Hellman 交换建立的密钥,通过连接发送用户名/密码。然后,服务器可以使用相同的密钥进行解密,虽然客户端和服务器都知道该密钥,但任何第三方未知。在这种情况下,对称加密算法的强度实际上并不重要。 (如果我错了,请有人纠正我。)事实上,一个简单的 XOR 密码应该可以完成这项工作。看来您也可以使用 AES 标准,该标准包含在 Silverlight BCL 的 System.Security.Cryptography 命名空间中。

    希望对您有所帮助。如果您对任何一点不清楚,请告诉我。

    【讨论】:

    • 这看起来很理想。今晚我会试一试。
    • 好吧,祝你好运!补充一点,如果我链接到的 Diffie-Hellman 实现不能正常工作,您可以尝试我在 Windows SSH Server 项目中编写的实现:code.launchpad.net/windows-ssh-server
    • 所以我认为这也需要在 Silverlight 客户端上实现 Diffie-Hellman 吗?是否有任何实现,而无需重写所有内容来为 SL 编译?
    【解决方案2】:

    这是 Silverlight 中用于 RSA 加密的开源库 http://www.riawebsoft.ru/Silverlight/Rsa/Test.aspx

    【讨论】:

      【解决方案3】:

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

      http://scrypt.codeplex.com

      【讨论】:

        猜你喜欢
        • 2011-02-22
        • 2017-05-18
        • 2012-10-20
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 2011-05-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多