加密不是我的问题.
我正在Silverlight 3中编写一个应用程序,它与Web服务通信以验证用户身份. Web服务不一定在SSL下托管.我试图在传递用户名和密码之前找到一种方法可逆地加密用户名和密码,而不依赖于密钥和盐被硬编码到Silverlight程序集中.它不支持RSA(或任何非对称算法),因此我无法使用服务器中的公钥.
做这种事有什么模式吗?
解决方法
RSA真的是最好的方式,但实际上Silverlight 2或3库中没有实现.在我看来,这是真正应该添加的东西,尽管它现在直到Silverlight 4才会发生.不幸的是,自定义RSA实现可能真的很痛苦,所以我不太可能.
这是我提出的解决方案……它肯定不像简单地从服务器发送公钥那么简单,但它应该安全地完成工作.
>使用Diffie-Hellman key exchange算法就用于以后加密的密钥达成一致.这是为了在不安全的频道上工作,所以这里没有问题.有关C#实现,请参见here.
>使用Diffie-Hellman交换所建立的密钥进行某种对称加密,以通过连接发送用户名/密码.然后,服务器可以使用相同的密钥进行解密,虽然客户端和服务器都知道,但是任何第三方都不知道.在这种情况下,对称加密算法的强度实际上并不重要. (如果我错了,有人会纠正我.)一个简单的XOR密码应该可以完成这项工作.您似乎也可以使用AES标准,该标准包含在Silverlight BCL的System.Security.Cryptography命名空间中.
希望有所帮助.如果你不清楚任何一点,请告诉我.