信息系统专题
班级 姓名
1.【202212嘉兴】
(1)B
(2)DE
(3)
①@a.route("/")
②encode(pwd)
2.【202302名校协】
(1)③⑤①②④
(2)pin1 或 p1、5
(3)①/input
②request.args.get(‘hum’)
(4)http://192.168.1.100:8080/input uid=1&hum=200 会
注:http://不写给2分,IP地址和端口号写对1分,参数写对1分
3.【202302七彩浙南】
(1)B
(2)http://192.168.113.5/login u=486896762&k=71
(3)①/login
②int(usr[i])–key
(4)A信息系统专题
班级 姓名
1.【202212嘉兴】小胡使用Python为某校开发了信息管理系统,登录该系统使用如图a所示的页面进行身份认证,密码由6位字母、数字、特殊符号等ASCII码字符组成。为了增强安全性,密码经过异或加密后再存入数据库。如图b所示,数据表中username保存的是用户名,password保存的是加密后的密码,例如用户Sam的密码为“123456”,密钥key为“t6f$Hk”,加密后保存至数据库的值为字符串“069004085016125093”。程序运行界面和部分程序代码如下:
import sqlite3
from flask import Flask, request, render_template
key='t6f$Hk' #密钥
a=Flask(__name__)
def encode(password): #对password加密
s = ""
for i in range(len(key)):
x = str(ord(key[i]) ^ ord(password[i])) #“^”为异或运算符
s+=('000'+x)[-3:] #x不足3位补前导0
return s
#用户名及加密后的密码均已保存至数据库中,代码略
①__________________ #设置主页面路由
def index():
return render_template("login.html") #显示登录页面
#用户单击登录按钮后执行以下视图函数
@a.route("/login")
def login():
usr=request.args.get("username")
pwd=request.args.get("password")
if usr=="" or pwd=="" or len(pwd)!=6: return "输入不正确,请重新输入!"
conn=sqlite3.connect("school.db") ; cur=conn.cursor()
sql=f"select * from users where username='{usr}' and password='{_____②_____}'"
cur.execute(sql) ; users=cur.fetchall()
cur.close() ; conn.close()
if users:
return '登录成功!'
else:
return '登录失败!'
if __name__=="__main__":
app.run('127.0.0.1',5000)
请回答下列问题:
(1)设计该系统的前期准备工作中,根据系统的功能要求,选择采用 B/S 架构,这一过程属于
(单选,填字母:A.需求分析 B.开发模式的选择 C.详细设计)。
(2)下列说法正确的是 (多选):
A访问该网站首页的地址为:http://127.0.0.1
B该系统的数据保存在sqlite数据库users中
C该系统采用 B/S 架构,用户名和密码保存在school数据表中
D为加强系统安全性,可将用户密码保存至数据库中时采用非对称加密算法
E使用Flask编写Web应用的流程为:导入框架模块、创建应用实例、编写路由和视图函数、启动Web应用
(3)在划线处填入正确的代码。
2.【202302名校协】市场上有出售智能花盆或智能盆栽等产品,这些产品大多能实时监测植物生长状态,通过网络获取花盆的环境信息,并对植物进行远程浇灌。小王利用micro:bit,结合土壤湿度传感器等,将家庭中常见的盆栽改造成智能盆栽。
(1)在搭建该信息系统前,需要进行前期准备的步骤依次为 。
①开发模式选择 ②概要设计 ③需求分析 ④详细设计 ⑤可行性分析
(2)硬件搭建。micro:bit利用土壤湿度传感器获取土壤湿度信息,通过IoT模块将数据传送至服务器端,并利用继电器控制水泵实现对植物的浇灌。“智能盆栽”系统的整体框架下图所示:
“智能终端”部分代码如下:
from microbit import *
import Obloq
#设置服务器参数、WiFi名称密码和当前盆栽的uid,并连接WiFi,代码略
while True:
hum=pin1.read_analog()
status, resp=Obloq.get("input uid="+str(uid)+"&hum="+str(hum), 2000)
if status==200:
if resp=='1': #1表示打开浇灌,0表示关闭浇灌
pin12.write_digital(1) ; sleep(5*1000) ; pin12.write_digital(0)
else:
display.scroll(str(status))
sleep(60*1000)
由以上代码可知,土壤湿度传感器接在智能终端的 口上,当盆栽需要浇水时,每次浇灌的时间为
秒。
(3)Web服务器端程序使用Flask框架编写,部分代码如下,请在划线处填入合适的代码。
#导入flask等相关的库,代码略
app=Flask(__name__)
@app.route('① ',methods=['GET'])
def insert():
uid=request.args.get('uid') #获取花盆编号值
data=float(② ) #获取土壤湿度值
value=300
if data>value:
water=0
else:
water=1
#将接收到的数据存入数据库,代码略
return str(water)
if __name__=='__main__':
app.run(host='192.168.1.100',port=8080)
(4)系统搭建好后,若uid为1的盆栽某次采集到的土壤湿度值为200,则将该值上传到服务器端的URL为:
,上传成功后,水泵 (选填:会/不会)浇灌盆栽。
3.【202302七彩浙南】某智能门禁系统的一个子系统功能是完成身份认证功能。智能终端通过用户刷卡或者指纹获取 用户 ID 数据,加密后发送到 Web 服务器,通过对比数据库中的用户信息完成身份认证并留下登 录记录。该子系统部分功能实现如下,请回答相关问题。
(1)该子系统架构图如图 a 所示,那么图中①处最合适的选项是 (单选,填字母:
A.交换机 / B.防火墙 / C.服务器)
(2)智能终端读取到用户ID后将加密后的ID和加密后密钥一起发送到服务器,部分程序如下,若密文是“486896762”,加密后密钥是“71”,那么系统发送数据的 URL是
。
from microbit import *
import random, Obloq
IP="192.168.113.5" ; PORT="80"
SSID="freeWiFi" ; PASSWORD="103103103"
#上述参数设置uart串口并用Obloq模块建立网络连接,代码略
Obloq.httpConfig(IP, PORT)
while True:
key=random.randint(3, 9) #随机产生密钥
enkey=ord("A")^key #加密后的密钥,如71,^表示异或运算
#读取身份证号信息并使用密钥key进行加密,
#加密后身份证保存在字符串idnum中,如486896762,代码略
err, res=Obloq.get("login u="+idnum+"&k="+str(enkey))
if err==200:
print("用户信息发送成功!")
sleep(5*1000)
(3)为了保证数据在网络传输过程中的安全,小林设计了如下简单加密算法,如图b所示:
①用户ID由数字字符组成,如“820230106”,采用替代加密,若密钥是 6,则用户 ID 的加密结果是“486896762”;
②由于密钥6也要在网络中传输,因此密钥也要加密,小林采用字符“A”的 ASCII 码进行简单异或加密,加密结果是65 6=71;
③接收端先对加密的密钥进行解密:71 65=6,然后用该密钥解密密文,结果是用户ID的明文“820230106”。
以下服务端程序实现了解密与用户身份验证过程,请将该算法补充完整。
from flask import Flask, render_template,request
app=Flask(__name__)
@app.route("/")
def index():
return render_template("home.html")
@app.route("① ",methods=["GET"])
def decode():
usr=request.args.get("u") # 接收到的用户 ID 密文,数字字符串格式
enkey=int(request.args.get("k")) # 接收到的已加密的密钥,整数格式
key=enkey^ord("A") # 对加密过的密钥进行解密
res=""
for i in range(len(usr)):
num=(② +10)%10
res=res+str(num)
(
#
根据解密后的用户信息查询数据库并验证,代码略
)
if __name__=="__main__":
app.run(host="0.0.0.0",port="80",debug=True)
(4)若系统数据库为“sys.db”,存储已授权用户信息的数据表为“users”,用户信息字段名为“userid”,则上述加框处查询用户信息的SQL语句是( )(单选,填字母)
A."SELECT * FROM users WHERE userid=%s"%res
B."SELECT * FROM sys WHERE usr=%s"%userid
C."SELECT * FROM sys WHERE userid='urs'"
D."SELECT * FROM users WHERE userid='res'"
4.关于信息系统,你还存在什么问题?