加法同态
#!/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 '''