2013-09-27 194 views
5

Tôi đang làm việc trong phiên bản iPad của ứng dụng của tôi và tôi có một chức năng trong những gì tôi sử dụng AesCryptoServiceProvider ví dụ các dòng sauAesCryptoServiceProvider trong MonoTouch

using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider()) 
{ 
    setAesProviderSettings(aesProvider); 
    result = aesProvider.CreateEncryptor().TransformFinalBlock(plainBytes, 0, plainBytes.Length); 
} 

Nó hoạt động trong ứng dụng Android của tôi (MonDroid) và trong một ứng dụng .NET (WPF) nhưng trong iOS tôi gặp lỗi này;

Error 5  The type or namespace name 'AesCryptoServiceProvider' could not be found (are you missing a using directive or an assembly reference?)  

Chức năng là trong dự án cốt lõi của tôi và tôi sử dụng các mối liên kết dự án để tham khảo nó trong các dự án iPad và tôi cũng sử dụng mối liên kết dự án trong phiên bản Android, tất nhiên trong ba nền tảng là cùng một tập tin với tất cả các tài liệu tham khảo mà nó cần. Tôi sử dụng Xamarin với Visual Studio 12.

Trả lời

6

Sử dụng phương pháp nhà máy Aes.Create() và mã của bạn sẽ di động hơn trên các phiên bản/nền tảng .NET khác nhau. Ví dụ.

using (var aesProvider = Aes.Create()) { 
    setAesProviderSettings(aesProvider); 
    result = aesProvider.CreateEncryptor().TransformFinalBlock(plainBytes, 0, plainBytes.Length); 
} 

Trong Xamarin.iOS nó sẽ trở lại AesManaged (từ System.Core.dll) nhưng, trong thực tế, nó đang gọi của Apple CommonCrypto (nó không phải là một việc thực hiện quản lý) có thể là phần cứng tăng tốc (tùy thuộc vào thiết bị của bạn).

+0

Cảm ơn rất nhiều, nó hoạt động! :) – HJR046