图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)