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

📄 elgamalencryptor.java

📁 Java version of ABC/HR comparator v0.5. by schnofler. Runs on Sun JRE 1.5 or later
💻 JAVA
字号:
package abchr.crypto;

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

public class ElGamalEncryptor implements Encryptor {
	public static final SecureRandom rand=new SecureRandom();

	private ElGamalPublicKey key;

	public ElGamalEncryptor(ElGamalPublicKey key) {
		this.key=key;
	}

	public byte[] encrypt(byte[] data) {
		byte[] modData=new byte[data.length+1];
		modData[0]=1;
		System.arraycopy(data,0,modData,1,data.length);
		BigInteger plainText=new BigInteger(modData);
		BigInteger x;
		do {
			x=new BigInteger(key.getModulus().bitLength(),rand);
		} while(x.compareTo(BigInteger.ONE)<=0 || x.compareTo(key.getModulus())>=0);
		BigInteger y=key.getGenerator().modPow(x,key.getModulus());
		BigInteger encryptedText=key.getPublicKey().modPow(x,key.getModulus()).multiply(plainText).remainder(key.getModulus());
		byte[] yBytes=y.toByteArray();
		byte[] encryptedTextBytes=encryptedText.toByteArray();
		byte[] out=new byte[yBytes.length+encryptedTextBytes.length+8];
		Util.intToByteArray(yBytes.length,out,0);
		Util.intToByteArray(encryptedTextBytes.length,out,4);
		System.arraycopy(yBytes,0,out,8,yBytes.length);
		System.arraycopy(encryptedTextBytes,0,out,8+yBytes.length,encryptedTextBytes.length);
		return out;
	}
}

⌨️ 快捷键说明

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