⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parameter.java

📁 ElGamal method is an aymetric method to crypt message. You can use ElGamal to crypt the key session
💻 JAVA
字号:
package elgamal;/*import java.math.BigInteger;import java.security.SecureRandom;public class Parameter{	private BigInteger g;	private BigInteger p;		private int size;	private int certainty;	private SecureRandom random;		private static final BigInteger ONE = BigInteger.valueOf(1);	private static final BigInteger TWO = BigInteger.valueOf(2);		public Parameter(int size, int certainty, SecureRandom random)	{		this.size = size;		this.certainty = certainty;		this.random = random;		generateParameters();	}		private void generateParameters()	{		BigInteger g, p, q;		int qLength = size - 1;				while(true)		{			q = new BigInteger(qLength, 1, random);						if (q.bitLength() != qLength)			{				continue;			}			if (!q.isProbablePrime(certainty))			{				continue;			}			p = q.multiply(TWO).add(ONE);			if (p.isProbablePrime(certainty))			{				break;			}		}		this.p = p;				while (true)		{			g = new BigInteger(qLength, random);			if (g.modPow(TWO, p).equals(ONE))			{				continue;			}			if (g.modPow(q, p).equals(ONE))			{				continue;			}			break;		}		this.g = g;	}			public BigInteger getP()	{		return p;	}		public BigInteger getG()	{		return g;	}}*/import java.math.BigInteger;import java.util.Random;public class Parameter{    private BigInteger g;    private BigInteger p;    private BigInteger q;    private int pLength;    private int certainty;    private static final BigInteger UN = BigInteger.ONE;    private static final BigInteger DEUX = new BigInteger("2");    public Parameter(int pLength, int certainty)    {        this.pLength = pLength;        this.certainty = certainty;        generateParameters();    }    private void generateParameters()    {         BigInteger k;         while(true){            k = new BigInteger(8,new Random());            q = new BigInteger(pLength-1-k.bitLength(),certainty, new Random());            p = q.multiply(DEUX).multiply(k).add(UN);            while(!p.isProbablePrime(certainty))            {                         k = k.add(UN);                p = DEUX.multiply(q).multiply(k).add(UN);                if(p.bitLength()>pLength)break;            }            if(p.bitLength()==pLength)break;         }        BigInteger expo[] = new BigInteger[5];        expo[0] = k.multiply(q);        expo[1] = DEUX.multiply(k);        while(k.mod(DEUX).intValue() == 0) k = k.divide(DEUX);        int i = 2;        BigInteger diviseur = DEUX.add(UN);        while(diviseur.compareTo(k) <= 0)         {            if(k.mod(diviseur).intValue() == 0)            {                expo[i++] = DEUX.multiply(q).multiply(k.divide(diviseur));                while(k.mod(diviseur).intValue() == 0) k = k.divide(diviseur);            }            diviseur = diviseur.add(DEUX);        }        boolean ok = true;        while(ok)        {            g = new BigInteger(pLength-1, new Random());            int j = 0;            while(true)            {                if(j >= i)                {                    break;                }                BigInteger h = g.modPow(expo[j], p);                if(h.equals(UN))                {                    ok = false;                    break;                }                j++;            }             if(ok)            {                break;            }            ok = true;        }                    }    public BigInteger getP()    {        return p;    }    public BigInteger getG()    {        return g;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -