一种利用多线程来处理鉴权的方法及装置与流程

文档序号:11778436阅读:159来源:国知局
一种利用多线程来处理鉴权的方法及装置与流程

本申请涉及通信技术领域,尤其涉及一种利用多线程来处理鉴权的方法及装置。



背景技术:

目前,视频直播是利用互联网及流媒体技术进行直播。具体来说,视频内容的提供方(例如主播)提供的视频流地址被第三方平台获取,从而可以不通过直播网站直接观看视频,即绕过了直播网站的视频播放器提供的视频播放,从而减少了视频网站的流量。而由于上述这种绕过了视频播放器的播放方式,容易遭到hack(黑客)的攻击。例如,黑客通过调试分析指标平台的视频流地址的鉴权方法,从而可以破解得到如何生成视频流地址的方法,进而获取到视频内容的提供方提供的视频流,并绕开平台的检测。故而,本发明的视频流地址鉴权存在安全性低、容易遭受攻击的技术问题。



技术实现要素:

本发明了提供了一种利用多线程来处理鉴权的方法及装置,以解决本发明的视频流地址鉴权存在安全性低、容易遭受攻击的技术问题。本发明对视频流地址进行了鉴权验证,从提高阻扰黑客分析我们的视频流鉴权方法着手,提高其被分析的难度,从而保护视频流地址鉴权方法的安全性。

为解决上述技术问题,本发明提供了一种利用多线程来处理鉴权的方法,所述方法包括:

获得用于请求访问服务器的访问请求中的n个鉴权要素和由m个加密函数段组成的加密函数,其中,所述加密函数用于对所述访问请求进行加密,n、m为正整数;

将所述n个鉴权要素分别封装为对应的第一任务数据结构,并分配到多线程的任务线程队列中,其中,在所述多线程中,每个线程具有各自不同的任务线程队列、各自不同的线程函数以及各自不同的处理时序;

将所述m个加密函数段分别封装为对应的第二任务数据结构,并分配到所述多线程的任务线程队列中;

通过所述多线程中的各个线程调用各自对应的线程函数分别从各自对应的任务线程队列中获取到所述第一任务数据结构和/或所述第二任务数据结构进行处理,然后传输给所述服务器。

优选的,所述n个鉴权要素至少包括:所述客户端登陆时的标记,所述客户端的当前系统时间,所述客户端请求的房间,所述客户端的当前ip,所述客户端的设备唯一id信息。

优选的,所述将所述n个鉴权要素分别封装为对应的第一任务数据结构,并分配到多线程的任务线程队列中,具体包括:

将所述n个鉴权要素对应的第一任务数据结构随机分配到多线程的任务线程队列中。

优选的,所述将所述n个鉴权要素分别封装为对应的第一任务数据结构,并分配到多线程的任务线程队列中,具体包括:

判断所述n个第一任务数据结构中是否具有相关联的第一任务数据结构;

若有,则将所述相关联的第一任务数据结构按照关联关系分配到对应的任务线程队列中,并将对应的任务线程队列按照所述关联关系进行关联。

优选的,所述将所述n个鉴权要素分别封装为对应的第一任务数据结构,并分配到多线程的任务线程队列中之后,包括:

将所述n个第一任务数据结构再次一并进行封装,获得第一总任务数据结构;

将所述第一总任务数据结构分配到所述多线程中的任务线程队列中;

将所述第一总任务数据结构对应的任务线程队列和所述n个第一任务数据结构对应的任务线程队列进行关联。

优选的,所述将所述m个加密函数段分别封装为对应的第二任务数据结构,并分配到所述多线程的任务线程队列中,包括:

将所述m个加密函数段对应的第二任务数据结构随机分配到所述多线程的任务线程队列中。

优选的,所述将所述m个加密函数段分别封装为对应的第二任务数据结构,并分配到所述多线程的任务线程队列之后,包括:

将所述m个加密函数段对应的第二任务数据结构一并再次封装为第二总任务数据结构;

将所述第二总任务数据结构分配到所述多线程中的任务线程队列中;

将所述第二总任务数据结构对应的第二任务线程队列和所述m个第二任务数据结构对应的任务线程队列进行关联。

本发明公开了一种利用多线程来处理鉴权的装置,包括:

获得模块,用于获得用于请求访问服务器的访问请求中的n个鉴权要素和由m个加密函数段组成的加密函数,其中,所述加密函数用于对所述访问请求进行加密,n、m为正整数;

