ari*_*ius 2 encryption android key android-keystore
我可以生成一个密钥并存储在 Android 密钥库中,如下所示:
private static final String AndroidKeyStore = "AndroidKeyStore";
private static final String AES_MODE = "AES/GCM/NoPadding";
keyStore = KeyStore.getInstance(AndroidKeyStore);
keyStore.load(null);
if (!keyStore.containsAlias(KEY_ALIAS)) {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, AndroidKeyStore);
keyGenerator.init(
new KeyGenParameterSpec.Builder(KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM) .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setRandomizedEncryptionRequired(false)
.build());
keyGenerator.generateKey();
}
Run Code Online (Sandbox Code Playgroud)
同样,我可以像这样检索它:
keyStore.getKey(KEY_ALIAS, null);
Run Code Online (Sandbox Code Playgroud)
我知道 getKey() 函数返回一个 Key 对象,但我还没有找到一种方法来显示密钥本身。它似乎没有 toString() 或 getBytes() 或类似的东西。
如何获取密钥的字节,或者至少打印出它的字符串版本?有可能吗?
“AndroidKeyStore”是专门为使这不可能或至少非常困难而设计的。这里有更完整的讨论,但总结如下:
Android 密钥库系统可保护密钥材料免遭未经授权的使用。首先,Android 密钥库通过防止从应用程序进程和整个 Android 设备中提取密钥材料,减少了在 Android 设备外部未经授权使用密钥材料的情况。
继续沿着示例的行,添加以下附加代码行:
Key key = keyStore.getKey(KEY_ALIAS, null);
String algorithm = key.getAlgorithm();
String format = key.getFormat();
byte[] encoded = key.getEncoded();
Run Code Online (Sandbox Code Playgroud)
应该使 key 成为对 Key 对象的有效非空引用,algorithm应该返回“AES”,但format应该是nullshould encoded。
| 归档时间: |
|
| 查看次数: |
3040 次 |
| 最近记录: |