《数据安全五(四)》

数据安全

实 验 报 告

   实验名称        数据安全算法设计实训             

      

班    级      信安20-2           

姓    名       mimi      

学    号      20101110227         

指导教师       mimi        

2022年   5月  11 日

实验 百万富翁

一、实验目的

实践数据安全相关算法,利用Python进行基础算法设计

  • 实验环境

  • 实验要求

百万富翁问题协议回顾: (1) Alice选择一个大随机数x,并用Bob的公开密钥加密c=Eb(x); (2) Alice计算c-i,并将结果发送给Bob: (3) Bob计算下面的100个数:Yu=Db(c-i+u),(u=1,2,...,100 )其中Db是Bob的私有解密密钥。Bob选 择一个大素数p(p应该比x稍小一点,Bob不知道x,但Alice能容易地告诉他x的大小),然后计算下面的100个 数:Zu=(Yu mod p),。然后验证对所有的u≠v, |Zu-Zv|>=2,并对所有的u验证:0<Zu<p—1。如果不成立,Bob 就选择另一个素数并重复验证; (4) Bob将以下数列和p发送给Alice:[Z1,Z2,... ,Zj + 1,Zj+1 +1, ..., Z100 +1],p;就是所从第j位对Zu数 列+1操作; (5) Alice验证这个数列的第i个数是否与x模p同余。如果同余,她得出的结论是i<=j;如果不同余,她得出的结 论是i>j; (6) Alice把这个结论告诉Bob。

设计思维:可以随机赋值(1-10)的钱数给两个百万富翁王五和李六,然后进行比较

  • 代码展示

import math
import random

# 获取小于等于指定数的素数数组
def get_prime_arr(max):
    prime_array = []
    for i in range(2, max):
        if is_prime(i):
            prime_array.append(i)
    return prime_array


# 判断是否为素数
def is_prime(num):
    if num == 1:
        raise Exception('1既不是素数也不是合数')
    for i in range(2, math.floor(math.sqrt(num)) + 1):
        if num % i == 0:
            # print("当前数%s为非素数,其有因子%s" % (str(num), str(i)))
            return False
    return True


# 找出一个指定范围内与n互质的整数e
def find_pub_key(n, max_num):
    while True:
        # 这里是随机获取保证随机性
        e = random.randint(1, max_num)
        if gcd(e, n) == 1:
            break
    return e


# 求两个数的最大公约数
def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)


# 根据e*d mod s = 1,找出d
def find_pri_key(e, s):
    for d in range(100000000):  # 随机太难找,就按顺序找到d,range里的数字随意
        x = (e * d) % s
        if x == 1:
            return d


# 生成公钥和私钥
def build_key():
    prime_arr = get_prime_arr(100)
    p = random.choice(prime_arr)
    # 保证pq不为同一个数
    while True:
        q = random.choice(prime_arr)
        if p != q:
            break
    print("随机生成两个素数pq. p=", p, " q=", q)
    n = p * q
    s = (p - 1) * (q - 1)
    e = find_pub_key(s, 100)
    print("根据e(p-1)*(q-1))互质得到: e=", e)
    d = find_pri_key(e, s)
    print("根据(e*d)  ((p-1)*(q-1)) 等于 1 得到 d=", d)
    print("公钥:   n=", n, "  e=", e)
    print("私钥:   n=", n, "  d=", d)
    return n, e, d


# 加密
def rsa_encrypt(content, ned):
    # 密文B = 明文Ae次方 模 n ned为公钥
    # content就是明文Aned1】是e ned0】是n
    B = pow(content, ned[1]) % ned[0]
    return B


# 解密
def rsa_decrypt(encrypt_result, ned):
    # 明文C = 密文Bd次方 模 n ned为私钥匙
    # encrypt_result就是密文, ned1】是d, ned0】是n
    C = pow(encrypt_result, ned[1]) % ned[0]
    return C


