• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
同态加密

 

 

加法同态

 

#!/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
'''

  

posted on 2021-10-15 17:06  MKT-porter  阅读(167)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3