如您所知,akavache在iOS和Android上的安全存储存在问题。我正在试图覆盖Akavache使用的安全存储。
我一直遵循肯特给出的例子来解决这个问题:http://kent-boogaart.com/blog/password-protected-encryption-provider-for-akavache
注意:我不能在代码中使用System.Security.Cryptography,因为我们使用的是PCL的。因此,我正在使用PCLCrypto。
我使用安装类初始化DI:
IPasswordProtectedEncryptionProvider providerInstance = new PasswordProtectedEncryptionProvider();
providerInstance.SetPassword("test");
Splat.Locator.CurrentMutable.Register(() => providerInstance, typeof(Akavache.IEncryptionProvider));
Container.RegisterSingleton<ICache>(new CacheManager());我使用PasswordProtectedEncryptionProvider作为IEncryptionProvider的自定义覆盖。但是,类DecryptBlock EncryptBlock中重写的方法不被调用!
不明白为什么不叫它。
() => providerInstance没有覆盖它吗?
发布于 2017-05-22 11:40:00
取决于注册的时间和获取安全缓存的方式,它可能是由Akavache的默认注册获得的LIFO。
为了避免模棱两可(以及更干净的DI),我通常设置加密缓存如下:
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);https://stackoverflow.com/questions/44111406
复制相似问题