【问题标题】:java.security.NoSuchAlgorithmException: no such algorithm: ECDH for provider BCjava.security.NoSuchAlgorithmException:没有这样的算法:提供者 BC 的 ECDH
【发布时间】:2017-06-03 04:49:52
【问题描述】:

尽管我下载了无限制的 JCE 策略并添加了 lib bcprov,但我在 Android 中遇到了这个异常。我还添加了以下行:

Security.addProvider(new BouncyCastleProvider());

请帮助我了解缺少的内容。我阅读了其他帖子,发现他们已经完成了上述操作。该应用程序在 loadprivatekey 处崩溃,在以下行中:

ECParameterSpec params = ECNamedCurveTable.getParameterSpec(CurveName);)

doECDH函数调用

   public static PrivateKey loadPrivateKey (byte [] data) throws Exception
  {
    Security.addProvider(new BouncyCastleProvider());
     ECParameterSpec params = ECNamedCurveTable.getParameterSpec(CurveName);
    ECPrivateKeySpec prvkey = new ECPrivateKeySpec(new BigInteger(data), 
     params);
    KeyFactory kf = KeyFactory.getInstance("ECDH", "BC");
    return kf.generatePrivate(prvkey);
}

public static String doECDH ( String data_Prv, String data_Pub) throws Exception
{
    byte[] dataPrv = hexToBytes(data_Prv);
    byte[] dataPub = hexToBytes(data_Pub);
    KeyAgreement ka = KeyAgreement.getInstance("ECDH", "BC");
    ka.init(loadPrivateKey(dataPrv));
    ka.doPhase(loadPublicKey(dataPub), true);
    byte [] secret = ka.generateSecret();
    Shared_Key = bytesToHex(secret);
    //SecretKey originalKey = new SecretKeySpec(secret, 0, secret.length, "ECDH");
    return Shared_Key;
}

【问题讨论】:

  • 显示初始化 ECDH 的代码
  • 您的 BouncyCastle 版本是什么?您正在使用哪些库(bcprov、bcmail 等)?
  • bcprov-jdk15on-157
  • 相同的代码在 Eclipse 中完美运行!
  • 如果在eclipse中能用,哪里不能用?可能正在使用不同的 jre(意味着不同的安全策略文件)

标签: java android bouncycastle


【解决方案1】:

尝试使用 spongycastle,将其添加到您的 build.gradle:

compile 'com.madgag.spongycastle:core:1.54.0.0'
compile 'com.madgag.spongycastle:prov:1.54.0.0'
compile 'com.madgag.spongycastle:pkix:1.54.0.0'
compile 'com.madgag.spongycastle:pg:1.54.0.0'

添加此代码:

static {
    Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
}

然后使用这个:

KeyFactory kf = KeyFactory.getInstance("ECDH", "SC");

还有这个:

KeyAgreement ka = KeyAgreement.getInstance("ECDH", "SC");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多