我正在尝试生成一个椭圆曲线私钥,但我在安卓操作系统版本5和6上不断收到这个错误。以下是使用EC加密生成PrivateKey的代码。
private static java.security.PrivateKey createPrivateKey(List<PrivateKey> privateKeys, String appInstallationIdentifier) throws Exception {
PrivateKey privateKey = getPrivateKeyForActivation(privateKeys);
String key = decryptMessage(privateKey.getEncryptedPrivateKey(), appInstallationIdentifier, privateKey.getIv());
key = key.replace("-----BEGIN PRIVATE KEY-----", "")
.replace("-----END PRIVATE KEY-----", "")
.replaceAll("\\s", "");
byte[] privateKeyFileContent = decode(key);
KeyFactory keyFactory = KeyFactory.getInstance("EC");
PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(privateKeyFileContent);
return keyFactory.generatePrivate(ks);
}
下面是我在OS版本5和6上收到的错误
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0f06707b:elliptic curve routines:EC_GROUP_new_by_curve_name:UNKNOWN_GROUP
你知道为什么我会收到这个错误吗?此外,应该从API级别11和更高级别支持EC,所以使用EC应该不是问题。
发布于 2017-10-04 22:48:43
在假设设备上支持哪些加密算法以及来自哪个版本时,您必须小心。
一些供应商甚至放置了自己版本的安全提供商,制造了更多的麻烦。我建议尝试安装您自己的名为SpongyCastle的安全提供商,如果您认为这些手机应该支持EC,您可以检查可用的算法,如下所示:
http://mobile.developer.com/ws/android/encrypting-with-android-cryptography-api.html
发布于 2018-07-05 04:07:44
我想对originx的回答补充一些东西。
我在尝试使用时遇到了完全相同的错误
KeyAgreement.getInstance("ECDH);
发生在我身上的事情是,我将SpongyCastle
添加为SecurityProvider
,执行以下操作:
Security.addProvider(new BouncyCastleProvider());
对于一些设备,一切工作正常,但在另一些设备(即LGE Nexus 5)中,我得到了完全相同的异常。
对我来说,修复它的方法是改变我添加SpongyCastle的方式并执行以下操作:
Security.insertProviderAt(new BouncyCastleProvider(), 1);
希望这能有所帮助!
https://stackoverflow.com/questions/46566471
复制相似问题