两个百万富翁问题

这篇博客介绍了如何使用安全计算解决百万富翁问题,即在不泄露各自真实财富的情况下,比较甲和乙谁更有钱。算法通过随机生成素数、计算公钥和私钥、加密和解密等步骤确保了信息的安全交换。甲和乙通过加密和解密操作,最终能得知相对资产状况,而无需直接透露具体金额。

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

今天看了一位博主阐述的百万富翁问题,记录一下学习心得。
假设甲有i个亿,乙有j个亿。通过两方安全计算得知谁更有钱。
该算法实现的步骤如下(本文中的所有m - n之间包含两端):

  1. 先随机生成两个素数p和q(代码中p和q不能相等且都是1-100之间)
  2. 设e和(p-1)*(q-1)互质求出满足该条件最小的正整数e
  3. 再根据(ed)%((p-1)(q-1)) = 1求出满足该条件最小的值d
  4. 设n = p*q,假设甲有i个亿的资产,乙有j个亿的资产,i,j在1-9之间
  5. 随机选一个大整数x(代码中x取值1-100之间)
  6. 把大整数x加密得到密文K = x^e % n
  7. 让甲收到的数为c = K - j
  8. 对c + 1到c + 10进行解密:即让k遍历1-10中的10个正整数,得到的每个(c + k)^e % n都依次放入 c_list 数组中。
  9. 再取一个随机数p0,选取合适大小的p0,这里根据感觉写了1-99的随机数,生成的序列的值也要求小于100。
  10. 10.把c_list每个值依次除以p0得到的余数放入x_list
  11. 再把x_list前i位包括第i位不动,后面的10-i个数字加1得到y_list
  12. 取y_list第j个数字y_list[j - 1]
  13. 把y_list[j - 1]和 x%p对比:
    a)如果两者相等,则i >= j,即甲比乙资产更多或者一样。
    b)如果两者不等,则i < j,即乙比价资产更多。

百万富翁问题实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值