第一封装模块,用于将所述n个鉴权要素分别封装为对应的第一任务数据结构,并分配到多线程的任务线程队列中,其中,在所述多线程中,每个线程具有各自不同的任务线程队列、各自不同的线程函数以及各自不同的处理时序;

第二封装模块,用于将所述m个加密函数段分别封装为对应的第二任务数据结构,并分配到所述多线程的任务线程队列中;

处理模块,用于通过所述多线程中的各个线程调用各自对应的线程函数分别从各自对应的任务线程队列中获取到所述第一任务数据结构和/或所述第二任务数据结构进行处理,然后传输给所述服务器。

本发明公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。

本发明公开了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。

通过本发明的一个或者多个技术方案,本发明具有以下有益效果或者优点:

本发明公开了一种利用多线程来处理鉴权的方法及装置,先获得用于请求访问服务器的访问请求中的n个鉴权要素和由m个加密函数段组成的加密函数,然后对所述n个鉴权要素、m个加密函数段分别进行封装,并分配到所述多线程的任务线程队列中,通过多线程各自进行处理,由于每个线程具有各自不同的任务线程队列、各自不同的线程函数以及各自不同的处理时序,因此当一个线程停止时另一个线程可能还在执行,故而本发明使用多线程处理鉴权,能够提高鉴权方法被分析的难度,从而保护鉴权方法的安全性。

附图说明

图1为本发明实施例中一种利用多线程来处理鉴权的方法的流程图;

图2为本发明实施例中一种利用多线程来处理鉴权的装置的示意图。

具体实施方式

目前来说,通常编写的视频流地址的鉴权方法使用的是单线程的计算方法,那么hack调试起来则会相对于更为容易,他顺着方法的执行流程一步步跟踪则可以分成出方法的实现原理。

而在具体的实施过程中,在进行鉴权的过程中,本发明实施例首先会生成请求访问服务器的访问请求,然后利用加密函数对其进行加密,并发送给服务器进行鉴权,而本发明最主要的目的,在客户端发起鉴权的过程中,将其分为独立的多个小任务,然后每个小任务随机投入到多线程中去处理,由于多线程用于提高计算性能优化程序结构,充分利用了中央处理器cpu的多核,故而本发明则使用多线程的思路来处理视频流地址的鉴权,因为即使是在开发代码中调式多线程遇到的问题也会比较困难,所以本发明基于这样的设计,使得鉴权方法在多线程调试下会非常复杂。多线程的特点是每个线程所执行的代码和环境是不一样的(每个线程有各自不同的线程函数来让该线程去执行相应的逻辑),当一个线程停止时另一个线程可能还在执行,他的执行时序是不固定的,而单线程则执行时序是固定的。故而,本发明从提高阻扰黑客分析我们的视频流鉴权方法着手,提高其被分析的难度,从而保护视频流地址鉴权方法的安全性。

为了使本申请所属技术领域中的技术人员更清楚地理解本申请,下面结合附图,通过具体实施例对本申请技术方案作详细描述。

参看图1,本发明公开了一种利用多线程来处理鉴权的方法,该方法包括:

步骤11,获得用于请求访问服务器的访问请求中的n个鉴权要素和由m个加密函数段组成的加密函数。

在具体的实施过程中,本发明的服务器比如个应用后台服务器并且包括但不限于是数据中心、虚拟机等等。例如xx直播的视频流服务器,当然还有其他服务器。

而本发明的客户端是用户侧使用的各类电子设备,例如智能手机、pad、电脑等等。

而在客户端给服务器发送访问请求时,该访问请求中会包含n个鉴权要素,其中,n为正整数。本发明实施例不限制n的具体数目。

鉴权要素,是访问请求中携带的一些特定的参数,根据访问请求的不同会不同,例如,如果服务器为视频服务器,而客户端为了访问视频服务器,则会事先获得所述客户端用于访问视频流服务器的视频访问请求中的n个鉴权要素,其中,所述n个鉴权要素至少包括:所述客户端登陆时的标记token,所述客户端的当前系统时间,所述客户端请求的房间roomid,所述客户端的当前ip,所述客户端的设备唯一id信息。

举例来说,当观众点击观看某个房间视频时,首先会向视频流服务器发送请求以获取该房间的视频流地址。其中,在发送请求中会携带上客户端登陆时的标记token,客户端的当前系统时间,客户端请求的房间roomid,客户端的当前ip,客户端的设备唯一id信息等等。

