加法同态
#!/usr/bin/env python3
"""Paillier encryption library for partially homomorphic encryption."""
import random
import phe
from phe import EncodedNumber, paillier
from phe.util import invert, powmod, getprimeover, isqrt
import numpy as np
# test
if __name__ == "__main__":
public_key, private_key = paillier.generate_paillier_keypair(n_length=10)
print('公钥', public_key.g, public_key.n)
print('私钥', private_key.p, private_key.q)
#============1本地原始输入数据
A=[3,32]
print('输入A', A)
B=[4,16]
print('输入B', B)
#============2本地公钥加密数据
enA=[public_key.encrypt(x) for x in A]
print('加密后的A')
print(enA[0].ciphertext(False))
print(enA[0].ciphertext(False).bit_length())
enB=[public_key.encrypt(x) for x in B]
print('加密后的B')
print(enB[0].ciphertext(False))
print(enB[0].ciphertext(False).bit_length())
#============3服务器加密数据运算
#加密后的数据进行计算 +法
print("同太运算-加密数据进行相加")
en=np.add(enA,enB)
print("同太运算-相加计算结果")
print(en[0].ciphertext(False))
print(en[0].ciphertext(False).bit_length())
#===========4本地私钥将加密结果解析为原始结果
#解析出来的结果
print("使用私钥解析出来的结果")
for x in en:
print(private_key.decrypt(x))
'''
公钥 528 527
私钥 17 31
输入A [3, 32]
加密后的A
106192
17
输入B [4, 16]
加密后的B
192563
18
同太运算-加密数据进行相加
同太运算-相加计算结果
19284
15
使用私钥解析出来的结果
7
48
'''
浙公网安备 33010602011771号