首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Akavache安全覆盖无效

Akavache安全覆盖无效
EN

Stack Overflow用户
提问于 2017-05-22 11:12:18
回答 1查看 135关注 0票数 1

如您所知,akavache在iOS和Android上的安全存储存在问题。我正在试图覆盖Akavache使用的安全存储。

我一直遵循肯特给出的例子来解决这个问题:http://kent-boogaart.com/blog/password-protected-encryption-provider-for-akavache

注意:我不能在代码中使用System.Security.Cryptography,因为我们使用的是PCL的。因此,我正在使用PCLCrypto

我使用安装类初始化DI:

代码语言:javascript
复制
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没有覆盖它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-22 11:40:00

取决于注册的时间和获取安全缓存的方式,它可能是由Akavache的默认注册获得的LIFO。

为了避免模棱两可(以及更干净的DI),我通常设置加密缓存如下:

代码语言:javascript
复制
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之前初始化缓存管理器:

代码语言:javascript
复制
CacheManager _cache = new CacheManager();

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

Container.RegisterSingleton<ICache>(_cache);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44111406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档