diff --git a/2019/03/16/BIBA访问控制模型实现(python)/index.html b/2019/03/16/BIBA访问控制模型实现(python)/index.html new file mode 100644 index 00000000..eb801d51 --- /dev/null +++ b/2019/03/16/BIBA访问控制模型实现(python)/index.html @@ -0,0 +1,801 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 利用python实现BIBA模型 | 混元霹雳手 + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+
+
+ + +
+ + + + + + + + +
+ + + +
+ + + + + + + +
+ + + +

利用python实现BIBA模型

+ + + +
+ + + + + +
+ + + + + +

基于python语言的BIBA模型图形界面实现

一、实验目的:

    +
  1. 查阅资料,了解biba安全模型的相关知识
  2. +
  3. 通过编程实现基于biba模型的完整性访问控制,进一步掌握biba模型的规则
  4. +
  5. 使用python语言实现,熟练pyqt的图形界面设计方法
  6. +
+
+

二、实验环境:

    +
  • 操作系统:Windows10
  • +
  • 工具版本:python3.7,pyqt5
  • +
+
+

三、实验原理:

1. 什么是安全模型

    +
  • 系统的元素
    +

    具有行为能力的主体
    不具有行为能力的客体

    +
    +
  • +
  • 系统的操作行为
    +

    可以执行的命令:读、写、执行

    +
    +
  • +
  • 对系统行为的约束方式
    +

    对行为的控制策略

    +
    +
  • +
  • 模型从抽象层次规定了系统行为和约束行为的方式
  • +
  • 模型往往用状态来表示
    +

    系统行为所依赖的环境
    行为对系统产生的效果

    +
    +

    2. biba完整性模型:

      +
    • 完整性威胁问题
      +

      完整性的威胁就是一个子系统在初始时刻认为不正常的修改行为;
      来源:内部&外部;
      类型:直接&间接

      +
      +
    • +
    +
  • +
+ + + + + + + + + + + + + + + + + +
外部的直接外部的间接内部的直接内部的间接
外部系统恶意地篡改另一个系统的数据或程序一个外部系统插入恶意的子程序修改自己的代码修改自己的指针
+
    +
  • biba模型的完整性定义
    +

    完整性级别高的实体对完整性低的实体具有完全的支配性,反之如果一个实体对另一个实体具有完全的控制权,说明前者完整性级别更高,这里的实体既可以是主体也可以是客体。
    完整性级别和可信度有密切的关系,完整级别越高,意味着可信度越高。

    +
    +
  • +
  • biba模型的规则
  • +
+
    +
  • 对于写和执行操作,有如下规则:
    +

    写规则控制
    当且仅当主体S的完整性级别大于或等于客体O的完整性级别时,主体S可以写客体O,一般称之为上写
    执行操作控制
    当且仅当主体S2的完整性级别高于或等于S1,主体S1可以执行主体S2。

    +
    +
  • +
  • 关于读操作,有不同的控制策略:
    +

    低水标模型
    任意主体可以读任意完整性级别的客体,但是如果主体读完整性级别比自己低的客体时,主体的完整性级别将为客体完整性级别,否则,主体的完整性级别保持不变。
    环模型
    不管完整性级别如何,任何主体都可以读任何客体
    严格完整性模型
    这个模型对读操作是根据主客体的完整性级别严格控制的,即只有完整性级别低或相等的主体才可以读完整性级别高的客体,称为下读

    +
    +
  • +
+

一般都是指毕巴严格完整性模型,总结来说是上写、下读

+
+

四、实验内容:

1. 用户登录实现

核对用户输入的账户密码与存储的是否匹配

+

login

