我正在尝试为我的Android应用编写ECDH代码。 作为起点,我设法在AndroidStudion上安装了lSpongyCastle Jar,但是现在我在运行时遇到问题:
KeyPairGenerator aliceKeyGen = KeyPairGenerator.getInstance("ECDH", "SC");
它一直在说没有这样的提供者,但是我添加了
Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
在我的代码中,并且我已经添加了
implementation 'com.madgag.spongycastle:prov:1.58.0.0'
我的礼物。
我尝试使用不同的提供程序名称(例如“ BC”),但都给了我相同的错误“ NoSuchProviderException”
我尝试到处阅读都没有成功,请让我知道我做错了什么以及应该做些什么。
谢谢!
PS 不用说,SpongyCastle的其他功能都可以正常工作,因此我相信我已经成功安装了该库。
答案 0 :(得分:-1)
您使用的是哪个API版本? Google更改了插入和使用安全提供程序的行为。对于您的问题,我没有实际答案,但是看起来像这样。
Google声明,由于Android P在内部倾向于使用AndroidOpenSSL作为安全提供程序,因此它们不赞成使用某些BC提供程序功能。将getInstance()与给定的提供程序(例如“ BC”或“ SC”)一起使用将对面向Android P或更高版本的应用抛出NoSuchAlgorithmException。
他们建议不要在getInstance()中使用显式提供程序。
请参见https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html和https://developer.android.com/guide/topics/security/cryptography#deprecated-functionality
我还在Android上的实验中确实看到,由于AndroidOpenSSL现在提供了许多安全算法(如果您确实需要其中的一些东西,只需Security.addProvider(new BouncyCastleProvider());
),可能不需要在位置1处添加海绵城堡。