是否有具有密钥生成、加密和解密功能的 ElGamal 椭圆曲线密码系统的简单实现(使用 Java BigInteger);一个可以用来在讲座中向大学生解释的东西?
例如,Paillier 加密函数可以在不失一般性的情况下编码为:
public BigInteger encrypt(BigInteger input) throws PaillierException {
if(!isInZN(input)) {
throw new PaillierException(PaillierException.TYPE_PLAINTEXT_NOT_IN_ZN, input);
}
BigInteger plaintext = handleNegative(input);
BigInteger r = randomInZStarN();
return (((n.multiply(plaintext).add(BigInteger.ONE)).multiply(r.modPow(n, nSquared)))).mod(nSquared);
}
其中包含优化 g=(1+n),使得密文 c = (1 + mn) r^n mod n^2。
请不要建议 Java 7 原生实现或 BouncyCastle 实现,因为我不需要真实世界的符合 JCA 的复杂实现。
谢谢。