+
    +
  • 从用户输入框获取账户和密码
  • +
  • 检查输入信息是否合法(为空)
  • +
  • 从password.txt中获取,并保存在列表listFromLine中
  • +
  • 检查输入的账户是否存在
  • +
  • 若存在,检查对应的密码是否正确
  • +
  • 若正确,判断是管理员还是普通用户,并跳转相应的界面

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    def checkPass(self):
    nameIn = self.lineEdit.text()
    passwdIn = self.lineEdit_2.text()
    md5 = hashlib.md5()
    md5.update(passwdIn.encode("utf-8"))
    passwdIn = md5.hexdigest()
    if (nameIn == '') or (passwdIn == ''):
    QMessageBox.warning(self,
    "警告",
    "账号和密码不能为空",
    QMessageBox.Yes)
    self.lineEdit.setFocus()
    print(nameIn, passwdIn)
    fr = open('./etc/passwd.txt')
    arrayofLines = fr.readlines()
    numberofLines = len(arrayofLines)
    for line in arrayofLines:
    line = line.strip()
    listFromLine = line.split(':')
    name = listFromLine[0]
    if name == nameIn:
    numberofLines = -1
    passwd = listFromLine[1]
    if passwd == passwdIn:
    group = listFromLine[2]
    print("\n登录成功!\n")
    if name == 'root':
    print('root登录')
    rootUI.show()
    MainWindow.close()
    else:
    urName = nameIn
    mainUI.lineEdit.setText(urName)
    mainUI.lineEdit_2.setText(group)
    mainUI.show()
    MainWindow.close()
    else:
    QMessageBox.warning(self,
    "警告",
    "密码错误!",
    QMessageBox.Yes)
    self.lineEdit.setFocus()
    fr.close()
    return 0
    +
  • +
+
+

2. 管理员功能实现

管理员可以对用户进行增、删、查的操作

+

login

+

增加用户的实现

+
    +
  • 获取管理员输入的用户名、密码和用户等级
  • +
  • 将明文密码转换为md5值
  • +
  • 判断输入的账户是否已经存在以及是否为空
  • +
  • 如果没有问题,将其存入passwd.txt的末尾
  • +
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def adduser(self):
print('开始添加')
name = self.lineEdit_4.text()
passwd = self.lineEdit_6.text()
md5 = hashlib.md5()
md5.update(passwd.encode("utf-8"))
passwd = md5.hexdigest()
group = self.comboBox.currentText()
self.name = name
if self.euxit():
if name == '' or passwd == '':
QMessageBox.warning(self,
"警告",
"账号和密码不能为空",
QMessageBox.Yes)
self.lineEdit.setFocus()
else:
cur_path = os.getcwd()
filename = cur_path + '/etc/passwd.txt'
fi = open(filename, 'r+')
str = name + ':' + passwd + ':' + group + '\n'
print('成功增加用户' + str + '\n')
fi.seek(0, 2)
fi.write(str)
fi.close()
else:
QMessageBox.warning(self,
"警告",
"用户已存在",
QMessageBox.Yes)
self.lineEdit.setFocus()
+

查询已有用户的实现

+

从passwd.txt中逐行读出

+
+

login

+
1
2
3
4
5
6
7
8
9
10
11
12
def readuser(self):
print('readuser')
cur_path = os.getcwd()
filename = cur_path + '/etc/passwd.txt'
fo = open(filename)
arrayofLines = fo.readlines()
names = ''
for line in arrayofLines:
line = line.strip()
listFromLine = line.split(':')
names = names + listFromLine[0] + '\n'
self.textEdit.setPlaceholderText(names)
+

删除用户的实现

+

从passwd.txt中逐行读出用户名,并与待删除用户比较,如果相同,则删除该行

+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def rmuser(self):
print(1)
cur_path = os.getcwd()
filename = cur_path + '/etc/passwd.txt'
rmName = self.lineEdit.text()
with open(filename, 'r',encoding="utf-8") as r:
lines = r.readlines()
lenl = len(lines)
with open(filename, 'w',encoding="utf-8") as w:
for line in lines:
l = line.strip()
listFromLine = l.split(':')
if rmName == listFromLine[0]:
print('删除用户' + rmName)
continue
if line == '\n':
print('find换行')
line = ''
w.write(line)
+
+

3. 普通用户功能实现

普通用户可以完成对合法权限文件的读取、增加内容(上写下读)以及创建文件的操作

+

login

+

读取文件内容

+

双击文件名
获取选中文件和当前用户的完整性级别
如果用户的级别低于文件,则读取文件内容