再例如,除了获得客户端用于请求访问服务器的访问请求中的n个鉴权要素,还可获得所述客户端用于访问服务器的视频访问请求中的m段加密函数段,其中,所述m段加密函数段构成一加密函数。其中,所述加密函数用于对所述访问请求进行加密,n、m为正整数且互不影响,n、m的数目可相等或者不等。

加密函数通常都会执行非常多的轮数,故而可以将加密函数按照轮数拆分。每一轮创建一个任务去执行,当每一轮执行完成后再合到一起计算最终的结果。后续会对此进行具体的介绍。

步骤12,将所述n个鉴权要素分别封装为对应的第一任务数据结构,并分配到多线程的任务线程队列中。

其中,在所述多线程中,每个线程具有各自不同的任务线程队列、各自不同的线程函数以及各自不同的处理时序。故而当一个线程停止时另一个线程可能还在执行,不容易被黑客获知具体的处理方式,进而提高鉴权的安全性。

在目前普遍的处理方式中,客户端一并将n个鉴权要素封装为加密数据,然后传输给服务器。例如,客户端还会计算视频流地址鉴权的key值,并将上述数据利用key值加密后并计算md5值将最终结果上报到服务器。在此过程中具体的客户端计算包括,数据的加密,数据的md5值计算。

而本发明的独特之处在于,本发明会对n个鉴权要素分别进行封装,分别封装时的方式可采用不同的方式,当然也可以采用同样的方式。

举例来说,若客户端在访问视频流服务器时,可以将md5值的计算进行拆分,拆分成多个md5值的计算。

具体举例如下:

在目前的拆分方法中,对于md5方法的拆分为:md5result=md5.create(tocken+ip+id+roomid)。也就是说,原本的单线程的执行流程是对上述数据计算一个md5值。

而本发明实施例中的拆分则可以是将上述的计算进行独立的每个数据计算一次md5值。另外,为了更加保密,还可以对最终的结果再计算一次md5值。具体来说,由于鉴权要素包括客户端登陆时的标记token,客户端的当前系统时间,客户端请求的房间roomid,客户端的当前ip,客户端的设备唯一id信息。那么则会针对每个要素分别进行封装,也即分别计算一次md5值。

例如:

计算tocken的md5值:md5result1=md5.create(tocken)。

计算ip的md5值:md5result2=md5.create(ip)。

计算id的md5值:md5result3=md5.create(id)。

计算roomid的md5值:md5result4=md5.create(roomid)。

每个数据的md5值的计算不依赖于其他信息,那么则可以将每个具体数据的md5计算随机的分布到多线程的任意一个线程中去执行。

下面具体介绍分配方式。

在多线程中,每个线程具有各自不同的线程函数、各自对应的处理时序、各自不同的任务队列。故而,每一个线程是一个独立的队列,每个线程不断的从队列中取任务来执行,并且每个线程都可以往其他线程中投递任务,从而实现多个线程协助的完成一个复杂的任务。然后将现有的视频流地址鉴权方法进行拆解成一个个独立的小任务,对于独立计算的任务不需要依赖其他任务的任务则随机的分布到每个线程的队列中去执行,而对于有依赖的任务则设计成任务依赖关系,如一个任务的输入参数是需要另一个任务的计算结果,则设计成依赖的任务,同时本文也会提高黑客分析的干扰性,也会生成一些虚假的计算任务,来干扰黑客对方法的分析。

在具体的分配过程中,是将所述n个鉴权要素对应的第一任务数据结构随机分配到多线程的任务线程队列中。也就是说,本发明实施例一般是随机分配的,因为每一个线程是一个独立的队列,但是每个线程可以不断的从队列中取任务来执行,并且每个线程都可以往其他线程中投递任务,从而实现多个线程协助的完成一个复杂的任务。

但是,在一些特定的情况下,本发明会进行有序的分配,例如若有某些任务数据结构彼此有关联,那么则会将其分配到对应的任务线程队列中。在处理的过程中,这些线程则会按照这些任务数据结构的关联性从任务线程队列中调用处理。

在具体的实施过程中,本发明可以先判断所述n个第一任务数据结构中是否具有相关联的第一任务数据结构;若有,则将所述相关联的第一任务数据结构按照关联关系分配到对应的任务线程队列中,并将对应的任务线程队列按照所述关联关系进行关联。也即,本发明实施例对于有关联的任务设计成任务关联关系,例如,一个任务的输入参数是需要另一个任务的计算结果,那么则设计成关联任务,将其分配到对应的任务线程队列中,那么在处理时,多线程会先调用线程函数处理另一个任务获得计算结果,然后再利用另一个线程调用对应的线程函数,利用之前算出的计算结果执行该线程。

