首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在AndroidKeyStore中存储文本?

如何在AndroidKeyStore中存储文本?
EN

Stack Overflow用户
提问于 2016-08-17 22:51:43
回答 3查看 1.3K关注 0票数 2

我正在尝试使用以下代码在Android的安全元素中存储一小段文本:

代码语言:javascript
复制
KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);

PasswordProtection keyStorePP = new KeyStore.PasswordProtection(null);

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEwithHmacSHA1");
SecretKey generatedSecret = factory.generateSecret(newPBEKeySpec(mySecureText.toCharArray()));

ks.setEntry("alias", new KeyStore.SecretKeyEntry(generatedSecret), keyStorePP);

上面的代码给出了以下异常:

代码语言:javascript
复制
08-17 14:39:32.832: W/System.err(11713): java.security.KeyStoreException: Unsupported protection parameter class: java.security.KeyStore$PasswordProtection. Supported: android.security.keystore.KeyProtection

是不是我做错了什么,或者只是AndroidKeyStore不支持存储字符串?

最后一件事,如果我切换到BKS,代码将会执行。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2016-08-18 16:40:07

该错误将告诉您更改此设置:

代码语言:javascript
复制
PasswordProtection keyStorePP = new KeyStore.PasswordProtection(null);

到这个

代码语言:javascript
复制
PasswordProtection keyStorePP = new KeyStore.KeyProtection();
票数 0
EN

Stack Overflow用户

发布于 2016-11-22 00:45:38

KeyProtection无法设置空密码。

代码语言:javascript
复制
char[] password = {'p','a','s','s'};
KeyStore.ProtectionParameter protParam =
                    new KeyStore.PasswordProtection(password);
ks.setEntry("alias", new KeyStore.SecretKeyEntry(generatedSecret), keyStorePP);
票数 0
EN

Stack Overflow用户

发布于 2018-08-20 05:58:50

我让它在下面工作。下面是如何指定新KeyProtection的方法:

代码语言:javascript
复制
        import android.security.keystore.KeyProtection;
        import android.security.keystore.KeyProperties;
        ...............

        KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
        keyStore.load(null, null);      

        SecureRandom secureRandom = new SecureRandom(mySecureText.getBytes());
        KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES);
        keyGenerator.init(256, secureRandom);
        SecretKeySpec keySpec = new SecretKeySpec(keyGenerator.generateKey().getEncoded(), KeyProperties.KEY_ALGORITHM_AES);


        keyStore.setEntry(alias, new SecretKeyEntry(keySpec),
                          new KeyProtection.Builder(KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                                             .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
                                             .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
                                             .setRandomizedEncryptionRequired(false)
                                             .build()
        );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38999945

复制
相关文章

相似问题

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