+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def readfile(self):
dict = self.getGrade()
fgrade = str(dict[self.file_path])
ugrade = self.lineEdit_2.text()
if ugrade >= fgrade:
print(ugrade+ ' 正在读取 '+fgrade)
filename = self.file_path
print(filename)
fr = open(filename)
lines = ''
arrayofLines = fr.readlines()
for line in arrayofLines:
lines += line
self.textEdit.setText(lines)
print('读取成功\n')
else:
QMessageBox.warning(self,
"警告",
"您的用户等级太高",
QMessageBox.Yes)
self.lineEdit.setFocus()
+

增加文件内容

+

双击文件名
获取选中文件和当前用户的完整性级别
如果用户的级别高于文件,则写入文件内容

+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def writefile(self):
dict = self.getGrade()
fgrade = dict[self.file_path]
ugrade = self.lineEdit_2.text()
print(ugrade + ' 正在写入 ' + fgrade)
if ugrade <= fgrade:
filename = self.file_path
str = self.textEdit.toPlainText()
print(str)
fo = open(filename, 'r+')
fo.seek(0, 2)
fo.write(str)
else:
QMessageBox.warning(self,
"警告",
"您的用户等级太低",
QMessageBox.Yes)
self.lineEdit.setFocus()
+

创建文件

+

获取当前用户名和输入的文件名
在当前路径下创建名为用户名的文件
并对新创建的文件与用户等级建立字典,新文件路径为key,用户等级为value
这个字典方便读写时判断等级高低

+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def touchfile(self):
urName = self.lineEdit.text()
filename = self.lineEdit_4.text()
cur_path = os.getcwd()
new_path = os.path.join(cur_path + '/file', urName)
print(urName)
if os.path.exists(new_path) == False:
os.mkdir(new_path)
os.chdir(new_path)
fr = open(filename, 'w')
key = (new_path + '/' + filename).replace('\\', '/')
fr.close()
os.chdir(cur_path)
fa = open('./etc/ac.txt', 'r')
a = fa.read()
if a == '':
dict = {}
else:
dict = eval(a)
dict[key] = self.lineEdit_2.text()
fr = open('./etc/ac.txt', 'w')
fr.write(str(dict))
fr.close()
fa.close()
+
+

五、心得体会:

六、改进部分:

+ +
+ + + + + + + + + + + +
+ + + +
+ + + +
+ +
+
+ + +
+ + + + + + + + + +
+ + + + + + + + + +
+
+ + + + +
+ + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2019/03/16/hello-world/index.html b/2019/03/16/hello-world/index.html index 4c76003d..579491aa 100644 --- a/2019/03/16/hello-world/index.html +++ b/2019/03/16/hello-world/index.html @@ -400,7 +400,7 @@ - 3 + 5 日志 @@ -413,7 +413,7 @@
- 2 + 3 标签
diff --git a/2019/03/16/qq数据库的加密解密/index.html b/2019/03/16/qq数据库的加密解密/index.html new file mode 100644 index 00000000..df350181 --- /dev/null +++ b/2019/03/16/qq数据库的加密解密/index.html @@ -0,0 +1,669 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + | 混元霹雳手 + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+
+
+ + +
+ + + + + + + + +
+ + + +
+ + + + + + + +
+ + + +

+ + + +
+ + + + + +
+ + + + + +

qq数据库采用简单加密——异或加密

数据获取:

DENGTA_META.xml—IMEI:867179032952446
databases/2685371834.db——数据库文件

+

解密方式:

明文msg_t 密文msg_Data key:IMEI
msg_t = msg_Data[i]^IMEI[i%15]

+

实验:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sqlite3

IMEI = '867179032952446'
conn = sqlite3.connect('2685371834.db')
c = conn.cursor()

def _decrypt(foo):
substr = ''
#print(len(foo))
for i in range(0,len(foo)):
substr += chr(ord(foo[i]) ^ ord(IMEI[i%15]))
return substr

#rem = c.execute("SELECT uin, remark, name FROM Friends")
Msg = c.execute("SELECT msgData, senderuin, time FROM mr_friend_0FC9764CD248C8100C82A089152FB98B_New")

