我为我的练习编写的代码是否有效?

时间:2013-08-10 20:27:11

标签: java performance diffie-hellman

我已经学会了编写下面实现Diffie-Hellman密钥交换算法的代码,但我觉得我的代码效率不高。任何人都可以更正我的代码......?

import java.math.BigInteger;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import java.util.Random;;

    public class DH_key {
        static class DHGenParameterSpec implements AlgorithmParameterSpec{
            static BigInteger p;
            static BigInteger g;
            static int a,b;
            static BigInteger A,B;
        static BigInteger getPrimeP_G() {
            Random rand1= new Random(System.currentTimeMillis());
            Random rand2= new Random(System.currentTimeMillis()*10);

            p= BigInteger.probablePrime(32, rand1);
            g= BigInteger.probablePrime(32, rand2);
            System.out.println(""+p+","+g);
            return null;
        }
        static int getExponent() {
            SecureRandom ranGen1 = new SecureRandom();

            a= ranGen1.nextInt(1000);
            b= ranGen1.nextInt(1000);
            System.out.println(a+"__"+b);
            return 0 ;

        }
        public static Object pow (){
            //g.pow(a);
            A = g.pow(getExponent()).mod(getPrimeP_G());
            B = g.pow(b).mod(p);

            return null;        
        }



    public static void main(String[]args){
        //System.out.println(DHGenParameterSpec.getPrimeP_G());
        DHGenParameterSpec.getPrimeP_G();
        DHGenParameterSpec.getExponent();
        A = g.pow(a).mod(p);
        B = g.pow(b).mod(p);

        BigInteger Sa,Sb;
        Sa=B.pow(a).mod(p);
        Sb=A.pow(b).mod(p);

            System.out.println(""+A+"__"+B);
                System.out.println(""+Sa+"__"+Sb);
        }

        }

    }

上面的代码是否适用于java规则??

1 个答案:

答案 0 :(得分:1)

您已将模幂运算编写为:

        A = g.pow(getExponent()).mod(getPrimeP_G());
        B = g.pow(b).mod(p);

这是低效的,因为取幂的中间结果可能很大。您应该使用modPow方法,使用有效的算法执行这两项操作:

        A = g.modPow(getExponent(), getPrimeP_G());
        B = g.modPow(b, p);