2013-09-27 19 views
5

sto lavorando nella versione iPad di mia app e ho una funzione in quello che io uso AesCryptoServiceProvider ad esempio le seguenti righeAesCryptoServiceProvider in MonoTouch

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

Funziona nella mia app Android (MonDroid) e in un'applicazione .NET (WPF) ma in iOS ho ricevuto questo errore;

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

La funzione è nel mio progetto di base e uso il linker progetto per fare riferimento a esso nel progetto iPad e anche io uso progetto linker nella versione di Android, ovviamente nei tre piattaforme è lo stesso file con tutti i riferimenti di cui ha bisogno. Uso Xamarin con Visual Studio 12.

risposta

6

Utilizzare il metodo di fabbrica Aes.Create() e il codice sarà più portabile su diverse versioni/piattaforme .NET. Per esempio.

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

In Xamarin.iOS tornerà AesManaged (da System.Core.dll), ma, in realtà, sta chiamando di Apple CommonCrypto (non è un'implementazione gestito) che può essere con accelerazione hardware (a seconda dei dispositivi).

+0

Grazie mille, funziona! :) – HJR046