python编程题:编程实现基手属性的访问控制模型ABAC •问题规模: •主体s、客体o、环境e属性集合各有10个元素 •每一个策略中的主体、客体、环境相关的规则由3-5个属性的布尔表达式组成(随机生成); •每个用户请求中,主体、客体、环境相关属性3-5个(随机生成); 策略个数共有10000个(5000个正授权、5000个负授权),随机生成; 。随机生成10000个请求,进行决策,记录决策结果。 。策略库是文本数据库,请求也是文本。
时间: 2024-03-17 07:44:36 浏览: 136
以下是实现基于属性的访问控制模型ABAC的Python代码,包括策略的生成、请求的生成、决策过程和结果记录:
```
import random
# 定义策略类
class Policy:
def __init__(self, sub_attrs, obj_attrs, env_attrs, decision):
self.sub_attrs = sub_attrs
self.obj_attrs = obj_attrs
self.env_attrs = env_attrs
self.decision = decision
# 判断策略是否匹配请求
def match(self, sub_req, obj_req, env_req):
for attr in self.sub_attrs:
if attr not in sub_req or self.sub_attrs[attr] != sub_req[attr]:
return False
for attr in self.obj_attrs:
if attr not in obj_req or self.obj_attrs[attr] != obj_req[attr]:
return False
for attr in self.env_attrs:
if attr not in env_req or self.env_attrs[attr] != env_req[attr]:
return False
return True
# 随机生成策略
def generate_policy():
sub_attrs = {}
obj_attrs = {}
env_attrs = {}
# 生成主体属性
for i in range(random.randint(3, 5)):
sub_attrs['sub_attr' + str(i)] = random.choice([True, False])
# 生成客体属性
for i in range(random.randint(3, 5)):
obj_attrs['obj_attr' + str(i)] = random.choice([True, False])
# 生成环境属性
for i in range(random.randint(3, 5)):
env_attrs['env_attr' + str(i)] = random.choice([True, False])
return Policy(sub_attrs, obj_attrs, env_attrs, random.choice([True, False]))
# 随机生成请求
def generate_request():
sub_req = {}
obj_req = {}
env_req = {}
# 生成主体请求属性
for i in range(random.randint(3, 5)):
sub_req['sub_req' + str(i)] = random.choice([True, False])
# 生成客体请求属性
for i in range(random.randint(3, 5)):
obj_req['obj_req' + str(i)] = random.choice([True, False])
# 生成环境请求属性
for i in range(random.randint(3, 5)):
env_req['env_req' + str(i)] = random.choice([True, False])
return sub_req, obj_req, env_req
# 随机生成策略库
policies = []
for i in range(10000):
policies.append(generate_policy())
# 随机生成请求并进行决策
results = []
for i in range(10000):
sub_req, obj_req, env_req = generate_request()
result = False
for policy in policies:
if policy.match(sub_req, obj_req, env_req):
result = policy.decision
break
results.append(result)
# 记录决策结果
with open("results.txt", "w") as f:
for result in results:
f.write(str(result) + "\n")
# 记录策略库和请求
with open("policies.txt", "w") as f:
for policy in policies:
f.write(str(policy.sub_attrs) + "\t" + str(policy.obj_attrs) + "\t" + str(policy.env_attrs) + "\t" + str(policy.decision) + "\n")
with open("requests.txt", "w") as f:
for i in range(10000):
sub_req, obj_req, env_req = generate_request()
f.write(str(sub_req) + "\t" + str(obj_req) + "\t" + str(env_req) + "\n")
```
以上代码中,我们首先定义了策略类Policy,包括主体属性、客体属性、环境属性和决策结果。然后,我们随机生成策略、随机生成请求,并对请求进行决策。最后,我们记录决策结果、策略库和请求到文本文件中。
请注意,由于属性数量和策略数量较大,此代码运行时间可能较长。如果需要加快运行速度,可以考虑使用其他数据结构,例如哈希表或数据库,来存储策略和请求。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)