for msg in Msg:
uid = _decrypt(msg[1])
print("\n"+uid+":")
try:
msgData = _decrypt(msg[0]).decode('utf-8')
print(msgData)
except:
pass

+

结果

+ + +
+ + + + + + + + + + + +
+ + + +
+ + + +
+ +
+
+ + +
+ + + + + + + + + +
+ + + + + + + + + +
+
+ + + + +
+ + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2019/03/16/wwifi半双工侧信道攻击学习笔记/index.html b/2019/03/16/wwifi半双工侧信道攻击学习笔记/index.html index b0d40384..17e03f66 100644 --- a/2019/03/16/wwifi半双工侧信道攻击学习笔记/index.html +++ b/2019/03/16/wwifi半双工侧信道攻击学习笔记/index.html @@ -488,8 +488,8 @@ Server -------wire----------|
-
@@ -498,6 +498,10 @@ Server -------wire----------|
+ +
@@ -573,7 +577,7 @@ Server -------wire----------| - 3 + 5 日志 @@ -586,7 +590,7 @@ Server -------wire----------|
- 2 + 3 标签
diff --git a/2019/03/16/小米固件工具mkxqimage/index.html b/2019/03/16/小米固件工具mkxqimage/index.html index a8d6d0c8..f199e5f6 100644 --- a/2019/03/16/小米固件工具mkxqimage/index.html +++ b/2019/03/16/小米固件工具mkxqimage/index.html @@ -353,8 +353,8 @@
-
@@ -432,7 +432,7 @@ - 3 + 5 日志 @@ -445,7 +445,7 @@
- 2 + 3 标签
diff --git a/archives/2019/03/index.html b/archives/2019/03/index.html index 26f52f1b..3f8ed55c 100644 --- a/archives/2019/03/index.html +++ b/archives/2019/03/index.html @@ -227,7 +227,7 @@ - 嗯..! 目前共计 3 篇日志。 继续努力。 + 嗯..! 目前共计 5 篇日志。 继续努力。 @@ -246,6 +246,41 @@ +
+
+ +

+ + + +

+ + + +
+
+ + + + + + + + + + + + + +
@@ -281,6 +316,41 @@ + + + + + + + + + + + + + + +
@@ -393,7 +463,7 @@ - 3 + 5 日志 @@ -406,7 +476,7 @@
- 2 + 3 标签
diff --git a/archives/2019/index.html b/archives/2019/index.html index 3830c6bb..3e7a9cee 100644 --- a/archives/2019/index.html +++ b/archives/2019/index.html @@ -227,7 +227,7 @@ - 嗯..! 目前共计 3 篇日志。 继续努力。 + 嗯..! 目前共计 5 篇日志。 继续努力。 @@ -246,6 +246,41 @@ + + + + + + + + + + + + + + +
@@ -281,6 +316,41 @@ + + + + + + + + + + + + + + +
@@ -393,7 +463,7 @@ - 3 + 5 日志 @@ -406,7 +476,7 @@
- 2 + 3 标签
diff --git a/archives/index.html b/archives/index.html index d4260deb..d71f0861 100644 --- a/archives/index.html +++ b/archives/index.html @@ -227,7 +227,7 @@ - 嗯..! 目前共计 3 篇日志。 继续努力。 + 嗯..! 目前共计 5 篇日志。 继续努力。 @@ -246,6 +246,41 @@ + + + + + + + + + + + + + + +
@@ -281,6 +316,41 @@ + + + + + + + + + + + + + + +
@@ -393,7 +463,7 @@ - 3 + 5 日志 @@ -406,7 +476,7 @@
- 2 + 3 标签
diff --git a/index.html b/index.html index d02983c7..1e3ff0dc 100644 --- a/index.html +++ b/index.html @@ -224,6 +224,129 @@ +
+ + + +
+ + + + + + + +
+ + + +

+ +

+ + + +
+ + + + + +
+ + + + + + + +

qq数据库采用简单加密——异或加密

数据获取:

