Update users set Password="000000" where age=11
水质情况 |
水位情况 |
操作 |
水质差 |
任意水位 |
净水 |
水质中 |
水位<70 |
注水 |
水质优 |
水位<50 |
注水 |
其它情况都不进行操作 |
序号 |
访问地址 |
功能说明 |
1 |
/ |
主页,显示水质、水位情况 |
2 |
/water?t=注水 |
t为注水(或净水),实现“注水”(或净水)操作 |
3 |
/get?id=2 |
获取传感器 id 为 2 的所有数据 |
4 |
/view?id=1 |
显示 id 为 1 的传感器数据折线图 |
图 a
图 b
micro:bit 智能终端部分代码如下:
from microbit import *
import Obloq
IP="192.168.0.12" ; PORT="8080"
SSID="smart"; PASSWORD="12345678"
uart.init(baudrate=115200,bits=8, parity=None, stop=1,tx=pin1,rx=pin0) while Obloq.connectWifi(SSID,PASSWORD,10000)!= True:
display.show (".")
display.scroll(Obloq.ifconfig())
Obloq.httpSet(IP,PORT)
while True:
hum=pin8.read_analog ()
errno,resp=Obloq.get("input?id=1&hum="+str(hum),10000)
if errno==200:
display.scroll(str(resp))
#若湿度低于阈值,则开启喷水装置, 代码略
else:
display.scroll(str(errno))
sleep(10000)
图a
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)
图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)