c#Cryptography适用于Windows Phone 7和8应用程序,Silverlight客户端和Windows平板电脑应用程序

时间:2013-11-04 21:44:42

标签: c# windows-phone-7 windows-phone-8 cryptography windows-store-apps

我正在寻找c#中的加密示例,演示如何使用适用于以下内容的加密/解密: - Silverlight客户端 - Windows平板电脑应用 - Windows Phone 7和8应用程序

实际上,我们发现的示例既可以在其中一个平台上运行,也可以在其他平台上运行。这似乎是因为例如其中IBuffer(在Windows Phone 8示例中使用)所在的命名空间似乎在Silverlight客户端中不可用。 其他问题是,例如类Rfc2898DeriveBytes似乎在Windows Phone应用程序的命名空间中没有相同的对应物,并且对我来说,似乎很难导出适当的类,KeySizes,Salts usw。重现与使用Rfc2898DeriveBytes类生成的代码相同的加密结果。

那么,是否有人链接到一个关于在上述所有平台上工作的加密/解密的好例子?

感谢您的帮助。 阿德里安

2 个答案:

答案 0 :(得分:0)

我们的SecureBlackbox产品(包括其免费的源CryptoBlackbox加密包)将完成所有提及的平台可用的工作。

答案 1 :(得分:0)

好的,所以简单的答案是:没有一个开箱即用。如果您想要一个可以在所有这些平台上运行的库,您需要找到第三方库。微软没有提供一个。

话虽如此,仍然有一种方法可以使您的业务逻辑仍然可以无平台(例如在PCL中),同时仍然利用特定于平台的加密方法。这是使用依赖注入和控制反转(IoC)。

基本上,创建一个ICryptoController类。此类将定义您要执行的所有加密功能。如果要执行AES功能,请创建方法:

Task<byte[]> AesEncrypt(byte[] key, byte[] data, byte[] iv);

Task<byte[]> AesDecrypt(byte[] key, byte[] data, byte[] iv);

我应该注意,我建议使用字节数组(byte [])作为返回值和输入值,因为它们是跨平台的,而WP8和Win8上的IBuffers则不是。

然后,您要做的是在PCL中创建一个ServiceLocator类,其中包含static,可访问的ICryptoController属性。

在每个平台上,创建一个实现CryptoController的{​​{1}}类。然后,它会使用特定于平台的实现覆盖每个加密函数。 WPF可能使用System.Security。 Windows应用商店应用将使用SymmetricAlgorithmProvider等

(例如,如果您查一查,Rfc2898DeriveBytes实际上只是PBKDF2,基于密码的密钥派生功能2.Windows Store提供了通过ICryptoController类执行此操作的功能。有指南可以执行此操作{ {3}}。)

在每个平台上的每个应用程序的开头,将KeyDerivationAlgorithmProvider中的属性值设置为特定于平台的版本。您的PCL类现在可以免费访问加密算法的特定于平台的实现。

那里有很多服务定位器库。 Ninject是其中之一,尽管还有很多其他的。例如,一个包含在MvvmLight中。它们将使其易于实施(尽管并不是特别难)。

希望这有助于编码!

作为最后一点,我知道有些人试图将BouncyCastle移植到不同的平台上。我还没有找到ServiceLocator的实现。如果您想减少必须学习的加密系统的数量,您可能希望了解您需要的系统中有多少具有您可信赖的可行的BouncyCastle实现。我相信有两个可用于Win8,例如,虽然我不能保证他们的作者。