DENGTA_META.xml—IMEI:867179032952446
databases/2685371834.db——数据库文件

+

解密方式:

明文msg_t 密文msg_Data key:IMEI
msg_t = msg_Data[i]^IMEI[i%15]

+

实验:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sqlite3

IMEI = '867179032952446'
conn = sqlite3.connect('2685371834.db')
c = conn.cursor()

def _decrypt(foo):
substr = ''
#print(len(foo))
for i in range(0,len(foo)):
substr += chr(ord(foo[i]) ^ ord(IMEI[i%15]))
return substr

#rem = c.execute("SELECT uin, remark, name FROM Friends")
Msg = c.execute("SELECT msgData, senderuin, time FROM mr_friend_0FC9764CD248C8100C82A089152FB98B_New")

for msg in Msg:
uid = _decrypt(msg[1])
print("\n"+uid+":")
try:
msgData = _decrypt(msg[0]).decode('utf-8')
print(msgData)
except:
pass

+

结果

+ + + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ +
+
+ + + +
+ + + + + + + + + + +
@@ -488,6 +611,247 @@ Server -------wire----------| +
+ + + +
+ + + + + + + +
+ + + +

+ +

+ + + +
+ + + + + +
+ + + + + + + +

基于python语言的BIBA模型图形界面实现

一、实验目的:

    +
  1. 查阅资料,了解biba安全模型的相关知识
  2. +
  3. 通过编程实现基于biba模型的完整性访问控制,进一步掌握biba模型的规则
  4. +
  5. 使用python语言实现,熟练pyqt的图形界面设计方法
  6. +
+
+

二、实验环境:

    +
  • 操作系统:Windows10
  • +
  • 工具版本:python3.7,pyqt5
  • +
+
+

三、实验原理:

1. 什么是安全模型

    +
  • 系统的元素
    +

    具有行为能力的主体
    不具有行为能力的客体

    +
    +
  • +
  • 系统的操作行为
    +

    可以执行的命令:读、写、执行

    +
    +
  • +
  • 对系统行为的约束方式
    +

    对行为的控制策略

    +
    +
  • +
  • 模型从抽象层次规定了系统行为和约束行为的方式
  • +
  • 模型往往用状态来表示
    +

    系统行为所依赖的环境
    行为对系统产生的效果

    +
    +

    2. biba完整性模型:

      +
    • 完整性威胁问题
      +

      完整性的威胁就是一个子系统在初始时刻认为不正常的修改行为;
      来源:内部&外部;
      类型:直接&间接

      +
      +
    • +
    +
  • +
+ + + + + + + + + + + + + + + + + +
外部的直接外部的间接内部的直接内部的间接
外部系统恶意地篡改另一个系统的数据或程序一个外部系统插入恶意的子程序修改自己的代码修改自己的指针
+
    +
  • biba模型的完整性定义
    +

    完整性级别高的实体对完整性低的实体具有完全的支配性,反之如果一个实体对另一个实体具有完全的控制权,说明前者完整性级别更高,这里的实体既可以是主体也可以是客体。
    完整性级别和可信度有密切的关系,完整级别越高,意味着可信度越高。

    +
    +
  • +
  • biba模型的规则
  • +
+
    +
  • 对于写和执行操作,有如下规则:
    +

    写规则控制
    当且仅当主体S的完整性级别大于或等于客体O的完整性级别时,主体S可以写客体O,一般称之为上写
    执行操作控制
    当且仅当主体S2的完整性级别高于或等于S1,主体S1可以执行主体S2。

    +
    +
  • +
  • 关于读操作,有不同的控制策略:
    +

    低水标模型
    任意主体可以读任意完整性级别的客体,但是如果主体读完整性级别比自己低的客体时,主体的完整性级别将为客体完整性级别,否则,主体的完整性级别保持不变。
    环模型
    不管完整性级别如何,任何主体都可以读任何客体
    严格完整性模型
    这个模型对读操作是根据主客体的完整性级别严格控制的,即只有完整性级别低或相等的主体才可以读完整性级别高的客体,称为下读

    +
    +
  • +
+

