JPBC库是一个功能很强大的数学库,用于生成椭圆曲线,双线性等,但网上参考资料很少,重复度极高,该分栏用于安装,JPBC参数解释,生成椭圆曲线群,整数群(不用双线性性质),双线性映射教学。内容原创,禁止任何形式转载!
下面代码给出了椭圆曲线上找生成元,单位元,逆元,加法,乘法方法:
public class csdn {
//coder:CSDN USER ID:qq_41359358 最帅小朋友
public static void main(String[] args) {
// TODO Auto-generated method stub
Pairing bp=PairingFactory.getPairing("a.properties");
Field G1=bp.getG1();//生成椭圆曲线群
BigInteger r=G1.getOrder();//群的阶
System.out.println("order:"+r);
Element z=G1.newRandomElement();//取群中随机元素
Element fivez=z.duplicate().pow(new BigInteger("5"));//5z
System.out.println("5z:"+fivez);
Element fourz=z.duplicate().pow(new BigInteger("4"));
System.out.println("4z:"+fourz);
Element addz=fourz.duplicate().mul(z);//4z+z
System.out.println("addz:"+addz);
Element s=G1.newRandomElement();//取群中生成元
System.out.println("s:"+s);
Element one2=s.duplicate().pow(r);
System.out.println("one2:"+one2);
Element rev=s.duplicate().invert();//求逆元
System.out.println("rev:"+rev);
Element one3=rev.duplicate().mul(s.duplicate());//p+p逆=单位元
System.out.println("one3:"+one3);
}
}
往右滑动看点的0,1.上一篇讲了0是生成元,1是单位元。加法群乘法和加法的定义,忘了就去看上一篇。
order:730750818665451621361119245571504901405976559617
5z:524949462554941259231534068226031713403901496733675164019401169035506568365099187744726318910057654353122289567046127213239382489373481396320444664670316,1490253877881770551962175144436454541398836786587327513923615258957833947605073002530916701058674982118935449527118731127737204672226099340981814061707571,0
4z:2718626087880419888588947667143999388139144403835371143727498365387300767538945366428285209531922882739376779808641616988507262626834318464693990064826721,5288327707695475860408195605657788250153644235739573404233515998054515237941670684998710354866556006166109687267747033311119523095551580663471333959703237,0
addz:524949462554941259231534068226031713403901496733675164019401169035506568365099187744726318910057654353122289567046127213239382489373481396320444664670316,1490253877881770551962175144436454541398836786587327513923615258957833947605073002530916701058674982118935449527118731127737204672226099340981814061707571,0
s:5686173978658354243804370389342133110701979569743627635980920906906515746995033606376762816250739388056348718219469885755387539826899554650038581969051091,8549889890868425655879055722947058978145203764406127150507098173884780109053744542189251214565820786558425261690598929452738973212231200784461934734568630,0
one2:5686173978658354243804370389342133110701979569743627635980920906906515746995033606376762816250739388056348718219469885755387539826899554650038581969051091,8549889890868425655879055722947058978145203764406127150507098173884780109053744542189251214565820786558425261690598929452738973212231200784461934734568630,1
rev:5686173978658354243804370389342133110701979569743627635980920906906515746995033606376762816250739388056348718219469885755387539826899554650038581969051091,230820908794886866558726261806990837661679435008081060521555225381695521826478414889373964856841434864730597078983388006538740155086280540463195263656161,0
one3:5686173978658354243804370389342133110701979569743627635980920906906515746995033606376762816250739388056348718219469885755387539826899554650038581969051091,230820908794886866558726261806990837661679435008081060521555225381695521826478414889373964856841434864730597078983388006538740155086280540463195263656161,1
注意为什么任意元素都是生成元呢,官网文档已经写了,G1,G2,GT都是素数阶群,素数阶群任意元素除了单位元均为生成元。