Jecc(java椭圆曲线加密库)学习笔记及ECDH实现
2015-11-09 14:24
986 查看
C++椭圆曲线库下载网址http://sourceforge.net/projects/libecc/files/,打开之后右边显示:
点击红框里面链接:http://sourceforge.net/projects/jecc/?source=recommended,跳转到jecc下载页
点击下载即可。下载之后文件名是jecc-alpha1.1.tar.gz,直接用winrar解压即可,文件已存至网盘,链接: http://pan.baidu.com/s/1sjpEcqT 密码: e3yd。
接下来可以在myeclipse里面跑ecc程序了,首先新建程序:
注意红框里面选择:Use project folder as root for sources and class files,不然运行时报错,接下来在project里面建立一个名为ecc的package,
用import将解压后的ecc目录下面的文件全部导入进来:
最后我选择了运行elliptic下面的run.java
运行结果
下面是一段我利用JECC写的用来实习ECDH代码,ECDH是基于ECC(Elliptic Curve Cryptosystems,椭圆曲线密码体制,参看ECC)的DH(
Diffie-Hellman)密钥交换算法。ECDH的参考网址:http://www.tuicool.com/articles/em6zEb。此代码没有随机生成一条椭圆曲线,而是自己规定了一条,这点有待改进。
点击红框里面链接:http://sourceforge.net/projects/jecc/?source=recommended,跳转到jecc下载页
点击下载即可。下载之后文件名是jecc-alpha1.1.tar.gz,直接用winrar解压即可,文件已存至网盘,链接: http://pan.baidu.com/s/1sjpEcqT 密码: e3yd。
接下来可以在myeclipse里面跑ecc程序了,首先新建程序:
注意红框里面选择:Use project folder as root for sources and class files,不然运行时报错,接下来在project里面建立一个名为ecc的package,
用import将解压后的ecc目录下面的文件全部导入进来:
最后我选择了运行elliptic下面的run.java
运行结果
下面是一段我利用JECC写的用来实习ECDH代码,ECDH是基于ECC(Elliptic Curve Cryptosystems,椭圆曲线密码体制,参看ECC)的DH(
Diffie-Hellman)密钥交换算法。ECDH的参考网址:http://www.tuicool.com/articles/em6zEb。此代码没有随机生成一条椭圆曲线,而是自己规定了一条,这点有待改进。
package ecc.elliptic; import java.math.BigInteger; import java.io.*; import java.util.*; import java.util.zip.*; public class Ecdh { public static void main(String[] args) throws InsecureCurveException, NotOnMotherException { Random r1 = new Random(100); BigInteger a = new BigInteger(60, r1);// Alice生成随机整数a System.out.println("Alice:" + a); Random r2 = new Random(20); BigInteger b = new BigInteger(50, r2);// Bob生成随机整数b System.out.println("Bob:" + b); EllipticCurve e = new EllipticCurve(new BigInteger("1"), new BigInteger("6"), new BigInteger("11")); System.out.println("EllipticCurve: " + e + " created succesfully!"); // 生成基点G ECPoint G = new ECPoint(e, new BigInteger("2"), new BigInteger("7")); ECPoint A, B; A = G.multiply(a);// 计算A=a*G System.out.println("A=a*G: "+a + " * " + G + " = " + A); B = G.multiply(b);// 计算B=b*G System.out.println("B=b*G: "+b + " * " + G + " = " + B); ECPoint Q1, Q2; Q1 = A.multiply(b);// Bob收到Alice传递的A,计算Q =b*A Q2 = B.multiply(a);// Alice收到Bob传递的B,计算Q`=a*B System.out.println("Q1:"+Q1); System.out.println("Q2:"+Q2); System.out.print(Q1.equals(Q2)); } }运行结果:
相关文章推荐
- Google Java编程风格指南中文版
- java.lang.IllegalArgumentException: taglib definition not consistent with specification version
- Java项目中数据库字段和用户页面显示之间的转换,比如性别字段:1显示男,0显示女
- Java根据用户IP查找用户地址信息
- JAVA嵌套类:静态嵌套类和非静态嵌套类
- java.lang.UnsupportedClassVersionError 解决办法
- Eclipse IDE中Build path specifies execution environment J2SE-1.5.There are no JREs installed..
- Java基础---类的继承
- Spring配置动态数据源
- 【Eclipse】打开文件所在文件夹的插件
- Java的身份证号码工具类
- Java设计模式(1)-单例模式
- spring源码阅读笔记
- Java方法excel文件转换成xml文件
- eclipse 显示 空格 .回车符号,去掉相应的符号
- JAVA项目编码规范参考
- 中文分词系统NLPIR(2015版)的Java接口使用学习
- Java:FileOutputStream与FileWriter的区别
- java中对象的序列化和反序列化
- java.lang.NoClassDefFoundError