PSI的python 实现
时间: 2024-05-06 17:18:28 浏览: 14
PSI (Private Set Intersection) 是一个协议,用于在两个参与者之间计算两个私有集合的交集,同时不泄露任何集合中的元素。下面是一个示例 PSI 的 Python 实现,使用了 PyCryptodome 库。
首先,参与者 A 和参与者 B 分别生成自己的私有集合,并对其进行哈希:
```python
from Crypto.Hash import SHA256
# Set A and B
setA = [1, 2, 3, 4, 5]
setB = [3, 4, 5, 6, 7]
# Hash set A and B
hashA = [SHA256.new(str(x).encode()).digest() for x in setA]
hashB = [SHA256.new(str(x).encode()).digest() for x in setB]
```
然后,参与者 A 将自己的哈希值发送给参与者 B:
```python
# Send hashA to B
```
接下来,参与者 B 对自己的哈希值和参与者 A 发送的哈希值进行比较,并计算相同元素的个数:
```python
# Compute intersection size
intersectionSize = 0
for hb in hashB:
if hb in hashA:
intersectionSize += 1
```
最后,参与者 B 将交集的大小发送给参与者 A:
```python
# Send intersection size to A
```
参与者 A 可以通过收到的交集大小和自己集合大小计算出交集的元素个数:
```python
# Receive intersection size from B
# Compute intersection
intersectionSize = int(intersectionSize)
intersection = []
for ha in hashA:
if SHA256.new(ha).digest() in hashB:
intersection.append(setA[hashA.index(ha)])
```
这就完成了 PSI 协议的计算,交集的元素存储在 intersection 数组中。请注意,这个示例中使用的是基于哈希的 PSI,存在哈希冲突的可能性。实际应用中,可以使用更加安全的加密方式,如同态加密、差分隐私等。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)