Python实现Paillier加密

文章展示了如何使用Python中的phe库来实现Paillier加密算法,包括生成公私钥对,对数据进行加密和解密,并且演示了同态加密的特性,如加法和乘法操作在密文上的应用。此外,还提到了该算法不支持密文乘法,仅支持加法的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python实现Paillier加密

Paillier算法介绍

在这里插入图片描述
在这里插入图片描述

Python实现paillier加解密

导入phe库
from phe import paillier  # 开源库
import time  # 做性能测试

# 测试paillier参数
print("默认私钥大小:", paillier.DEFAULT_KEYSIZE)  #3072
# 生成公私钥
public_key, private_key = paillier.generate_paillier_keypair()
# 测试需要加密的数据
message_list = [3.1415926, 100, -4.6e-12]
# 加密操作
time_start_enc = time.time()
encrypted_message_list = [public_key.encrypt(m) for m in message_list]
time_end_enc = time.time()
print("加密耗时s:", time_end_enc-time_start_enc)
# 解密操作
time_start_dec = time.time()
decrypted_message_list = [private_key.decrypt(c) for c in encrypted_message_list]
time_end_dec = time.time()
print("解密耗时s:", time_end_dec-time_start_dec)
# print(encrypted_message_list[0])
print("原始数据:", decrypted_message_list)

# 测试加法和乘法同态
a, b, c = encrypted_message_list  # a,b,c分别为对应密文

a_sum = a + 5  # 密文加明文
a_sub = a - 3  # 密文加明文的相反数
b_mul = b * 1  # 密文乘明文,数乘
c_div = c / -10.0  # 密文乘明文的倒数

print("a:", a.ciphertext())  # 密文a的纯文本形式
print("a_sum:", a_sum.ciphertext())  # 密文a_sum的纯文本形式

print("a+5=", private_key.decrypt(a_sum))
print("a-3", private_key.decrypt(a_sub))
print("b*1=", private_key.decrypt(b_mul))
print("c/-10.0=", private_key.decrypt(c_div))

# 密文加密文
print((private_key.decrypt(a)+private_key.decrypt(b)) == private_key.decrypt(a+b))
# # 报错,不支持a*b,因为通过密文加实现了明文加的目的,这和原理设计是不一致的,只支持密文加!
# print((private_key.decrypt(a)+private_key.decrypt(b)) == private_key.decrypt(a*b))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值