def handleParam(self, sampling): "将列表转化为字符串" _aparam = NetSocketFun.NetPackMsgBody(sampling[0]) _ahash = NetSocketFun.NetPackMsgBody(sampling[1]) _bparam = NetSocketFun.NetPackMsgBody(sampling[2]) _bhash = NetSocketFun.NetPackMsgBody(sampling[3]) return _aparam, _ahash, _bparam, _bhash
def packMsgBody(self, fddata): "将会话密钥与A组参数用公钥加密,将采样hash用私钥加密(签名)" if fddata.GetData("threadtype") == CommonData.ThreadType.CONNECTAP: _agroup = self.APgetAgroupHashAndParam(fddata) elif fddata.GetData("threadtype") == CommonData.ThreadType.ACCETPNO: _agroup = self.NOgetAgroupHashAndParam(fddata) self.deltempFile(fddata) _cfd = ConfigData.ConfigData() _rsa = Rsa.Rsa(_cfd.GetKeyPath()) msglist = (str(fddata.GetData("fddatakey")), ) + _agroup[0] _plaintext = NetSocketFun.NetPackMsgBody(msglist) _pubkeyMsg = _rsa.EncryptByPubkey(_plaintext.encode("ascii"), fddata.GetData("peername")) _hbs = HashBySha1.HashBySha1() _sign = _rsa.SignByPrikey( _hbs.GetHash(_agroup[1].encode("ascii"), MagicNum.HashBySha1c.HEXADECIMAL)) msglist = [_pubkeyMsg, _sign, _agroup[1].encode("ascii")] _msgbody = NetSocketFun.NetPackMsgBody(msglist) showmsg = "发送采样结果:\n(1)A组参数:\n(帧总数,分组参数,帧间隔位数,混沌初值,分支参数)\n(".decode("utf8") + \ ",".join(_agroup[0]) + ")\n(2)A组采样:".decode("utf8") + \ CommonData.MsgHandlec.SHOWPADDING.join(NetSocketFun.NetUnPackMsgBody(_agroup[1])) \ + "\n(3)A组采样签名:".decode("utf8") + _sign showmsg += "\nCP用AP的公钥加密采样参数A" showmsg += "\nCP用其私钥加密比特串承诺值" showmsg += "\nCP发送加密的A组参数和加密的比特串承诺值,以及公钥加密TID发送给AP" showmsg += "\n等待文件验证..." self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True) return _msgbody
def verifyMsgSign(self, msg, sign, fddata, th): "如果验证成功则发送公钥,否则发送验证失败并关闭该线程" _cfg = ConfigData.ConfigData() _rsa = Rsa.Rsa(_cfg.GetKeyPath()) if self.verify(_rsa, msg[0], sign[0], fddata) == False or self.verify( _rsa, msg[1], sign[1], fddata) == False: msghead = self.packetMsg(MagicNum.MsgTypec.IDENTITYVERIFYFAILED, 0) fddata.SetData("outdata", msghead) th.ModifyInToOut(fddata.GetData("sockfd")) else: #生成自己的会话密钥 _dhkey = DiffieHellman.DiffieHellman(string.atol(msg[0])) from CryptoAlgorithms import HashBySha1 _hbs = HashBySha1.HashBySha1() fddata.SetData( "fddatakey", _hbs.GetHash(str(_dhkey.getKey(string.atol(msg[1]))), MagicNum.HashBySha1c.HEXADECIMAL)) _dhpubkey = str(_dhkey.getPubkey()) msglist = [_dhpubkey, _rsa.SignByPrikey(_dhpubkey)] msgbody = NetSocketFun.NetPackMsgBody(msglist) msghead = self.packetMsg(MagicNum.MsgTypec.SENDDHPUBKEY, len(msgbody)) fddata.SetData("outdata", msghead + msgbody) th.ModifyInToOut(fddata.GetData("sockfd"))
def HandleMsg(self,bufsize,fddata,th): if not fddata.GetData("currentbytes") and fddata.threadtype != CommonData.ThreadType.CONNECTAP: _cfg = ConfigData.ConfigData() _dir = _cfg.GetMediaPath() + "/auditserver/" recvbuffer = NetSocketFun.NetSocketRecv(fddata.GetData("sockfd"),bufsize) fddata.SetData("control.filename",_dir + NetSocketFun.NetUnPackMsgBody(recvbuffer)[0]) if not fddata.GetData("currentbytes"): self.handleFileBegin(bufsize, fddata) _filebuffer = fddata.GetData("file").read(CommonData.MsgHandlec.FILEBLOCKSIZE) fddata.SetData("currentbytes",fddata.GetData("currentbytes") + len(_filebuffer)) msgbody = NetSocketFun.NetPackMsgBody([_filebuffer]) if fddata.GetData("currentbytes") == fddata.totalbytes: msghead = self.packetMsg(MagicNum.MsgTypec.SENDFILEOVER,len(msgbody)) fddata.GetData("file").close() fddata.SetData("currentbytes",0) _filename = fddata.GetData("filename")[-fddata.GetData("filename")[::-1].index("/"):].encode("utf-8") filesize = float(fddata.GetData("totalbytes")) / (1024 * 1024) showmsg = "文件发送完毕:\n(1)文件名:" + _filename + "\n(2)文件大小(MB):" + str(filesize) self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT,showmsg,True) else: msghead = self.packetMsg(MagicNum.MsgTypec.SENDFILEBUFFER,len(msgbody)) fddata.SetData("outdata", msghead + msgbody) th.ModifyInToOut(fddata.GetData("sockfd"))
def ReqConnect(self, name, psw): "请求登录" msglist = [MagicNum.UserTypec.CPUSER, name, psw] _msgbody = NetSocketFun.NetPackMsgBody(msglist) _msghead = struct.pack(CommonData.MsgHandlec.MSGHEADTYPE, MagicNum.MsgTypec.REQLOGINMSG, len(_msgbody)) NetSocketFun.NetSocketSend(self.__Sockfd, _msghead + _msgbody)
def HandleMsg(self,bufsize,session): "发送迪菲参数p和公钥,及该消息的签名" msglist = self.getDhpAndga(session) msgbody = NetSocketFun.NetPackMsgBody(msglist) msghead = self.packetMsg(MagicNum.MsgTypec.SENDDHPANDPUBKEY ,len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd,msghead + msgbody) if not session.peername: session.peername = "auditserver"
def packMsgBody(self, session): "将会话密钥与A组参数用公钥加密,将特征提取hash用私钥加密(签名)" if session.threadtype == CommonData.ThreadType.CONNECTAP: _agroup = self.APgetAgroupHashAndParam(session) elif session.threadtype == CommonData.ThreadType.ACCETPNO: _agroup = self.NOgetAgroupHashAndParam(session) import os _dir = session.filename _meidaPath = self.__mediapath + "/auditserver/" + _dir[-_dir[::-1]. index("/"):] filesize = float(os.path.getsize(_meidaPath)) / (1024 * 1024) showmsg = "特征提取完成:\n(1)I帧总数:" + self.getFrameNum(_dir[-_dir[::-1].index("/"):]) + \ "\n(2)文件大小(MB):" + str(filesize) self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True) self.deltempFile(session) _cfd = ConfigData.ConfigData() _rsa = Rsa.Rsa(_cfd.GetKeyPath()) msglist = (str(session.sessionkey), ) + _agroup[0] _plaintext = NetSocketFun.NetPackMsgBody(msglist) _pubkeyMsg = _rsa.EncryptByPubkey(_plaintext.encode("ascii"), session.peername) _hbs = HashBySha1.HashBySha1() _sign = _rsa.SignByPrikey( _hbs.GetHash(_agroup[1].encode("ascii"), MagicNum.HashBySha1c.HEXADECIMAL)) msglist = [_pubkeyMsg, _sign, _agroup[1].encode("ascii")] _msgbody = NetSocketFun.NetPackMsgBody(msglist) showmsg = "发送特征提取结果:\n(1)A组参数:\n(帧总数,分组参数,帧间隔位数,混沌初值,分支参数)\n(".decode("utf8") + \ ",".join(_agroup[0]) + ")\n(2)A组特征提取:".decode("utf8") + \ CommonData.MsgHandlec.SHOWPADDING.join(NetSocketFun.NetUnPackMsgBody(_agroup[1])) \ + "\n(3)A组特征提取签名:".decode("utf8") + _sign showmsg += "\nCP用AP的公钥加密特征提取参数A" showmsg += "\nCP用其私钥加密比特串承诺值" showmsg += "\nCP发送加密的A组参数和加密的比特串承诺值,以及公钥加密TID发送给AP" showmsg += "\n等待文件验证..." self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True) return _msgbody
def HandleMsg(self, bufsize, fddata, th): "发送迪菲参数p和公钥,及该消息的签名" msglist = self.getDhpAndga(fddata) msgbody = NetSocketFun.NetPackMsgBody(msglist) msghead = self.packetMsg(MagicNum.MsgTypec.SENDDHPANDPUBKEY, len(msgbody)) fddata.SetData("outdata", msghead + msgbody) th.ModifyInToOut(fddata.GetData("sockfd")) if not fddata.GetData("peername"): fddata.SetData("peername", "auditserver")
def ReqRegister(self, name, psw, ip, port): "请求注册" _rke = RsaKeyExchange.RsaKeyExchange() _rke.GenerateRsaKey() _pkeystr = _rke.GetPubkeyStr("own") msglist = [name, psw, ip, port, _pkeystr] _msgbody = NetSocketFun.NetPackMsgBody(msglist) _msghead = struct.pack(CommonData.MsgHandlec.MSGHEADTYPE, MagicNum.MsgTypec.REQREGISTERMSG, len(_msgbody)) NetSocketFun.NetSocketSend( self.__Sockfd, _msghead + _msgbody.decode('gbk').encode("utf-8"))
def ReqAudit(self, filename): "请求审核" self.filename = filename _filename = filename[-filename[::-1].index("/"):].encode("utf-8") _msgbody = NetSocketFun.NetPackMsgBody([_filename]) _msghead = struct.pack(CommonData.MsgHandlec.MSGHEADTYPE, MagicNum.MsgTypec.REQAUDITMSG, len(_msgbody)) NetSocketFun.NetSocketSend(self.__Sockfd, _msghead + _msgbody) import wx from wx.lib.pubsub import Publisher wx.CallAfter(Publisher().sendMessage, CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, ["请求审核文件(" + _filename + ")".encode("utf8"), False])
def HandleMsg(self, bufsize, session): "返回登录结果,并保存用户名" recvmsg = NetSocketFun.NetSocketRecv(session.sockfd, bufsize) _loginmsg = NetSocketFun.NetUnPackMsgBody(eval(recvmsg))[0] _res = self.verifyUser(_loginmsg[0], _loginmsg[1]) if _res != False: msgbody = NetSocketFun.NetPackMsgBody([str(_res)]) msghead = self.packetMsg(MagicNum.MsgTypec.LOGINSUCCESS, len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd, msghead + msgbody) session.peername = _loginmsg[0] showmsg = session.peername + "登录成功" else: msghead = self.packetMsg(MagicNum.MsgTypec.LOGINFAIL, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead) showmsg = session.peername + "登录失败" self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True)
def HandleMsg(self, bufsize, fddata, th): "返回登录结果,并保存用户名" recvmsg = NetSocketFun.NetSocketRecv(fddata.GetData("sockfd"), bufsize) _loginmsg = NetSocketFun.NetUnPackMsgBody(eval(recvmsg))[0] _res = self.verifyUser(_loginmsg[0], _loginmsg[1]) if _res != False: msgbody = NetSocketFun.NetPackMsgBody([str(_res)]) msghead = self.packetMsg(MagicNum.MsgTypec.LOGINSUCCESS, len(msgbody)) fddata.SetData("outdata", msghead + msgbody) th.ModifyInToOut(fddata.GetData("sockfd")) fddata.SetData("peername", _loginmsg[0]) showmsg = fddata.GetData("peername") + "登录成功" else: msghead = self.packetMsg(MagicNum.MsgTypec.LOGINFAIL, 0) fddata.SetData("outdata", msghead) th.ModifyInToOut(fddata.GetData("sockfd")) showmsg = fddata.GetData("peername") + "登录失败" self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True)
def NOgetAgroupHashAndParam(self, fddata): "得到数据库中存放的A组参数和hash" _db = MediaTable.MediaTable() _db.Connect() _dir = fddata.GetData("filename") _filename = _dir[-_dir[::-1].index("/"):] _res = _db.searchMedia(_filename) showmsg = "正在采样 ..." self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg) from VideoSampling import ExecuteFfmpeg, GetVideoSampling _meidaPath = self.__mediapath + "/auditserver/" + _dir[-_dir[::-1]. index("/"):] _efm = ExecuteFfmpeg.ExecuteFfmpeg(_meidaPath) _efm.Run() _efm.WaitForProcess() import os filesize = float(os.path.getsize(_meidaPath)) / (1024 * 1024) showmsg = "采样完成:\n(1)总帧数:" + self.getFrameNum(_dir[-_dir[::-1].index("/"):]) + \ "\n(2)文件大小(MB):" + str(filesize) self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, showmsg, True) _sparam = NetSocketFun.NetUnPackMsgBody(_res[0][1]) import string _iparam = [string.atoi(s) for s in _sparam[:3] ] + [string.atof(s) for s in _sparam[3:]] _cgvs = GetVideoSampling.GetVideoSampling( _filename[:_filename.index(".")], *_iparam) try: self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT, "A组采样过程:", True) return NetSocketFun.NetUnPackMsgBody( _res[0][1]), NetSocketFun.NetPackMsgBody(_cgvs.GetSampling()) except: return NetSocketFun.NetUnPackMsgBody(_res[0][1]), ""
def HandleMsg(self, bufsize, session): "返回注册信息并保存用户名" recvmsg = NetSocketFun.NetSocketRecv(session.sockfd, bufsize) _loginmsg = NetSocketFun.NetUnPackMsgBody(recvmsg) + [ MagicNum.CPUserTablec.UNACCEPT ] if self.verifyUser(_loginmsg[0]) == False: restype = MagicNum.MsgTypec.REGISTERFAIL msghead = self.packetMsg(restype, 0) NetSocketFun.NetSocketSend(session.sockfd, msghead) else: restype = MagicNum.MsgTypec.REGISTERSUCCESSMSG self.addNewCPUser(_loginmsg[:-2] + _loginmsg[-1:]) session.name = _loginmsg[0] from CryptoAlgorithms import RsaKeyExchange _rke = RsaKeyExchange.RsaKeyExchange() _rke.WritePubkeyStr(session.name, _loginmsg[-2]) msgbody = NetSocketFun.NetPackMsgBody([_rke.GetPubkeyStr("own")]) msghead = self.packetMsg(restype, len(msgbody)) NetSocketFun.NetSocketSend( session.sockfd, msghead + msgbody.decode('gbk').encode("utf-8"))
def HandleMsg(self, bufsize, fddata, th): "返回注册信息并保存用户名" recvmsg = NetSocketFun.NetSocketRecv(fddata.GetData("sockfd"), bufsize) _loginmsg = NetSocketFun.NetUnPackMsgBody(recvmsg) + [ MagicNum.CPUserTablec.UNACCEPT ] if self.verifyUser(_loginmsg[0]) == False: restype = MagicNum.MsgTypec.REGISTERFAIL msghead = self.packetMsg(restype, 0) fddata.SetData("outdata", msghead) th.ModifyInToOut(fddata.GetData("sockfd")) else: restype = MagicNum.MsgTypec.REGISTERSUCCESSMSG self.addNewCPUser(_loginmsg[:-2] + _loginmsg[-1:]) fddata.SetData("peername", _loginmsg[0]) from CryptoAlgorithms import RsaKeyExchange _rke = RsaKeyExchange.RsaKeyExchange() _rke.WritePubkeyStr(fddata.GetData("name"), _loginmsg[-2]) msgbody = NetSocketFun.NetPackMsgBody([_rke.GetPubkeyStr("own")]) msghead = self.packetMsg(restype, len(msgbody)) fddata.SetData("outdata", msghead + msgbody.decode('gbk').encode("utf-8")) th.ModifyInToOut(fddata.GetData("sockfd"))
def HandleMsg(self,bufsize,session): if not session.currentbytes and session.threadtype != CommonData.ThreadType.CONNECTAP: _cfg = ConfigData.ConfigData() _dir = _cfg.GetMediaPath() + "/auditserver/" recvbuffer = NetSocketFun.NetSocketRecv(session.sockfd,bufsize) session.control.filename = _dir + NetSocketFun.NetUnPackMsgBody(recvbuffer)[0] if not session.currentbytes: self.handleFileBegin(bufsize, session) _filebuffer = session.file.read(CommonData.MsgHandlec.FILEBLOCKSIZE) session.currentbytes += len(_filebuffer) msgbody = NetSocketFun.NetPackMsgBody([_filebuffer]) if session.currentbytes == session.totalbytes: msghead = self.packetMsg(MagicNum.MsgTypec.SENDFILEOVER,len(msgbody)) session.file.close() session.currentbytes = 0 _filename = session.filename[-session.filename[::-1].index("/"):].encode("utf-8") filesize = float(session.totalbytes) / (1024 * 1024) showmsg = "文件发送完毕:\n(1)文件名:" + _filename + "\n(2)文件大小(MB):" + str(filesize) self.sendViewMsg(CommonData.ViewPublisherc.MAINFRAME_APPENDTEXT,showmsg,True) else: msghead = self.packetMsg(MagicNum.MsgTypec.SENDFILEBUFFER,len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd, msghead + msgbody)
def computeSingleSampling(self, fddata, param): _filename = fddata.GetData( "filename")[:fddata.GetData("filename").index(".")] _gvs = GetVideoSampling.GetVideoSampling(_filename, *param) return NetSocketFun.NetPackMsgBody(_gvs.GetSampling())
def HandleMsg(self, bufsize, session): _permission = self.getUserPermission(session.peername) msgbody = NetSocketFun.NetPackMsgBody([str(_permission)]) msghead = self.packetMsg(MagicNum.MsgTypec.LOGINSUCCESS, len(msgbody)) NetSocketFun.NetSocketSend(session.sockfd, msghead + msgbody)
def computeSingleSampling(self, session, param): _filename = session.filename[:session.filename.index(".")] _gvs = GetVideoSampling.GetVideoSampling(_filename, *param) return NetSocketFun.NetPackMsgBody(_gvs.GetSampling())
def HandleMsg(self, bufsize, fddata, th): _permission = self.getUserPermission(fddata.GetData("peername")) msgbody = NetSocketFun.NetPackMsgBody([str(_permission)]) msghead = self.packetMsg(MagicNum.MsgTypec.LOGINSUCCESS, len(msgbody)) fddata.SetData("outdata", msghead + msgbody)