Jecc(java椭圆曲线加密库)学习笔记及ECDH实现

C++椭圆曲线库下载网址http://sourceforge.net/projects/libecc/files/,打开之后右边显示:

Jecc(java椭圆曲线加密库)学习笔记及ECDH实现_第1张图片

点击红框里面链接:http://sourceforge.net/projects/jecc/?source=recommended,跳转到jecc下载页

Jecc(java椭圆曲线加密库)学习笔记及ECDH实现_第2张图片


点击下载即可。下载之后文件名是jecc-alpha1.1.tar.gz,直接用winrar解压即可,文件已存至网盘,链接: http://pan.baidu.com/s/1sjpEcqT 密码: e3yd。

接下来可以在myeclipse里面跑ecc程序了,首先新建程序:

Jecc(java椭圆曲线加密库)学习笔记及ECDH实现_第3张图片

注意红框里面选择:Use project folder as root for sources and class files,不然运行时报错,接下来在project里面建立一个名为ecc的package,

用import将解压后的ecc目录下面的文件全部导入进来:

Jecc(java椭圆曲线加密库)学习笔记及ECDH实现_第4张图片

最后我选择了运行elliptic下面的run.java

Jecc(java椭圆曲线加密库)学习笔记及ECDH实现_第5张图片

运行结果

Jecc(java椭圆曲线加密库)学习笔记及ECDH实现_第6张图片

下面是一段我利用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));
	}

}
运行结果:

Jecc(java椭圆曲线加密库)学习笔记及ECDH实现_第7张图片


你可能感兴趣的:(密码实现)