我使用下面的代码来存储我的应用程序中加密的一些信息。
val masterKey = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
val sharedPreferences = EncryptedSharedPreferences.create(
"secret_shared_prefs",
masterKey,
this,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
由于Android中不推荐使用MasterKey类,所以我应该使用MasterKey类,但我无法找到正确的方法来定义相同的MasterKey。
有人能显示与可用的MasterKey和MasterKey. Builder类的精确匹配吗?
下面的解决方案是这样工作的:
val spec = KeyGenParameterSpec.Builder(
"_androidx_security_master_key_",
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setKeySize(256)
.build()
val masterKey: MasterKey = MasterKey.Builder(this)
.setKeyGenParameterSpec(spec)
.build()
val sharedPreferences = EncryptedSharedPreferences.create(
this,
"secret_shared_prefs",
masterKey, // masterKey created above
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM);
你可以用这两种方法中的任何一种
KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(
MASTER_KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setKeySize(KEY_SIZE)
.build();
MasterKey masterKey = new MasterKey.Builder(MainActivity.this)
.setKeyGenParameterSpec(spec)
.build();
或
MasterKey masterKey = new
MasterKey.Builder(context,MasterKey.DEFAULT_MASTER_KEY_ALIAS).
setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build();
万能钥匙。KeyScheme。AES256_GCM内部使用与上述相同的密钥生成器。
我今天也有同样的问题。有关修复/解决方法,请参见下文(示例在Java代码中,但在Kotlin中也可以轻松实现)
>
// this is equivalent to using deprecated MasterKeys.AES256_GCM_SPEC
KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(
MASTER_KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setKeySize(KEY_SIZE)
.build();
MasterKey masterKey = new MasterKey.Builder(MainActivity.this)
.setKeyGenParameterSpec(spec)
.build();
创建加密共享首选项使用稍微不同版本的"创建"方法:
EncryptedSharedPreferences.create(
MainActivity.this,
"your-app-preferences-name",
masterKey, // masterKey created above
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM);
这应该做的技巧:)
参考和更多详细信息:https://devmainapps.blogspot.com/2020/06/android-masterkeys-deprecated-how-to.html
试试这个吧
MasterKey masterKey = new MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build();
SharedPreferences sharedPreferences = EncryptedSharedPreferences.create(
context,
SHARED_PREF_NAME,
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM);
我试图创建一个加密的实现,但Android网站中给出的示例适用于API 23及以上版本。具体来说,问题是使用以下代码创建主密钥:。 在当前版本的androidx Security('androidx.security: security-crypto: 1.1.0-alpha01')上,您可以从技术上为创建实现,除了上面的函数状态仅适用于API 23及以上版本。因此,如果我理解正确,我唯一缺少的就
我需要为不同的用户旋转一堆EC2框。每个用户都应该从所有其他用户中沙盒化,所以每个EC2框都需要自己的SSH键。 在Terraform中实现这一点的最佳方法是什么? 我找到的几乎所有指令都希望我手动创建SSH密钥并将其粘贴到terraform脚本中。 (错误)示例: https://github.com/hashicorp/terraform/issues/1243, http://2ninjas
问题内容: 我完全不了解这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。尽管我不断收到错误,但openssl无法识别为内部或外部命令。问题是,即使我可以解决这个问题,我该怎么办?之后怎么办? 问题答案: 这是你需要做的 从代码 提取中下载openSSl 。在C:/中创建一个文件夹-OpenSSL,然后在此处复制提取的代码。 检测debug.keystore文件路径。如果找不
此代码引发异常。如何验证SSH指纹而不将其存储在文件中?我相信下面的代码是为公钥设计的。但带有SFTP服务器的客户端验证了指纹,但没有为我获取公钥。 代码基于使用PysFTP验证主机密钥。
如何为密钥对创建X509证书?(我的类已经有了密钥对,我需要创建一个证书来保存我的公钥,然后将其存储在密钥库中)。 我期望有一个X509证书构造函数能够接收我的公钥,然后通过keystore.set条目(pvtkey,cert)存储它,但我没有发现任何有用的关联新证书和我的密钥对... 任何想法? 编辑:我也试图通过证书链为空,但它不起作用,它看起来像一个错误报告http://bugs.sun.c