def handle_client(client_socket): if gl.get_value('_Xb') == None: _Xb = random.randint(_Q - 1000, _Q) gl.set_value('_Xb', _Xb) _Yb = pow(_A, gl.get_value('_Xb'), _Q) request = bytes.decode(client_socket.recv(1024)) if gl.get_value('key') == None: gl.set_value( 'key', str(pow(int(request[64:]), gl.get_value('_Xb'), _Q))[:16].rjust(16, '0')) # 因为是服务器端,所以只要程序运行,那么这个文件就不能改 if request[:64] == password: try: f = open((password), 'w') client_socket.send(bytes(sha256('Y') + str(_Yb), encoding='utf-8')) # 登录成功 except: print('文件初始化创建失败') else: request = crypto.aes_decode(request, gl.get_value('key')) if request[:4] == 'MSG=': try: f = open(('./' + password), 'w') f.write(request[4:]) client_socket.send( bytes(crypto.aes_encode('R', gl.get_value('key')), encoding='utf-8')) # 登录成功 except: print('写入文件失败') elif request[:4] == 'RMSG': try: f = open(('./' + password), 'r') msg = f.read() client_socket.send( bytes(crypto.aes_encode(msg, gl.get_value('key')), encoding='utf-8')) except: print('文件读取失败') f.close() client_socket.close()
def RC(): addr = gl.get_value('addr') port = gl.get_value('port') target_host = addr target_port = port client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((target_host, int(target_port))) msg = crypto.aes_encode('RMSG', gl.get_value('key')) client.send(bytes(msg, encoding='utf-8')) response = crypto.aes_decode(bytes.decode(client.recv(4096)), gl.get_value('key')) return response
def trans(newMessege): addr = gl.get_value('addr') port = gl.get_value('port') target_host = addr target_port = port client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((target_host, int(target_port))) msg = crypto.aes_encode('MSG=' + newMessege, gl.get_value('key')) client.send(bytes(msg, encoding='utf-8')) response = crypto.aes_decode(bytes.decode(client.recv(4096)), gl.get_value('key')) if response == 'R': return True else: return False
def upload(): username = session.get("username", "") password = session.get("password", "") agency, signer = login(username, password) if agency is None: return redirect("/agency") if request.method == "GET": return render_template("agency2-2.html", is_login = True, agency = agency, username = username) ent_name = request.form.get("ent-name") eng_list = request.form.get("eng-list", "") eng_list = [e for e in eng_list.split()] data_hash = request.form.get("data-hash") if ent_name is None: return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少生产企业名称") _,_,aal,_ = count_numbers() if aal < 3: return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少足够的审查实体,至少需要3家审查实体") enterprise = Enterprise.query.filter(Enterprise.username == ent_name).first() if enterprise is None: return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "生产企业名称错误") data_file = request.files.get("data-file") if data_file is None: return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少上传文件") if data_file.filename == "" : return render_template("agency2-2.html", is_login = True, agency = agency, username = username, fail_msg = "缺少上传文件") data_file_path = os.path.join(app.config["UPLOAD_FOLDER"], secure_filename(data_file.filename)) data_file.save(data_file_path) try: n = aal t = 3 key, shares = shamir_encode(t, n) enc_data_path = os.path.join(app.config["UPLOAD_FOLDER"], "enc-"+secure_filename(data_file.filename)) aes_encode(key, data_file_path, enc_data_path) data_file_addr = ipfs_client.add(enc_data_path) for i, audit in enumerate(Audit.query.all()): obj_data = IPFSObject(hash = data_file_addr["Hash"], name = secure_filename(data_file.filename), secret = shares[i][1].hex(), idx = shares[i][0]) audit.files.append(obj_data) db.session.add(obj_data) db.session.commit() except Exception as e: traceback(e) return render_template("agency2-2.html", is_login = True, agency = agency, username = username, succ_msg = "IPFS上传失败") try: res = call_contract(enterprise.contract_addr, "Enterprise", "update", args=[data_hash, data_file_addr["Hash"], to_checksum_address(agency.contract_addr), eng_list], signer = signer) enterprise.evaluation_addr = res[0] db.session.commit() res = call_contract(enterprise.evaluation_addr, "ReportEvaluation", "businessUpdate", args = [] , signer = signer) licenseAddr = res[0] enterprise.license_addr = licenseAddr db.session.commit() except Exception: traceback.print_exc() return render_template("agency2-2.html", is_login = True, agency = agency, username = username, succ_msg = "智能合约调用失败") return render_template("agency2-2.html", is_login = True, agency = agency, username = username, succ_msg = "添加成功")
def enterprise_upload(): username = session.get("username", "") password = session.get("password", "") enterprise, signer = login(username, password) if enterprise is None: return redirect("/enterprise") if request.method == "GET": return render_template("enterprise2-1.html", is_login=True, enterprise=enterprise, username=username) data_hash = request.form.get("data-hash") data_file = request.files.get("data-file") if data_file is None: return render_template("enterprise2-1.html", is_login=True, enterprise=enterprise, username=username, fail_msg="缺少上传文件") if data_file.filename == "": return render_template("enterprise2-1.html", is_login=True, enterprise=enterprise, username=username, fail_msg="缺少上传文件") data_file_path = os.path.join(app.config["UPLOAD_FOLDER"], secure_filename(data_file.filename)) data_file.save(data_file_path) try: _, _, n, _ = count_numbers() t = 3 key, shares = shamir_encode(t, n) enc_data_path = os.path.join( app.config["UPLOAD_FOLDER"], "enc-" + secure_filename(data_file.filename)) aes_encode(key, data_file_path, enc_data_path) data_file_addr = ipfs_client.add(enc_data_path) for i, audit in enumerate(Audit.query.all()): obj_data = IPFSObject(hash=data_file_addr["Hash"], name=secure_filename(data_file.filename), secret=shares[i][1].hex(), idx=shares[i][0]) audit.files.append(obj_data) db.session.add(obj_data) db.session.commit() except Exception as e: traceback(e) return render_template("enterprise2-1.html", is_login=True, enterprise=enterprise, username=username, succ_msg="IPFS上传失败") try: call_contract(enterprise.contract_addr, "Enterprise", "updateData", args=[data_hash, data_file_addr["Hash"]], signer=signer) except Exception as e: traceback(e) return render_template("enterprise2-1.html", is_login=True, enterprise=enterprise, username=username, succ_msg="智能合约调用失败") return render_template("enterprise2-1.html", is_login=True, enterprise=enterprise, username=username, succ_msg="添加成功")