另外,在一些特定的情况下,为了进一步提高鉴权的安全性,可先基于n个鉴权要素分别进行封装,获得n个第一任务数据结构,然后将n个第一任务数据结构随机分配到对应的多线程中,然后再基于n个第一任务数据结构再次一并进行封装,获得第一总任务数据结构;并将第一总任务数据结构分配到所述多线程中的任务线程队列中,然后将所述第一总任务数据结构对应的任务线程队列和所述n个第一任务数据结构对应的任务线程队列进行关联。本发明实施例中的第一总任务数据结构对应的任务线程队列,指的是总任务数据结构分配到的线程队列,实际上总任务数据结构在分配时也是随机分配的。

举例来说,本发明实施例可将所述客户端登陆时的标记,所述客户端的当前系统时间,所述客户端请求的房间,所述客户端的当前ip,所述客户端的设备唯一id信息分别封装为对应的第一任务数据结构;然后将获得的对应的第一任务数据结构一并再次封装为第一总任务数据结构,再将第一总任务数据结构分配到所述多线程中任务线程队列中。当然,上述鉴权要素各自封装得到的对应的任务数据结构也会存在各自对应的线程队列中,并且将这些线程队列和任务数据结构进行关联。

故而,在计算出结果之后,所有的任务都会将任务的计算结果投递到第一总任务数据结构的任务线程队列中,这样该线程会判断当前收取到的结果是否是所有都计算完成,如果收取的结果不完全则继续等待,直到所有的结果计算完成。那么最终会得到的结果如下:

md5result1、md5result2、md5result3、md5result4,拿到这些结果后,再对结果计算一次md5值。

md5result=md5.create(md5result1+md5result2+md5result3+md5result4)。

步骤13,将所述m个加密函数段分别封装为对应的第二任务数据结构,并分配到所述多线程的任务线程队列中。

对于加密函数来说,和上述实施例类似,也是分别将m个加密函数段封装为对应的第二任务数据结构,并进行分配。

那么,下面则具体介绍具体的分配方式。

作为一种可选的实施例,在将m段加密函数段封装的情况下,和上述分配方式类似,也可以将所述m个加密函数段对应的第二任务数据结构随机分配到所述多线程的任务线程队列中。

在本发的分配的实施例中,可能会出现某个任务线程队列中有多个第一任务数据结构和/或第二任务数据结构的情况,那么则按照对应的逻辑进行处理即可。也可以将其中的任务数据结构投递到其他任务队列中供其他线程处理,以便提高处理效率和安全性。

作为一种可选的实施例,在分配的过程中,可将所述m个加密函数段对应的第二任务数据结构一并再次封装为第二总任务数据结构;然后将所述第二总任务数据结构分配到所述多线程中的任务线程队列中;然后将所述第二总任务数据结构对应的第二任务线程队列和所述m个第二任务数据结构对应的任务线程队列进行关联。

步骤14,通过所述多线程中的各个线程调用各自对应的线程函数分别从各自对应的任务线程队列中获取到所述第一任务数据结构和/或所述第二任务数据结构进行处理,然后传输给所述服务器。

在具体的实施过程中,本发明实施例会先构建设计多线程的队列方法模型,这是本发明利用多线程处理鉴权的基础。

多线程的方法模型,是一种以计算任务为主的一种模型,每个线程的队列模型是一样的,每个线程都会设计一个任务队列,该线程各自不同的线程函数则会不断的从队列中取任务来执行,如果线程中没有任务则会调用系统函数sleep(休眠)来停止线程的执行,当sleep的时间到达后则又会继续从队列中取任务,线程重复以往执行该循环来取任务执行,没任务则休眠。如果线程收到一个退出线程的任务则会退出该循环,从而终止该线程的执行。

下面介绍本发明的实施例的实施基础。

在事先准备的基础中:1、会编写一任务数据结构。任务数据结构主要用来对所需信息(例如本实施例中的鉴权要素)进行封装,如上述步骤12中的内容,则是依据编写的任务数据结构对n个鉴权要素分别进行封装。2、会编写任务队列,值得注意的是,每个线程都有各自对应的任务队列,队列用来对存储封装后的任务,供对应的线程取用。3、编写创建线程的函数,该函数是线程整个的执行逻辑。4、编写具体的线程函数,每个线程对应有各自的线程函数。5、编写线程的管理。

下面分别介绍具体的实现过程:

