Android:InvalidKeySpecException:椭圆曲线例程:EC_GROUP_new_by_curve_name:UNKNOWN_GROUP

时间:2017-10-04 13:42:21

标签: android security cryptography private-key elliptic-curve

我正在尝试生成Elliptic Curve私钥,但我继续在Android OS版本5和6上出现此错误。以下是使用EC加密生成PrivateKey的代码。

var fontFit = document.querySelector('.image_large .fontFit');
fontFit.forEach(element=>element.classList.add('addClass'));
//Or in jQuery since you seem to have it
$('.image_large .fontFit').addClass('addClass');

这是我在OS版本5和6上收到的错误

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);
}

我收到此错误的任何想法?也应该从API级别11及更高级别支持EC,因此使用EC不应该是一个问题。

2 个答案:

答案 0 :(得分:0)

在假设设备支持哪种加密算法以及从哪个版本支持时,您必须小心。

有些供应商甚至将他们自己的安全提供商版本制造得更加麻烦。 我建议您尝试安装自己的名为SpongyCastle的安全提供程序,如果您认为这些手机上应该支持EC,您可以查看此处建议的可用算法:

http://mobile.developer.com/ws/android/encrypting-with-android-cryptography-api.html

答案 1 :(得分:0)

我想在originx的答案中添加一些内容。

我在尝试使用时遇到了完全相同的错误

KeyAgreement.getInstance("ECDH);

发生了什么事,我是在将SpongyCastle添加为SecurityProvider,这样做:

Security.addProvider(new BouncyCastleProvider());

对于某些设备,一切正常,但是在其他设备(即LGE Nexus 5)中,我得到的异常完全相同。

对我来说,解决此问题的方法是更改​​添加SpongyCastle的方式并执行以下操作:

Security.insertProviderAt(new BouncyCastleProvider(), 1);

希望这会有所帮助!