if __name__ == '__main__':
    pbvk = build_key()
    pbk = (pbvk[0], pbvk[1])  # 公钥
    pvk = (pbvk[0], pbvk[2])  # 私钥

    # 生成两个亿万富翁
    i = random.randint(1, 9)
    j = random.randint(1, 9)
    print("王有%s亿,李有%s亿" % (i, j))

    x = random.randint(1, 100)
    print("随机选取的大整数x: %s" % (x))
    K = rsa_encrypt(x, pbk)
    print("大整数加密后得密文K: %s" % (K))
    c = K - j
    print("王收到数字c: %s" % (c))

    c_list = []
    for k in range(1, 11):
        t = rsa_decrypt(c + k, pvk)
        c_list.append(t)
    print("c+1c+10进行解密: %s" % c_list)

    # 选取合适大小的p,这里根据感觉写了100以内的随机数,生成的序列的值也要求小于100
    # 这个p是该算法的精华,在实际中选取p的策略要考虑到安全性和性能的因素
    d_list = []
    p = 0
    while True:
        # 每次选取p重置列表
        d_list = []
        p = random.randint(1, 100)
        for k in range(0, 10):
            if c_list[k] % p <= 100:
                d_list.append(c_list[k] % p)
            else:
                break
        if len(d_list) >= 10:
            break
    print("p的值为: %s" % p)
    print("除以p后的余数为: %s" % d_list)

    for k in range(i, 10):
        d_list[k] = d_list[k] + 1
    print("i位不动后面数字+1: %s" % d_list)
    print("j个数字为: %s" % d_list[j - 1])
    print("x mod p: %s" % (x % p))
    if d_list[j - 1] == x % p:
        print("i>=j,即王比李有钱或一样有钱")
        if i - j >= 0:
            print("验证成功")
        else:
            print("代码存在错误")
    else:
        print("i<j,即李比王有钱")
        if i - j < 0:
            print("验证成功")
        else:
            print("代码存在错误")

运行结果

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《数据安全治理建设指南》(以下简称《指南》)是一份面向企业和机构的指南,旨在帮助他们建立完备的数据安全治理框架,保护数据的安全和隐私。 《指南》从概念、原则、流程和实施等方面出发,对数据安全治理的各个环节进行了详细的说明和指导。其中,对于数据的分类、等级划分、访问控制、加密保护等方面进行了细致的分析,以及在云计算、大数据、人工智能等新兴技术中的数据安全治理问题给予了相应的建议和提示。 在实施过程中,《指南》提出了一系列工作要求和阶段性目标,涵盖了数据安全治理的每个环节。这不仅有助于企业建立起完备的数据安全治理体系,也为企业在数据安全合规等方面提供了可操作性强的方案。 此外,《指南》还提出了对数据安全责任人员能力要求、数据安全监管制度、安全风险评估和预警体系的建设等具体建议,以确保企业在数据安全治理中遵循最佳实践、不断提高安全能力,从而有效避免数据泄露等风险,保护企业自身和客户的合法权益。 总的来说,《数据安全治理建设指南》是一份非常有价值的指南,对企业、机构等组织在数据安全治理方面提供了全面而实用的建议和指导,帮助他们在发展的同时保驾护航自己和客户的数据安全。 ### 回答2: 数据安全治理建设指南是针对企业数据安全问题的一个指南性文件,它旨在帮助企业建立完善的数据安全治理机制,确保企业数据安全得到有效保障。 该指南包括了以下方面的内容: 一、数据安全治理的基本原则。这些原则包括了保密性、完整性、可用性等核心要素,指导企业在数据处理过程中的基本态度和原则。 二、数据安全治理体系的构建。该章节详细介绍了企业应该如何建立数据安全治理机制,包括人员分工、制度规范、技术保障等方面。 三、数据风险评估和管理。企业需要建立全面的数据风险评估和管理机制,通过定期对各个环节的风险进行评估和管理,及时发现和处理潜在的安全威胁。 数据安全监测和响应。当安全威胁发生时,企业需要有有效的监测和响应机制,能够快速发现和处理问题,避免数据安全受到影响。 数据安全培训和教育。通过对员工进行数据安全的培训和教育,提高员工的安全意识和技能,从而有效防范安全威胁。 总之,数据安全治理建设指南是一份非常必要的文件,能够帮助企业建立完善的数据安全治理机制,保护企业数据安全,避免因数据安全问题造成的不良影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光而不耀-2001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值