elgamalparametersgenerator.java

来自「《移动Agent技术》一书的所有章节源代码。」· Java 代码 · 共 76 行

JAVA
76
字号
package org.bouncycastle.crypto.generators;import java.math.BigInteger;import java.security.SecureRandom;import org.bouncycastle.crypto.CipherParameters;import org.bouncycastle.crypto.params.ElGamalParameters;public class ElGamalParametersGenerator{    private int             size;    private int             certainty;    private SecureRandom    random;    private static BigInteger ONE = BigInteger.valueOf(1);    private static BigInteger TWO = BigInteger.valueOf(2);    public void init(        int             size,        int             certainty,        SecureRandom    random)    {        this.size = size;        this.certainty = certainty;        this.random = random;    }    /**     * which generates the p and g values from the given parameters,     * returning the ElGamalParameters object.     * <p>     * Note: can take a while...     */    public ElGamalParameters generateParameters()    {        BigInteger      g, p, q;        int             qLength = size - 1;        //        // find a safe prime p where p = 2*q + 1, where p and q are prime.        //		for (;;)		{			q = new BigInteger(qLength, certainty, random);            p = q.multiply(TWO).add(ONE);            if (p.isProbablePrime(certainty))            {                break;            }		}		//		// calculate the generator g - the advantage of using the 2q+1         // approach is that we know the prime factorisation of (p - 1)...	    //        for (;;)        {            g = new BigInteger(qLength, random);            if (g.modPow(TWO, p).equals(ONE))            {                continue;            }            if (g.modPow(q, p).equals(ONE))            {                continue;            }            break;        }        return new ElGamalParameters(p, g);    }}

⌨️ 快捷键说明

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