public class PaillierCrypto extends AbstractAsymmetricCrypto<PaillierCrypto>
加法同态,存在有效算法+,E(x+y)=E(x)+E(y)或者 x+y=D(E(x)+E(y))成立,并且不泄漏 x 和 y。 乘法同态,存在有效算法*,E(x×y)=E(x)*E(y)或者 xy=D(E(x)*E(y))成立,并且不泄漏 x 和 y。
方案安全性可以归约到判定性合数剩余假设(Decisional Composite Residuosity Assumption, DCRA),即给定一个合数n和整数z,判定z是否在n^2下是否是n次剩余是困难的。 这个假设经过了几十年的充分研究,到目前为止还没有多项式时间的算法可以攻破,所以Paillier加密方案的安全性被认为相当可靠。
字符串文本加解密相互配对,此时无法使用同态加法和同态乘法 数值类型不可使用字符串加解密
公钥加密和同态加法/同态乘法运算 私钥解密
algorithm, lock, privateKey, publicKey| Constructor and Description |
|---|
PaillierCrypto()
构造,使用随机密钥对
|
PaillierCrypto(KeyPair keyPair)
构造
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密 |
| Modifier and Type | Method and Description |
|---|---|
byte[] |
decrypt(byte[] bytes,
KeyType keyType)
解密
|
byte[] |
doFinal(byte[] input,
int inputOffset,
int inputLen)
执行加密或解密数据
|
byte[] |
encrypt(byte[] data,
KeyType keyType)
加密
|
PaillierCrypto |
initMode(CipherMode mode,
Key key)
初始化模式
加密模式下,使用
Cipher.ENCRYPT_MODE,密钥使用公钥
解密模式下,使用Cipher.DECRYPT_MODE,密钥使用私钥
|
PaillierCrypto |
setRandom(SecureRandom random)
设置随机数生成器,可自定义随机数种子
|
getKeyByType, getPrivateKey, getPrivateKeyBase64, getPublicKey, getPublicKeyBase64, init, initKeys, setKey, setLock, setPrivateKey, setPublicKeyclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitencrypt, encrypt, encrypt, encryptBase64, encryptBase64, encryptBase64, encryptBase64, encryptHex, encryptHex, encryptHex, encryptHexdecrypt, decrypt, decryptStr, decryptStrpublic PaillierCrypto()
public PaillierCrypto(KeyPair keyPair)
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
keyPair - 密钥对,null表示随机生成public PaillierCrypto setRandom(SecureRandom random)
random - 随机数生成器,可自定义随机数种子public byte[] encrypt(byte[] data,
KeyType keyType)
AsymmetricEncryptordata - 被加密的byteskeyType - 私钥或公钥 KeyTypepublic byte[] decrypt(byte[] bytes,
KeyType keyType)
AsymmetricDecryptorbytes - 被解密的byteskeyType - 私钥或公钥 KeyTypepublic PaillierCrypto initMode(CipherMode mode, Key key)
Cipher.ENCRYPT_MODE,密钥使用公钥Cipher.DECRYPT_MODE,密钥使用私钥mode - 模式,可选Cipher.ENCRYPT_MODE或Cipher.DECRYPT_MODEkey - 公钥或私钥public byte[] doFinal(byte[] input,
int inputOffset,
int inputLen)
input - 数据inputOffset - 开始位置inputLen - 处理长度Copyright © 2025. All rights reserved.