2017-05-22 12 views
1

아시다시피, akavache는 iOS 및 Android의 보안 스토리지에 문제가 있습니다. Akavache에서 사용하는 보안 저장 장치를 덮어 쓰려고합니다.Akavache 보안 오버라이드가 작동하지 않습니다.

I했습니다이 문제를 해결하기 위해 켄트에 의해 주어진 예 다음이었다 : http://kent-boogaart.com/blog/password-protected-encryption-provider-for-akavache

참고 : 우리가 PCL의을 사용하고 있기 때문에 나는 내 코드에서 System.Security.Cryptography를 사용할 수 없습니다. 따라서 PCLCrypto을 사용하고 있습니다.

나는 DI를 초기화하기 위해 설치 클래스를 사용 : 나는 IEncryptionProvider의 내 사용자 지정 재정으로 PasswordProtectedEncryptionProvider를 사용

IPasswordProtectedEncryptionProvider providerInstance = new PasswordProtectedEncryptionProvider(); 
providerInstance.SetPassword("test"); 
Splat.Locator.CurrentMutable.Register(() => providerInstance, typeof(Akavache.IEncryptionProvider)); 
Container.RegisterSingleton<ICache>(new CacheManager()); 

. 그러나 클래스에서 재정의 된 메소드 DecryptBlockEncryptBlock은 호출되지 않습니다!

왜 호출되지 않는지 이해하지 마십시오.

() => providerInstance은 무시합니까?

답변

2

등록시기 및 보안 캐시를받는 방법에 따라 LVO가 Akavache's default registrations에 의해 표시 될 수 있습니다.

은 모호성을 피하기 (그리고 청소기에 대한 DI)를, I는 일반적으로 다음과 같이 내 암호화 된 캐시를 설정하려면 :

var fsprovider = Locator.Current.GetService<IFilesystemProvider>(); 

var root = fsprovider.GetDefaultSecretCacheDirectory(); 
var dbName = "mysecrets.db";   
var path = Path.Combine(root, dbName); 

var encryptionProvider = /* create + init or resolve your enc provider here */ 

var encryptedCache = new SQLiteEncryptedBlobCache(path, encryptionProvider); 

이 특정 문제를 해결하기 위해, 앞서 DI의 캐시 관리자를 초기화 :

CacheManager _cache = new CacheManager(); 

IPasswordProtectedEncryptionProvider providerInstance = new PasswordProtectedEncryptionProvider(); 
providerInstance.SetPassword("test"); 
Splat.Locator.CurrentMutable.Register(() => providerInstance, typeof(Akavache.IEncryptionProvider)); 

Container.RegisterSingleton<ICache>(_cache); 
+0

@rdavisau 답장을 보내 주셔서 감사합니다. LIFO 문제를 언급했을 때 나를 최종 해결책으로 안내합니다. 특정 문제를 해결하는 방법에 대한 답을 예제로 변경했습니다. – cfl