Akavache 安全覆盖不起作用
Akavache security override not working
如您所知,akavache 在 iOS 和 Android 上的安全存储存在问题。
我正在尝试覆盖 Akavache 使用的安全存储。
我一直在按照肯特给出的例子来解决这个问题:
http://kent-boogaart.com/blog/password-protected-encryption-provider-for-akavache
注意:我不能在我的代码中使用 System.Security.Cryptography
,因为我们正在使用 PCL 的 。因此我使用 PCLCrypto
.
我使用设置 class 来初始化 DI:
IPasswordProtectedEncryptionProvider providerInstance = new PasswordProtectedEncryptionProvider();
providerInstance.SetPassword("test");
Splat.Locator.CurrentMutable.Register(() => providerInstance, typeof(Akavache.IEncryptionProvider));
Container.RegisterSingleton<ICache>(new CacheManager());
我使用 PasswordProtectedEncryptionProvider
作为我对 IEncryptionProvider
的自定义覆盖。然而,在 class、DecryptBlock
EncryptBlock
中覆盖的方法不会被调用!
不明白为什么没有被调用。
不() => providerInstance
覆盖它吗?
根据您注册的时间以及您获取安全缓存的方式,它可能会在 Akavache's default registrations 前采用后进先出法。
为了避免歧义(为了更清晰的 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);
如您所知,akavache 在 iOS 和 Android 上的安全存储存在问题。 我正在尝试覆盖 Akavache 使用的安全存储。
我一直在按照肯特给出的例子来解决这个问题: http://kent-boogaart.com/blog/password-protected-encryption-provider-for-akavache
注意:我不能在我的代码中使用 System.Security.Cryptography
,因为我们正在使用 PCL 的 。因此我使用 PCLCrypto
.
我使用设置 class 来初始化 DI:
IPasswordProtectedEncryptionProvider providerInstance = new PasswordProtectedEncryptionProvider();
providerInstance.SetPassword("test");
Splat.Locator.CurrentMutable.Register(() => providerInstance, typeof(Akavache.IEncryptionProvider));
Container.RegisterSingleton<ICache>(new CacheManager());
我使用 PasswordProtectedEncryptionProvider
作为我对 IEncryptionProvider
的自定义覆盖。然而,在 class、DecryptBlock
EncryptBlock
中覆盖的方法不会被调用!
不明白为什么没有被调用。
不() => providerInstance
覆盖它吗?
根据您注册的时间以及您获取安全缓存的方式,它可能会在 Akavache's default registrations 前采用后进先出法。
为了避免歧义(为了更清晰的 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);