2

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

实际上,我们已经找到了适用于其中一个平台但不适用于其他平台的示例。这似乎主要是因为 IBuffer(在 Windows Phone 8 示例中使用)所在的命名空间似乎在 Silverlight 客户端中不可用。其他问题是,例如 Rfc2898DeriveBytes 类似乎在 Windows Phone 应用程序的命名空间中没有同等的对应物,而且,至多对我来说,似乎很难派生适当的类、KeySizes、Salts usw。重现与使用 Rfc2898DeriveBytes 类生成的代码相同的加密结果。

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

谢谢你的帮助。阿德里安

4

2 回答 2

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 则不是。

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

在每个平台上,创建一个CryptoController实现ICryptoController. 然后,它使用特定于平台的实现覆盖每个加密函数。WPF 可以使用 System.Security。Windows 应用商店应用程序将使用 SymmetricAlgorithmProvider 等。

(例如,如果您查找它,Rfc2898DeriveBytes 实际上只是 PBKDF2,基于密码的密钥派生函数 2。Windows Store 通过KeyDerivationAlgorithmProvider该类提供了执行此操作的功能。此处有执行此操作的指南。)

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

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

希望这对编码有所帮助和快乐!

最后一点,我知道有些人试图通过 BouncyCastle 移植到不同的平台。我还没有找到一个实现Portable。如果你想减少必须学习的加密系统的数量,你可能想看看你需要多少这些系统有一个你可以信任的可行的 BouncyCastle 实现。例如,我相信有两个可用于 Win8,尽管我不能保证它们的作者。

于 2013-11-05T01:40:26.770 回答
0

我们的SecureBlackbox产品(包括它的免费源CryptoBlackbox加密包)将完成这项工作,因为它适用于所有提到的平台。

于 2013-11-04T22:11:25.760 回答