一般都是指毕巴严格完整性模型,总结来说是上写、下读

+
+

四、实验内容:

1. 用户登录实现

核对用户输入的账户密码与存储的是否匹配

+

login

+
    +
  • 从用户输入框获取账户和密码
  • +
  • 检查输入信息是否合法(为空)
  • +
  • 从password.txt中获取,并保存在列表listFromLine中
  • +
  • 检查输入的账户是否存在
  • +
  • 若存在,检查对应的密码是否正确
  • +
  • 若正确,判断是管理员还是普通用户,并跳转相应的界面

    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    def checkPass(self):
    nameIn = self.lineEdit.text()
    passwdIn = self.lineEdit_2.text()
    md5 = hashlib.md5()
    md5.update(passwdIn.encode("utf-8"))
    passwdIn = md5.hexdigest()
    if (nameIn == '') or (passwdIn == ''):
    QMessageBox.warning(self,
    "警告",
    "账号和密码不能为空",
    QMessageBox.Yes)
    self.lineEdit.setFocus()
    print(nameIn, passwdIn)
    fr = open('./etc/passwd.txt')
    arrayofLines = fr.readlines()
    numberofLines = len(arrayofLines)
    for line in arrayofLines:
    line = line.strip()
    listFromLine = line.split(':')
    name = listFromLine[0]
    if name == nameIn:
    numberofLines = -1
    passwd = listFromLine[1]
    if passwd == passwdIn:
    group = listFromLine[2]
    print("\n登录成功!\n")
    if name == 'root':
    print('root登录')
    rootUI.show()
    MainWindow.close()
    else:
    urName = nameIn
    mainUI.lineEdit.setText(urName)
    mainUI.lineEdit_2.setText(group)
    mainUI.show()
    MainWindow.close()
    else:
    QMessageBox.warning(self,
    "警告",
    "密码错误!",
    QMessageBox.Yes)
    self.lineEdit.setFocus()
    fr.close()
    return 0
    +
  • +
+
+

2. 管理员功能实现

管理员可以对用户进行增、删、查的操作

+

login

+

增加用户的实现

+
    +
  • 获取管理员输入的用户名、密码和用户等级
  • +
  • 将明文密码转换为md5值
  • +
  • 判断输入的账户是否已经存在以及是否为空
  • +
  • 如果没有问题,将其存入passwd.txt的末尾
  • +
+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def adduser(self):
print('开始添加')
name = self.lineEdit_4.text()
passwd = self.lineEdit_6.text()
md5 = hashlib.md5()
md5.update(passwd.encode("utf-8"))
passwd = md5.hexdigest()
group = self.comboBox.currentText()
self.name = name
if self.euxit():
if name == '' or passwd == '':
QMessageBox.warning(self,
"警告",
"账号和密码不能为空",
QMessageBox.Yes)
self.lineEdit.setFocus()
else:
cur_path = os.getcwd()
filename = cur_path + '/etc/passwd.txt'
fi = open(filename, 'r+')
str = name + ':' + passwd + ':' + group + '\n'
print('成功增加用户' + str + '\n')
fi.seek(0, 2)
fi.write(str)
fi.close()
else:
QMessageBox.warning(self,
"警告",
"用户已存在",
QMessageBox.Yes)
self.lineEdit.setFocus()
+

查询已有用户的实现

+

从passwd.txt中逐行读出

+
+

login

+
1
2
3
4
5
6
7
8
9
10
11
12
def readuser(self):
print('readuser')
cur_path = os.getcwd()
filename = cur_path + '/etc/passwd.txt'
fo = open(filename)
arrayofLines = fo.readlines()
names = ''
for line in arrayofLines:
line = line.strip()
listFromLine = line.split(':')
names = names + listFromLine[0] + '\n'
self.textEdit.setPlaceholderText(names)
+

删除用户的实现

+

从passwd.txt中逐行读出用户名,并与待删除用户比较,如果相同,则删除该行

