📄 parameter.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 + -