我们使用Anroid Keystore存储一些机密数据并为Keystore设置密码。此密码与load,getKey和setKeyEntry方法中的KeyStore类一起使用。
密钥库本身是加密的,应用程序只能查看和查询自己的数据,所以我们可以说数据在密钥库中有些安全,但我们如何保护与密钥库帐户关联的密码?我在网上找到了很多例子,其中大多数都在代码中使用了硬编码密码或者使用了null参数。
请参阅以下示例。我想知道什么是保护硬编码密码的最佳方法? 想在Android设备中找到一种安全的方式来存储这个硬编码的密码。假设将它移动到外部位置,如数据库,服务调用等选项不可用。
Context context;
KeyStore ks;
KeyStore.PasswordProtection prot;
static readonly object fileLock = new object ();
const string FileName = "Xamarin.Social.Accounts";
static readonly char[] Password = "3295043EA18CA264B2C40E0B72051DEF2D07AD2B4593F43DDDE1515A7EC32617".ToCharArray ();
public AndroidAccountStore (Context context)
{
this.context = context;
ks = KeyStore.GetInstance (KeyStore.DefaultType);
**prot = new KeyStore.PasswordProtection (Password);**
try {
lock (fileLock) {
using (var s = context.OpenFileInput (FileName)) {
ks.Load (s, Password);
}
}
}
catch (FileNotFoundException) {
//ks.Load (null, Password);
LoadEmptyKeyStore (Password);
}
}