- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想将 key 导入到 AndroidKeyStore 中。所以,我可以通过以下方式通过 openssl 生成它
openssl rsa -text -in privateKey2048.pem
openssl pkcs8 -topk8 -inform PEM -in ./privateKey2048.pem -outform DER -out private2048.der -nocrypt
然后我可以将它从 private2048.der 转换成十六进制格式,这可以在 android 应用程序的 byteArray 中转换。但是我不清楚,如何将这个 byteArray 导入到 AndroidKeyStore 中?
所以一般来说,我的问题是如何导入以字符串或字节数组形式存在的 KeyStore key ?
ps:我知道可以通过 keyPairGenerator.generateKeyPair() 生成 key 对,但我想导入我的 key ,例如由 openssl 生成,然后在应用程序中硬编码。
最佳答案
将私钥硬编码到您的应用程序中并不是一个好主意。 此 key 已泄露,因为您的 APK 内容不是 secret 的,因此可以从 APK 中提取 key 。尽管有此警告,如果您仍然认为需要这样做,请继续阅读。
要将私钥导入到 Android Keystore 中,您需要将其表示为一个 PrivateKey 实例,然后您还需要一个 X.509 证书(对于与私钥对应的公钥)表示为一个 X509Certificate 实例。这是因为 JCA KeyStore 抽象不支持在没有证书的情况下存储私钥。
将 PKCS#8 DER 编码的私钥转换为私钥:
PrivateKey privateKey =
KeyFactory.getInstance("RSA").generatePrivate(
new PKCS8EncodedKeySpec(privateKeyPkcs8));
将 PEM 或 DER 编码证书转换为证书:
Certificate cert =
CertificateFactory.getInstance("X.509").generateCertificate(
new ByteArrayInputStream(pemOrDerEncodedCert));
最后,将私钥和证书导入到 Android Keystore 的“myKeyAlias”条目中:
KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
ks.setKeyEntry("myKeyAlias", privateKey, null, new Certificate[] {cert});
在 https://developer.android.com/reference/android/security/keystore/KeyProtection.html 查看更多高级示例.
关于android - 如何将openssl生成的RSA私钥导入AndroidKeyStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36794576/
我目前正在开发基于客户端-服务器架构的 android 应用程序。为了数据安全,我使用公私 key 对进行数据加密和签名。我正在使用 AndroidKeyStore 来存储 key 对。下面是生成 k
我希望能够检索和检查一般的 Android 设备证明数据(attestationIdSerial、attestationIdImei 等...)。 Google 表示您可以在证书扩展(ASN.1 格式
我只是想问一下,用于存储 key 对的 AndroidKeystore API 是特定于设备或特定于应用程序的。我想问如果两个应用程序使用 AndroidKeyStore 来存储其 key 对,那么这
我正在尝试初始化一个用于加密和解密的 Cipher 对象。 String cipher = privateKey.getAlgorithm() + "/ECB/PKCS1Padding";
我在我的应用程序中使用 AndroidKeyStore 来存储 key ,我正在使用 KeyGenParameterSpec 生成该 key 类(class)。这是代码: final SecretKe
Android 提供了一个 API 来为加密操作生成 key ,并在 Android 系统 keystore 中存储/加载它们。 我遵循了 KeyGenParameterSpec 的 JavaDocs
我正在尝试将 android Fingerprint 实现到示例应用程序中。使用的密码未被识别为有效 - 但我不知道为什么,因为基于 android 文档,它应该受到支持。 密码建立在: return
我正在尝试使用导入的 keystore key 对一段数据进行签名: 我的 key 首先在 AndroidKeyStore 之外生成(这是故意的) 然后导入到AndroidKeyStore 使用以下方
用户在 SD 卡上保存了一个 .p12 文件(例如他的 S/MIME 证书)。我想将此证书(或提取的私钥和公钥)加载到 AndroidKeyStore 中。 File file = new File(
我在当前项目中使用 AndroidKeystore 作为提供程序来安全地存储私钥。现在我想让我的应用程序适用于低至 4.1(API 版本 16)的旧版 Android。因此,我需要为 AndroidK
在使用 AndroidKeyStore 生成 RSA key 期间,我在我的应用程序中遇到了以下问题,而不是理解它可以很容易地从 Android SDK 在 BasicAndroidKeyStore
对于 Android 4.3,此代码返回 null。 KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); keyStore.loa
我需要生成一个 RSA 2048 key 对,然后保存它,如果存在则恢复它。 此刻,我有这个: SecureRandom random = new SecureRandom(); RSAKeyGenP
Android M 通过 AndroidKeyStore 提供 AES 支持,但是我找不到生成 key 的任何组合,该 key 提供了一种无需用户密码/设备锁定的完全加密和解密方法。看来我目前的方法适
我正在创建一个小型 Android 应用程序(API > 23)并且必须在没有登录屏幕的情况下进行。尽管如此,用户的数据应该被加密,为此我从 AndroidKeyStore 生成或加载一个 AES k
所以我编写了我的应用程序,其中我使用 KeyStore 来加密/解密数据。我还为它编写了一个很好的 Robolectric 测试,但是当我尝试运行测试时,出现以下异常: java.security.K
我正在使用 Android FingerPrintManager API 并使用 KeyPairGenerator 创建 key 对,我想使用公钥加密密码,然后在用户通过输入 fingerPrint
在我的 Android 应用程序中,我需要一种方法来加密存储在本地数据库中的数据。我选择 Realm DB 是因为它提供了与加密的无缝集成。我只需要在初始化 Realm 实例时传递一个 key 。该
我是一名优秀的程序员,十分优秀!