在AndroidKeystore中保存和检索KeyPair

在AndroidKeystore中保存和检索KeyPair,第1张

概述我需要生成一个RSA2018密钥对,然后将其保存并恢复(如果存在).此刻,我有:SecureRandomrandom=newSecureRandom();RSAKeyGenParameterSpecspec=newRSAKeyGenParameterSpec(keySize,RSAKeyGenParameterSpec.F4);KeyPairGeneratorgenerator=KeyPairGenerator.getInsta

我需要生成一个RSA 2018密钥对,然后将其保存并恢复(如果存在).

此刻,我有:

SecureRandom random = new SecureRandom();RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(keySize, RSAKeyGenParameterSpec.F4);KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "SC");generator.initialize(spec, random);return generator.generateKeyPair();

效果很好,但是现在我尝试保存并从AndroID Keystore中获取它,但是我没有实现.我尝试过:

String alias = "TESTINGKEY";        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());        keyStore.load(null);        if (!keyStore.containsAlias(alias)) {            SecureRandom random = new SecureRandom();            RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(keySize, RSAKeyGenParameterSpec.F4);            KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "SC");            generator.initialize(spec, random);            return generator.generateKeyPair();        } else {            Key key = keyStore.getKey(alias, null);            if (key instanceof PrivateKey) {                Certificate cert = keyStore.getCertificate(alias);                return new KeyPair(cert.getPublicKey(), (PrivateKey) key);            } else {                return null;            }        }

但是工作不正常,因为在应用程序的第二次运行中,密钥库不包含密钥对.

在https://developer.android.com/training/articles/keystore.html?hl=es中,我看到了KeyGenParameterSpec,该构建器具有“别名”值,但int RSAKeyGenParameterSpec没有.

我该如何保存?

解决方法:

使用AndroIDKeyStore需要使用KeyGenParameterSpec.Builder生成密钥.还要使用AndroIDKeyStore而不是SC.您可以使用以下代码

生成密钥(AndroID> = 23)

KeyPairGenerator kpg = KeyPairGenerator.getInstance(                KeyPropertIEs.KEY_ALGORITHM_RSA, "AndroIDKeyStore");kpg.initialize(new KeyGenParameterSpec.Builder(                alias,                KeyPropertIEs.PURPOSE_SIGN | KeyPropertIEs.PURPOSE_VERIFY)                .setDigests(KeyPropertIEs.DIGEST_SHA256, KeyPropertIEs.DIGEST_SHA512)                .setKeySize(keySize)                .build());KeyPair keyPair = kpg.generateKeyPair();

加载按键

KeyStore keyStore = KeyStore.getInstance("AndroIDKeyStore");keyStore.load(null);KeyStore.Entry entry = keyStore.getEntry(alias, null);PrivateKey privateKey = ((KeyStore.PrivateKeyEntry) entry).getPrivateKey();PublicKey publicKey = keyStore.getCertificate(alias).getPublicKey();
总结

以上是内存溢出为你收集整理的在AndroidKeystore中保存和检索KeyPair全部内容,希望文章能够帮你解决在AndroidKeystore中保存和检索KeyPair所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1120957.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存