用java编程实现Diffie-Hellman算法
2011-05-09 16:12
302 查看
Diffie-Hellman密钥交换代码如下:
import
java.util.ArrayList;
import
java.util.List;
import
java.util.Random;
import
java.math.*;
public class
DHtest {
public static void main(String[]
args){
System.out.println("Alice和Bob确定一个4位的随机大素数n, 5位的随机大素数g");
//获得一个4位数的随机大素数
long longPrimeVar4_n =
createRadomPrimeNunber(4);
System.out.println("n="+longPrimeVar4_n);
//获得一个5位数的随机大素数
long longPrimeVar5_g =
createRadomPrimeNunber(5);
System.out.println("g="+longPrimeVar5_g);
//获得一个4位的随机大数
long longVar4_x = createRandomNumber(3);
System.out.println("Alice选择一个3位的大随机数x="+longVar4_x);
//获得一个5位的随机大数
long longVar5_y = createRandomNumber(3);
System.out.println("Bob选择一个3位的大随机数y="+longVar5_y);
//计算A,B
long
A = (long)largeMOD(longPrimeVar5_g,longVar4_x,longPrimeVar4_n);
System.out.println("Alice根据x计算出A="+A+" 并发给Bob");
long
B = (long)largeMOD(longPrimeVar5_g,longVar5_y,longPrimeVar4_n);
System.out.println("Bob根据y计算出B="+B+" 并发给Alice");
//计算K1,K2
long
K1 = (long)largeMOD(B,longVar4_x,longPrimeVar4_n);
System.out.println("Alice根据B计算出密匙K1="+K1);
long
K2 =
(long)largeMOD(A,longVar5_y,longPrimeVar4_n);
System.out.println("Bob根据A计算出密匙K2="+K2);
//判断K1是否等于k2
if(K1==K2) {
System.out.println("K1=K2");
}
else
{
System.out.println("error");
}
}
/*
* 产生随机的大素数
*/
public static long
createRadomPrimeNunber(int n){
long recLong
= 0;
List
list = listAllPrimeNumber(n);
Random
rd = new
Random();
int
randomIndex = Math.abs( rd.nextInt()%list.size());
recLong =
((Long)list.get(randomIndex)).longValue();
return
recLong;
}
public
static List listAllPrimeNumber(int n){
List
list = new
ArrayList();
long
low = (long)Math.pow(10,n-1);
long
high = (long)Math.pow(10,n) -
1;
for(long i= low; i < high; i++){
if(isPrimeNumber(i)) {
list.add(new Long(i));
}
}
return
list;
}
//定义一个判断一个数是否是素数的函数
public
static boolean isPrimeNumber(long x){
if(isProbablePrime(x))
return true;
else
return false;
}
private static boolean isProbablePrime(long
x) {
return
true;
}
/*
* 产生大的随机数
*/
public
static long createRandomNumber(int n){
long recLong
= 0;
List
list = listAllPrimeNumber(n);
Random
rd = new
Random();
int
randomIndex = Math.abs( rd.nextInt()%list.size());
recLong =
((Long)list.get(randomIndex)).longValue();
return
recLong;
}
public
static List listAllNumber(int n){
List list2 = new ArrayList();
long low = (long)Math.pow(10,n-1);
long high = (long)Math.pow(10,n) - 1;
for(long i= low; i < high; i++){
list2.add(new Long(i));
}
return
list2;
}
public static double largeMOD(long x,long
y,long z)
{
if(y==1)
return
x%z;
else
{
--y;
return
((x%z) * largeMOD(x,y,z)) % z ;
}
}
}
import
java.util.ArrayList;
import
java.util.List;
import
java.util.Random;
import
java.math.*;
public class
DHtest {
public static void main(String[]
args){
System.out.println("Alice和Bob确定一个4位的随机大素数n, 5位的随机大素数g");
//获得一个4位数的随机大素数
long longPrimeVar4_n =
createRadomPrimeNunber(4);
System.out.println("n="+longPrimeVar4_n);
//获得一个5位数的随机大素数
long longPrimeVar5_g =
createRadomPrimeNunber(5);
System.out.println("g="+longPrimeVar5_g);
//获得一个4位的随机大数
long longVar4_x = createRandomNumber(3);
System.out.println("Alice选择一个3位的大随机数x="+longVar4_x);
//获得一个5位的随机大数
long longVar5_y = createRandomNumber(3);
System.out.println("Bob选择一个3位的大随机数y="+longVar5_y);
//计算A,B
long
A = (long)largeMOD(longPrimeVar5_g,longVar4_x,longPrimeVar4_n);
System.out.println("Alice根据x计算出A="+A+" 并发给Bob");
long
B = (long)largeMOD(longPrimeVar5_g,longVar5_y,longPrimeVar4_n);
System.out.println("Bob根据y计算出B="+B+" 并发给Alice");
//计算K1,K2
long
K1 = (long)largeMOD(B,longVar4_x,longPrimeVar4_n);
System.out.println("Alice根据B计算出密匙K1="+K1);
long
K2 =
(long)largeMOD(A,longVar5_y,longPrimeVar4_n);
System.out.println("Bob根据A计算出密匙K2="+K2);
//判断K1是否等于k2
if(K1==K2) {
System.out.println("K1=K2");
}
else
{
System.out.println("error");
}
}
/*
* 产生随机的大素数
*/
public static long
createRadomPrimeNunber(int n){
long recLong
= 0;
List
list = listAllPrimeNumber(n);
Random
rd = new
Random();
int
randomIndex = Math.abs( rd.nextInt()%list.size());
recLong =
((Long)list.get(randomIndex)).longValue();
return
recLong;
}
public
static List listAllPrimeNumber(int n){
List
list = new
ArrayList();
long
low = (long)Math.pow(10,n-1);
long
high = (long)Math.pow(10,n) -
1;
for(long i= low; i < high; i++){
if(isPrimeNumber(i)) {
list.add(new Long(i));
}
}
return
list;
}
//定义一个判断一个数是否是素数的函数
public
static boolean isPrimeNumber(long x){
if(isProbablePrime(x))
return true;
else
return false;
}
private static boolean isProbablePrime(long
x) {
return
true;
}
/*
* 产生大的随机数
*/
public
static long createRandomNumber(int n){
long recLong
= 0;
List
list = listAllPrimeNumber(n);
Random
rd = new
Random();
int
randomIndex = Math.abs( rd.nextInt()%list.size());
recLong =
((Long)list.get(randomIndex)).longValue();
return
recLong;
}
public
static List listAllNumber(int n){
List list2 = new ArrayList();
long low = (long)Math.pow(10,n-1);
long high = (long)Math.pow(10,n) - 1;
for(long i= low; i < high; i++){
list2.add(new Long(i));
}
return
list2;
}
public static double largeMOD(long x,long
y,long z)
{
if(y==1)
return
x%z;
else
{
--y;
return
((x%z) * largeMOD(x,y,z)) % z ;
}
}
}
相关文章推荐
- 迪菲-赫尔曼密钥交换(Diffie–Hellman)算法原理和PHP实现版
- pomelo学习笔记 (3) node.js 与 c 客户端 Diffie-Hellman 密钥交换算法的实现
- Diffie-Hellman密钥交换算法的JavaScript实现
- 对Diffie-Hellman密钥交换算法实现的一点改进
- 迪菲-赫尔曼密钥交换(Diffie–Hellman)算法原理和PHP实现版
- C#实现Diffie-Hellman(DH)算法可结合DES用于通信信息加密
- 客户端网络pomelo学习笔记 (3) node.js 与 c 客户端 Diffie-Hellman 密钥交换算法的实现客户端网络
- Diffie-Hellman 密钥交换算法
- ssh秘钥交换详解与实现 diffie-hellman-group-exchange-sha
- JAVA上加密算法的实现用例MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用
- Diffie-Hellman(迪菲-赫尔曼)秘钥交换算法
- JAVA加密解密之DH(Diffie-Hellman)算法
- Diffie-Hellman密钥交换算法
- Diffie-Hellman算法的安全性基于在有限域上计算离散对数非常困难
- Node.js如何使用Diffie-Hellman密钥交换算法详解
- Diffie-Hellman 算法描述:
- Python实现Diffie-Hellman密钥交换协议
- ssh秘钥交换详解与实现 diffie-hellman-group-exchange-sha
- JAVA上加密算法的实现用例MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用
- JAVA上加密算法的实现用例MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用