加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Android:Generating Elliptic Curve KeypPair

发布时间:2020-12-15 02:15:12 所属栏目:Java 来源:网络整理
导读:我正在尝试基于Eliptic Curves Diffie Hellman实现密钥生成.现在我想自己指定我的Eliptic曲线,所以我采用了参数 from here. 我写的代码是为了实现这个: public void createKey(){ // base point (generator???) BigInteger x = new BigInteger("2fe13c0537b
我正在尝试基于Eliptic Curves Diffie Hellman实现密钥生成.现在我想自己指定我的Eliptic曲线,所以我采用了参数 from here.

我写的代码是为了实现这个:

public void createKey(){

        // base point (generator???)
        BigInteger x = new BigInteger("2fe13c0537bbc11acaa07d793de4e6d5e5c94eee8",16);
        BigInteger y = new BigInteger("289070fb05d38ff58321f2e800536d538ccdaa3d9",16);

        // the order of generator
        BigInteger n = new BigInteger("5846006549323611672814741753598448348329118574063",10);

        // curves coefficients
        BigInteger ab = new BigInteger("1",2);

        // curves cofactor
        BigInteger h = new BigInteger("2",10);

        // exponents of the equotation
        int[] ks = {7,6,3};

        ECFieldF2m ecField = new ECFieldF2m(163,ks);
        // Elliptic curve
        EllipticCurve ec = new EllipticCurve(ecField,ab,ab);

        // GENERATOR POINT
        ECPoint g = new ECPoint(x,y);

        // Parameter specs?
        ECParameterSpec ecps = new ECParameterSpec(ec,g,n,h.intValue());

    try {
        // get keypair
        KeyPairGenerator kg = KeyPairGenerator.getInstance("ECDSA");
        kg.initialize(ecps,new SecureRandom());
        KeyPair kp = kg.generateKeyPair();
        Log.d("SECLIENT"+type,kp.getPublic().toString());
        Log.d("SECLIENT"+type,kp.getPrivate().toString());
    }catch (Exception e){
        e.printStackTrace();
    }
}

此时,代码编译.但是它在try_catch块中失败,它必须生成KeyPair.

错误消息是:

java.lang.RuntimeException:无法创建EC KeyFactory:未处理的字段类java.security.spec.ECFieldF2m

有人有这个问题吗?我怎么解决这个问题?

解决方法

我没有遇到你遇到的同样问题,但是因为你在Android中使用EC并且有一个奇怪的RuntimeException,我会留给你2美分.希望能帮助到你.

我有另一个奇怪的错误(OEM相关)

java.lang.RuntimeException: error:0f06707b:elliptic curve routines:EC_GROUP_new_by_curve_name:UNKNOWN_GROUP

在尝试使用时

KeyAgreement.getInstance("ECDH);

发生在我身上的是我将SpongyCastle添加为SecurityProvider,这样做:

Security.addProvider(new BouncyCastleProvider());

对于某些设备,一切都按预期工作,但在其他设备(即LGE Nexus 5),我得到了完全相同的例外.

为我修复它的方法是改变我添加SpongyCastle的方式并做:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读