+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def rmuser(self):
print(1)
cur_path = os.getcwd()
filename = cur_path + '/etc/passwd.txt'
rmName = self.lineEdit.text()
with open(filename, 'r',encoding="utf-8") as r:
lines = r.readlines()
lenl = len(lines)
with open(filename, 'w',encoding="utf-8") as w:
for line in lines:
l = line.strip()
listFromLine = l.split(':')
if rmName == listFromLine[0]:
print('删除用户' + rmName)
continue
if line == '\n':
print('find换行')
line = ''
w.write(line)
+
+

3. 普通用户功能实现

普通用户可以完成对合法权限文件的读取、增加内容(上写下读)以及创建文件的操作

+

login

+

读取文件内容

+

双击文件名
获取选中文件和当前用户的完整性级别
如果用户的级别低于文件,则读取文件内容

+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def readfile(self):
dict = self.getGrade()
fgrade = str(dict[self.file_path])
ugrade = self.lineEdit_2.text()
if ugrade >= fgrade:
print(ugrade+ ' 正在读取 '+fgrade)
filename = self.file_path
print(filename)
fr = open(filename)
lines = ''
arrayofLines = fr.readlines()
for line in arrayofLines:
lines += line
self.textEdit.setText(lines)
print('读取成功\n')
else:
QMessageBox.warning(self,
"警告",
"您的用户等级太高",
QMessageBox.Yes)
self.lineEdit.setFocus()
+

增加文件内容

+

双击文件名
获取选中文件和当前用户的完整性级别
如果用户的级别高于文件,则写入文件内容

+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def writefile(self):
dict = self.getGrade()
fgrade = dict[self.file_path]
ugrade = self.lineEdit_2.text()
print(ugrade + ' 正在写入 ' + fgrade)
if ugrade <= fgrade:
filename = self.file_path
str = self.textEdit.toPlainText()
print(str)
fo = open(filename, 'r+')
fo.seek(0, 2)
fo.write(str)
else:
QMessageBox.warning(self,
"警告",
"您的用户等级太低",
QMessageBox.Yes)
self.lineEdit.setFocus()
+

创建文件

+

获取当前用户名和输入的文件名
在当前路径下创建名为用户名的文件
并对新创建的文件与用户等级建立字典,新文件路径为key,用户等级为value
这个字典方便读写时判断等级高低

+
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def touchfile(self):
urName = self.lineEdit.text()
filename = self.lineEdit_4.text()
cur_path = os.getcwd()
new_path = os.path.join(cur_path + '/file', urName)
print(urName)
if os.path.exists(new_path) == False:
os.mkdir(new_path)
os.chdir(new_path)
fr = open(filename, 'w')
key = (new_path + '/' + filename).replace('\\', '/')
fr.close()
os.chdir(cur_path)
fa = open('./etc/ac.txt', 'r')
a = fa.read()
if a == '':
dict = {}
else:
dict = eval(a)
dict[key] = self.lineEdit_2.text()
fr = open('./etc/ac.txt', 'w')
fr.write(str(dict))
fr.close()
fa.close()
+
+

五、心得体会:

六、改进部分:

+ + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ +
+
+ + + +
+ + + + + + + + + + +
@@ -778,7 +1142,7 @@ Server -------wire----------| - 3 + 5 日志 @@ -791,7 +1155,7 @@ Server -------wire----------|
- 2 + 3 标签
diff --git a/tags/IOT/index.html b/tags/IOT/index.html index 399cb8b2..09a66fe5 100644 --- a/tags/IOT/index.html +++ b/tags/IOT/index.html @@ -303,7 +303,7 @@ - 3 + 5 日志 @@ -316,7 +316,7 @@
- 2 + 3 标签
diff --git a/tags/模型实现/index.html b/tags/模型实现/index.html new file mode 100644 index 00000000..7762bf0f --- /dev/null +++ b/tags/模型实现/index.html @@ -0,0 +1,538 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 标签: 模型实现 | 混元霹雳手 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/论文/index.html b/tags/论文/index.html index 2f90fdc3..a6613fe5 100644 --- a/tags/论文/index.html +++ b/tags/论文/index.html @@ -303,7 +303,7 @@ - 3 + 5 日志 @@ -316,7 +316,7 @@
- 2 + 3 标签