【发布时间】:2016-06-14 16:12:23
【问题描述】:
我正在尝试基于椭圆曲线 Diffie Hellman 实现密钥生成。现在我想自己指定我的椭圆曲线,所以我把参数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 块中失败。
错误信息是:
java.lang.RuntimeException: Unable to create EC KeyFactory: unhandled field class java.security.spec.ECFieldF2m
有人有这个问题吗?我该如何解决这个问题?
【问题讨论】:
-
你试过Fp曲线吗?或者这是外部要求?哦,欢迎来到 SO,这是一个开始的问题。
标签: java android cryptography bouncycastle