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, setPublicKey
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
encrypt, encrypt, encrypt, encryptBase64, encryptBase64, encryptBase64, encryptBase64, encryptHex, encryptHex, encryptHex, encryptHex
decrypt, decrypt, decryptStr, decryptStr
public PaillierCrypto()
public PaillierCrypto(KeyPair keyPair)
私钥和公钥同时为空时生成一对新的私钥和公钥
私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
keyPair
- 密钥对,null
表示随机生成public PaillierCrypto setRandom(SecureRandom random)
random
- 随机数生成器,可自定义随机数种子public byte[] encrypt(byte[] data, KeyType keyType)
AsymmetricEncryptor
data
- 被加密的byteskeyType
- 私钥或公钥 KeyType
public byte[] decrypt(byte[] bytes, KeyType keyType)
AsymmetricDecryptor
bytes
- 被解密的byteskeyType
- 私钥或公钥 KeyType
public PaillierCrypto initMode(CipherMode mode, Key key)
Cipher.ENCRYPT_MODE
,密钥使用公钥Cipher.DECRYPT_MODE
,密钥使用私钥mode
- 模式,可选Cipher.ENCRYPT_MODE
或Cipher.DECRYPT_MODE
key
- 公钥或私钥public byte[] doFinal(byte[] input, int inputOffset, int inputLen)
input
- 数据inputOffset
- 开始位置inputLen
- 处理长度Copyright © 2025. All rights reserved.