1、编写任务数据结构。

编写一个任务的数据结构,该结构主要用来将任务的所需要的信息进行封装,那么线程取出这个任务时则依据于这个数据结构来执行。例如上述介绍的将用于访问视频流服务器的请求中包含:客户端登陆时的标记token,客户端的当前系统时间,客户端请求的房间roomid,客户端的当前ip,客户端的设备唯一id信息,那么在本发明实施例中,则会利用下面的数据结构对上述多个鉴权要素进行封装。

具体的数据结构包括:

2、编写任务队列。

以编写某个线程对应的一个任务队列为例,该队列则可以被其他线程投递任务,本线程则会从队列中取任务来执行。本发明实施例中使用stl容器的list容器,list容器是一个链表,可以高效的从链表中插入任务已经取任务操作。对于每个任务则是利用上述介绍中编写的任务的数据结构。具体队列实现如下:

编写一个队列的类,该类有成员变量list<task>用于存储任务,并且编写接口来提供从队列中取任务和从队列中插入任务的操作。具体的类如下:

3、编写创建线程的函数。

本文调用系统api函数createthread来创建一个线程,其中重要的参数是线程函数的地址,该线程函数则是这个线程整个的执行逻辑。

并且定义一个线程类。

4、编写具体的线程函数。

此线程函数是一个循环结构,会不断的从任务队列中取出任务来执行,如果没有任务则进行休眠,直到执行的任务是一个退出线程循环的任务则该线程的执行会被终止。具体实现如下:

5、编写线程的管理。

线程的管理主要是包括创建所有的线程,删除已经结束的线程,以及存储所有的线程,通过线程的管理对象能够获取到其他的线程,也可以知道当前有多少个线程的存在。具体的实现则可以是要stl的map容器来管理线程,可以使用线程的线程id作为map容器的key值,map容器的值则是线程这个对象。

通过这个步骤就完成了设计编写一个队列的多线程模型方法,每个线程都会创建一个队列。

而在服务器侧,服务器会收到客户端上报的视频流地址鉴权的信息包括roomid、id、ip等等,服务器则使用同样的方法来计算视频流地址的鉴权值,服务器则使用单线程的执行流程,不需要按照客户端的多线程执行模型。由于客户端和服务器使用同样的方法所以得到的最终结果是一致的,如果不一致则说明客户端是一个伪造的客户端则可以拒绝其视频地址的请求,如果是一致的则给客户端下发视频流地址,其则可以正常的观看视频流。

至此,服务器实现了都使用生成的方法来对视频流地址进行鉴权的功能,并会校验客户端的计算结果是否正确从而决定是否下发视频流地址。

基于统一发明构思,参看图2,本发明公开了一种利用多线程来处理鉴权的装置,包括:

获得模块21,用于获得用于请求访问服务器的访问请求中的n个鉴权要素和由m个加密函数段组成的加密函数,其中,所述加密函数用于对所述访问请求进行加密,n、m为正整数;

第一封装模块22,用于将所述n个鉴权要素分别封装为对应的第一任务数据结构,并分配到多线程的任务线程队列中,其中,在所述多线程中,每个线程具有各自不同的任务线程队列、各自不同的线程函数以及各自不同的处理时序;

第二封装模块23,用于将所述m个加密函数段分别封装为对应的第二任务数据结构,并分配到所述多线程的任务线程队列中;

处理模块24,用于通过所述多线程中的各个线程调用各自对应的线程函数分别从各自对应的任务线程队列中获取到所述第一任务数据结构和/或所述第二任务数据结构进行处理,然后传输给所述服务器。

基于与前述实施例中同样的发明构思,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文任一所述方法的步骤。

基于与前述实施例中同样的发明构思,本发明还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现前文任一所述方法的步骤。

通过本发明的一个或者多个实施例,本发明具有以下有益效果或者优点:

本发明公开了一种利用多线程来处理鉴权的方法及装置,先获得用于请求访问服务器的访问请求中的n个鉴权要素和由m个加密函数段组成的加密函数,然后对所述n个鉴权要素、m个加密函数段分别进行封装,并分配到所述多线程的任务线程队列中,通过多线程各自进行处理,由于每个线程具有各自不同的任务线程队列、各自不同的线程函数以及各自不同的处理时序,因此当一个线程停止时另一个线程可能还在执行,故而本发明使用多线程处理鉴权,能够提高鉴权方法被分析的难度,从而保护鉴权方法的安全性。

尽管已描述了本申请的优选实施例,但本领域内的普通技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1