首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ECGenParameterSpec未知曲线名“secp256k1”

ECGenParameterSpec未知曲线名“secp256k1”
EN

Stack Overflow用户
提问于 2018-05-01 09:28:18
回答 1查看 2.6K关注 0票数 2

我有一个创建私钥和公钥的项目。我想用ecdsa加密它们,因此我使用ECGenParameterSpec和'secp256k1‘参数,但这会产生错误。如果我用'secp256r1‘来修改它,就没有问题了。下面是生成密钥的代码:

代码语言:javascript
复制
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");

        ECGenParameterSpec ecSpec = newECGenParameterSpec("secp256k1");
        keyGen.initialize(ecSpec);

        KeyPair kp = keyGen.generateKeyPair();
        PublicKey pub = kp.getPublic();
        PrivateKey pvt = kp.getPrivate();

        ECPrivateKey epvt = (ECPrivateKey)pvt;
        String sepvt = adjustTo64(epvt.getS().toString(16));
        System.out.println("s[" + sepvt.length() + "]: " + sepvt);

        ECPublicKey epub = (ECPublicKey)pub;
        ECPoint pt = epub.getW();
        String sx = adjustTo64(pt.getAffineX().toString(16));
        String sy = adjustTo64(pt.getAffineY().toString(16));
        String bcPub = sx + sy;
        System.out.println("bcPub: " + bcPub);

        return bcPub;

调整64位

代码语言:javascript
复制
        static private String adjustTo64(String s) {
          switch(s.length()) {
          case 62: return "00" + s;
          case 63: return "0" + s;
          case 64: return s;
          default:
            throw new IllegalArgumentException("not a valid key: " +s);
          }
        }

当我使用secp256k1时,它会出现以下错误:

代码语言:javascript
复制
05-01 12:20:46.066 17297-17297/com.sikke.app W/System.err: java.security.InvalidAlgorithmParameterException: unknown curve name: secp256k1
    at com.android.org.conscrypt.OpenSSLECKeyPairGenerator.initialize(OpenSSLECKeyPairGenerator.java:113)
    at java.security.KeyPairGenerator.initialize(KeyPairGenerator.java:439)
    at com.sikke.app.AppHelper.getEcdsa(AppHelper.java:125)
    at com.sikke.app.activities.AccountActivity.onCreate(AccountActivity.java:59)
    at android.app.Activity.performCreate(Activity.java:6975)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)05-01 12:20:46.067 17297-17297/com.sikke.app W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-10 13:59:46

经过长时间的搜索,我为我的项目找到了一个解决方案。应在项目中添加此代码以更改安全提供程序。

代码语言:javascript
复制
 Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);

要添加这段代码,您应该使用以下库:prov-1.58.0.0

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50114155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档