elgamaldecryptor.java

来自「Java version of ABC/HR comparator v0.5. 」· Java 代码 · 共 29 行

JAVA
29
字号
package abchr.crypto;

import java.math.BigInteger;

public class ElGamalDecryptor implements Decryptor {
	private ElGamalPrivateKey key;

	public ElGamalDecryptor(ElGamalPrivateKey key) {
		this.key=key;
	}

	public byte[] decrypt(byte[] data) {
		int yLength=Util.byteArrayToInt(data,0);
		int encLength=Util.byteArrayToInt(data,4);
		byte[] yBytes=new byte[yLength];
		System.arraycopy(data,8,yBytes,0,yLength);
		byte[] encryptedTextBytes=new byte[encLength];
		System.arraycopy(data,8+yLength,encryptedTextBytes,0,encLength);
		BigInteger y=new BigInteger(yBytes);
		BigInteger encryptedText=new BigInteger(encryptedTextBytes);
		BigInteger exponent=key.getModulus().subtract(key.getPrivateKey()).subtract(BigInteger.ONE);
		BigInteger plainText=y.modPow(exponent,key.getModulus());
		plainText=plainText.multiply(encryptedText).remainder(key.getModulus());
		byte[] modBytes=plainText.toByteArray();
		byte[] bytes=new byte[modBytes.length-1];
		System.arraycopy(modBytes,1,bytes,0,bytes.length);
		return bytes;
	}
}

⌨️ 快捷键说明

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