我正在寻找c#中的加密示例,演示如何使用适用于以下内容的加密/解密: - Silverlight客户端 - Windows平板电脑应用 - Windows Phone 7和8应用程序
实际上,我们发现的示例既可以在其中一个平台上运行,也可以在其他平台上运行。这似乎是因为例如其中IBuffer(在Windows Phone 8示例中使用)所在的命名空间似乎在Silverlight客户端中不可用。 其他问题是,例如类Rfc2898DeriveBytes似乎在Windows Phone应用程序的命名空间中没有相同的对应物,并且对我来说,似乎很难导出适当的类,KeySizes,Salts usw。重现与使用Rfc2898DeriveBytes类生成的代码相同的加密结果。
那么,是否有人链接到一个关于在上述所有平台上工作的加密/解密的好例子?
感谢您的帮助。 阿德里安
答案 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,例如,虽然我不能保证他们的作者。