📄 elgamaldecryptor.java
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -