一种基于模m同余类环的账号生成方法与流程

文档序号:11138685阅读:221来源:国知局
本发明属于计算机和信息处理领域,涉及一种账号生成方法。
背景技术
::现有的账号生成方法,多采用基于用户ID自增长技术的方法,其中用户ID指的是标明用户身份序号的数字序列,用户ID自增长指的是按用户注册的顺序,用自然数来表示用户ID。例如,第n+1个注册用户的ID,为第n个注册用户的ID加1。这种基于用户ID自增长技术的账号生成方法,虽简便易行,但注册用户的ID与用户群规模直接相关,因此很容易暴露出用户群规模,并且能够根据两个用户ID和各自注册时间,推算出这个时间段内的注册用户总数,无法对相关信息进行保密。技术实现要素:技术问题:本发明提供一种能够有效隐藏用户注册序号,从而对用户群规模和增长信息进行保密的基于模m同余类环的账号生成方法。技术方案:本发明的基于模m同余类环的账号生成方法,包括以下步骤:1)根据当前用户群账号系统总容量T,设定账号数量基数a,其中T为正整数,a为正整数且0<=a<T;并计算出当前用户群账号系统实际容量m=T-a;2)用户向系统提交注册请求,系统基于ID自增长技术生成用户注册序号n;3)选取一个不能整除m的正整数p,p≥2,且p与m只有一个公约数1;4)求取所述p与用户注册序号n的乘积p*n,并根据下式生成用户账号userID:userID=(p*n)modm+a其中,n为基于ID自增长技术生成的用户注册序号,即表示是第n个注册用户;mod为取模运算。进一步的,用户注册序号n超过用户群账号系统实际容量累计值时,即时,则所述步骤1)中,对当前用户群账号系统总容量T进行扩容更新,并对账号数量基数a进行更新为满足Tj-1<=aj<Tj的正整数,然后用更新后的系统总容量Tj和账号数量基数aj,根据mj=Tj-aj重新计算新的当前用户群账号系统实际容量mj,其中j为更新次数序号,mi表示m0、m1、……、mj-1中的任一个,aj为第j次更新后的账号数量基数,Tj为第j次扩容更新后的用户群账号系统总容量,Tj-1为第j次扩容更新前的用户群账号系统总容量,mj为第j次扩容更新后的用户群账号系统实际容量;所述步骤4)中求取pj与用户注册序号n的乘积pj*n,并根据下式生成用户账号userID:其中,pj为第j次扩容更新后选取的一个不能整除mj的正整数,mi表示m0、m1、……、mj-1中的任一个,m0为首次扩容更新之前的初始用户群账号系统实际容量。进一步的,本发明方法中,步骤2)中基于ID自增长技术生成用户注册序号n的具体方式为:将用户注册的自然排序作为用户注册序号n。进一步的,本发明方法中,步骤2)中基于ID自增长技术生成用户注册序号n的具体方式为:将备选序号分为S个容量相同的子库,即D1={1,S+1,2S+1……},D2={2,S+2,2S+2……},……,DS={S,2S,3S……},当用户向系统提交注册请求,将各用户按顺序分配到不同的子库中,并从该子库中按由小到大的顺序抽取还未使用过的备选序号作为该用户的用户注册序号n。本方案的优点是:当有大量用户同时注册时,服务器可以并行处理,从而有效应对用户爆发性注册的情况,同时不消耗额外内存,节约计算资源,提高响应速度。进一步的,本发明方法中,所述步骤4)中,a=0,即m=T,并根据下式生成用户账号userID:userID=(p*n)modm。进一步的,本发明方法中,所述p为素数。本发明方法中,“模m同余类环”中的某个元素为一个0到m-1上的一一映射,该映射依赖于某个不能整除m的正整数p,p≥2,且p与m只有一个公约数1,因此将该映射简称为映射p,因此所述映射p为“模m同余类环”中的某个元素,即一个0到m-1上的一一映射。进一步的,本发明方法中,所述0到m-1上的一一映射是非线性函数。本发明的基于用户账号userID反推用户注册顺序的方法,针对上述基于模m同余类环的账号生成方法得到的用户账号userID,反推出用户注册顺序,具体为根据下式确定用户注册序号n:n={q*(userID-a)}modm计算得到的n如果不为0,则n为用户注册序号;计算得到的n如果为0,则用户是第m个注册者;其中q为正整数且满足(p*q)modm=1,即q=(i*m+1)/p,其中i为正整数。进一步的,本发明的基于用户账号userID反推用户注册顺序的方法中,如果在账号生成时,由于n>m,对当前用户群账号系统总容量T进行过扩容更新,则针对得到的用户账号userID,首先根据所述用户账号userID所处的账号区段,确定该用户账号userID生成时所对应的账号数量基数aj、用户群账号系统实际容量mj和正整数pj,然后根据下式确定用户注册序号n:计算得到的n如果不为则表示n为用户注册序号;计算得到的n如果为则用户是第个注册者;其中qj为第j次扩容更新后选取的满足(pj*qj)modmj=1的正整数,即qj=(i*mj+1)/pj,其中i为正整数。此处账号区段是指初始用户群账号系统实际容量m所在的自增长注册序号区间,以及每次扩容更新后新增加的用户群账号系统实际容量所在的自增长注册序号区间。由于本发明方法只是对用户群账号系统实际容量m之内的自增长注册序号进行乱序,乱序运算的结果userID也位于区间(a,T]中,而非生成新的位于区间(a,T]之外的序号,因此可以根据用户账号userID所处的账号区段,确定该用户账号userID生成时是否已经对T进行扩容,以及是在对T的哪次扩容更新后生成的用户账号userID,从而确定其所对应的账号数量基数a和用户群账号系统实际容量m。本发明方法的原理是通过选取“模m同余类环”中的某个元素,(该元素为一个0到m-1上的一一映射,该映射依赖于某个不能整除m的的正整数p,p≥2,且p与m只有一个公约数1,因此将该映射简称为映射p),将0到m-1上的某个顺序序列打乱顺序,映射到0到m-1自身。在打乱顺序后的序列上,再增加一个基数a,生成用户账号。对于本发明方法生成的用户账号,通过用户群规模m和映射p,可以求解出p的逆映射q,进而从用户账号反推出用户注册顺序。有益效果:本发明与现有技术相比,具有以下优点:本发明通过选取一个不能整除用户群容量m的正整数p,p≥2,且p与m只有一个公约数1,求取所述正整数p与用户ID的乘积p*n,进而通过userID=(p*n)modm+a生成最终的用户账号,其原理是通过选取“模m同余类环”中某个元素(即正整数p,p≥2,且p与m只有一个公约数1),该元素相对于交换环上的乘法运算,构成交换环到自身的一一映射,零元素是该映射的不动点,通过该映射可以对0到m-1的整数重排,最终打乱顺序。因此,本发明方法通过选取适当的p,可以保证第一组数和最后一组数为同一个集合,而最后一组数是通过映射p将第一组数完全打乱了顺序后得到的。这样就通过交换环到自身的一一映射p将原来的用户注册顺序打乱,无法再根据生成的用户账号来获知用户群规模。上述映射p是非线性函数,即userID2-userID1=p(n2)-p(n1)≠n2-n1,其中n1、n2为用户注册顺序,均为小于m的正整数,相对应的生成账号分别为userID1和userID2,因此也就无法通过两个先后注册的用户ID来判断这个时段内共有多少用户注册,这样就避免了通过注册多个用户,并根据其这些用户的注册时间和用户ID,推断出这段时间内的用户规模增长情况,也无从推断各个时间点的用户整体规模。对于本发明方法生成的用户账号,通过账号生成过程中选取的映射p,可以找到映射p的逆映射,从而保证从打乱的用户账号userID找回用户的注册顺序。即使知道本发明方法的原理,还必须要同时知道用户群容量m、映射p和基数a,才能通过用户账号userID破解得到用户的注册顺序。退一步讲,即使知道了用户群容量m,当m比较大的时候,由于映射p可以有很多的选择,所有很难通过穷举法找到对应的映射p,也就无法破解本发明方法。同样,即使知道了映射p,但由于不知道用户群容量m,也就无法求解出p的逆映射q,无法破解本方法。在知道了用户群容量m和映射p,进而可以求解出p的逆映射q的情况下,由于不知道基数a,仍然无法计算出用户注册顺序和其userID之间的关系,同样无法破解本发明方法。综上,本发明方法能够有效隐藏用户注册序号,从而对用户群规模和增长信息进行保密。本发明方法具有快速、简洁的特点,无论是从注册顺序n求解用户userID,还是从userID反求注册顺序n,都只有O(1)的时间复杂度,并且该时间复杂度不会随用户规模m的增大而增长。本发明方法根据交换环到自身的一一映射,获得用户注册顺序n和其userID之间的关系,且映射计算是可逆的,因此不需要将n和userID之间的对应关系全部存储下来进行查询,无需消耗额外的内存,方法流程和执行简洁高效。而且本发明还进一步地提出了用户注册序号n超过用户群账号系统实际容量m时的映射方法,在对账号系统实际容量进行多次更新扩容的情况下依然能够保持用户注册序号n的连续性及userID的唯一性,并获得两者之间可逆的映射关系,使得本发明的技术方案具有高度可扩展性,适用范围更广,能够更好地满足网络用户账号数量日益增长的需求。附图说明图1为本发明方法账号生成的原理示意图。图2为根据生成账号反推注册序号的原理示意图。具体实施方式下面结合实施例和说明书附图对本发明作进一步的说明。本发明的基于模m同余类环的账号生成方法,如图1所示原理,具体过程为:1)用户向系统提交注册请求,系统分配的基于ID自增长技术生成的用户ID,即用户注册顺序n;2)系统根据用户群容量m,选取一个不能整除m的正整数p,p≥2,且p与m只有一个公约数1;3)将用户注册顺序n乘以正整数p,将(p*n)modm加上基数a,得到用户账号userID,即userID=(p*n)modm+a。图1中k为用户群中任一个用户,即1≤k≤m。图2为根据用户账号userID反求注册顺序n的原理示意,分为3个步骤:1)将用户账号userID,减去基数a;2)将第1)步的结果,乘以q,q根据m和p确定,q不唯一,但最后求得的注册顺序n唯一;3)将第2)步的结果,用m取模,即n=q*(userID-a)modm。得到n如果不为0,即为用户注册顺序;n为0时,表明用户是第m个注册者。下面通过一组具体实施例来对本发明账号生成方法进行说明。T:用户群账号系统总容量,本实施例假定为100;a:账号数量基数,本实施例假定为10;m:为用户群规模,即用户群账号系统实际容量,本实施例为T-a=90;p:某个正整数,p不能整除m,p≥2,且p与m只有一个公约数1,本实施例假定为p=7;q:整数,是p的逆映射,满足(p*q)modm=1。从(p*q)modm=1,可以确定q=(i*m+1)/p,其中i为整数。在本实施例中,取p=7,i=1,可以得到q=13。n:为用户注册顺序,n>=1,n<=90。userID:第n个注册用户的生成账号。mod为取模运算。根据注册顺序n生成用户账号userID,即userID=(p*n)modm+a,例如:n=46时,userID=(7*46)mod90+10=(322mod90)+10=52+10=62。根据用户账号userID反求注册顺序n,具体为n=q*(userID-a)modm,当n=0时,对应的是第m个注册用户。例如:userID=62时,n=13*(62-10)mod90=(13*52)mod90=676mod90=46。为了减小账号生成过程的计算量,可以对本发明方法的计算方式进行简化,即a取0,此时m=T,并根据下式生成用户账号userID:userID=(p*n)modm,具体不再赘述。下面对本发明方法的原理和有效性做进一步分析说明。(1)注册顺序n和userID的一一对应关系是确定且唯一的,论述说明如下:如果n1≠n2(0<n1、n2<m),假设(p*n1)modm=(p*n2)modm,即userID1=userID2。设(p*n1)modm=(p*n2)modm=x,则根据取模运算的定义,可得:p*n1=i1*m+x(1)p*n2=i2*m+x(2)其中,i1和i2均为整数。(2)-(1)可得:(n2-n1)*p=i*m(3)因为p为正整数,p不能整除m,,p≥2,且p与m只有一个公约数1,由(3)式可得:p整除i,即i=p*n(n>=1)。代入(3)式,可得:(n2-n1)*p=p*n*m(4)由(4)式可得,n2-n1=n*m>=m。这与0<n1、n2<m矛盾。因此,假设不成立。可见,当n1≠n2(0<n1、n2<m)时,必有(p*n1)modm≠(p*n2)modm,即userID1≠useID2。(2)如果(p*q)modm=1,那么q是p的逆映射,论述说明如下:根据n生成userID的规则为:userID=(p*n)modm+a(1)根据userID反求n的规则为:n=q*(userID-a)modm(2)假设用户注册顺序为n1,生成账号为userID1,只需将userID1代入(2)式反求得到的注册顺序为n1即可。q*(userID1-a)modm=q*[((p*n1)modm+a)-a]modm=q*[(p*n1)modm]modm根据取模运算定义,(p*n1)modm=p*n1–i*m,i为某个整数,因此有:q*(userID1-a)modm=q*(p*n1–i*m)modm=(q*p*n1)modm–(q*i*m)modm由于(q*i*m)modm为0,因此有:q*(userID1-a)modm=(q*p*n1)modm根据取模运算的性质,得到下式:q*(userID1-a)modm={[(q*p)modm]*[n1modm]}modm由于已知条件((q*p)modm=1,因此有:q*(userID1-a)modm=(n1modm)modm而n1<m,所以n1modm=n1q*(userID1-a)modm=n1modm=n1因此,该过程可逆。即,当(q*p)modm=1时,q为p的逆映射。本发明的一种实施例中,为了应对用户注册数量超过用户群账号系统实际容量的情况,即n>m的情况,在n>m时,则还需对当前用户群账号系统总容量T进行扩容更新,并对账号数量基数a进行更新,即令a取满足Tj-1<=aj<Tj的正整数,然后用更新后的系统总容量Tj和账号数量基数aj,根据mj=Tj-aj重新计算新的当前用户群账号系统实际容量mj,其中j为更新次数序号,aj为第j次更新后的账号数量基数,Tj为第j次扩容更新后的用户群账号系统总容量,Tj-1为第j次扩容更新前的用户群账号系统总容量,mj为第j次扩容更新后的用户群账号系统实际容量;所述步骤4)中求取pj与用户注册序号n的乘积pj*n,并根据下式生成用户账号userID:其中,pj为第j次扩容更新后选取的一个不能整除mj的正整数,mi表示m0、m1、……、mj-1中的任一个,m0为首次扩容更新之前的初始用户群账号系统实际容量。相应的,在针对这种对T进行扩容更新得到的userID进行反推用户注册顺序时,先根据所述用户账号userID所处的账号区段,确定该用户账号userID生成时所对应的账号数量基数aj、用户群账号系统实际容量mj和正整数pj,然后根据下式确定用户注册序号n:其中qj为第j次扩容更新后选取的满足(pj*qj)modmj=1的正整数,即qj=(i*mj+1)/pj,其中i为正整数。具体的,本实施例中,初始参数同上一实施例,即用户群账号系统总容量T为100,账号数量基数a为10,用户群账号系统实际容量m为T-a=90;p为7。此时n达到了91,即n>m,则对当前用户群账号系统总容量T进行扩容更新,使T1=150,令a1取105,然后计算新的当前用户群账号系统实际容量m1=T-a=45。重新选取不能整除m1的正整数p1,同样的,p1≥2,且p1与m1只有一个公约数1,此处选取p1=8。然后根据userID={p1*(n-m0)}modm1+a1={8*(91-90)}mod45+105=(8mod45)+105=8+105=113。本实施例中,根据用户账号userID反求注册顺序n时,根据userID=113位于区间(100,150]中,可以知道该用户账号userID对应的是本次扩容后的账号数量基数105和用户群账号系统实际容量45,即a1=105,m1=45,p1=8。确定p1的逆映射q1,即q1=(i*m1+1)/p1,其中i取3,则可以得到q1=17。然后根据n={q1*(userID-a1)}modm1+m0=[17*(113-105)]mod45+90=(17*8)mod45+90=136mod45+90=91。上述实施例中,当n=136时,n>m0+m1=90+45=135,需作第二次扩容,使T2=200,令a2取163,然后计算新的当前用户群账号系统实际容量m2=T-a2=37。重新选取不能整除m2的正整数p2,同样的,p2≥2,且p2与m2只有一个公约数1,此处选取p2=2。然后根据userID={p2*(n-m1-m2)}modm2+a2={2*(136-90-45)}mod37+163=(2mod37)+163=2+163=165。根据用户账号userID反求注册顺序n时,根据userID=165位于区间(150,200]中,可以知道该用户账号userID对应的是本次扩容后的账号数量基数163和用户群账号系统实际容量37,即a2=163,m2=37,p2=2。确定p2的逆映射q2,即q2=(i*m2+1)/p2,其中i取1,则可以得到q1=19。然后根据n={q2*(userID-a2)}modm2+m0+m1={19*(165-163)}mod37+90+45=(19*2)mod37+135=38mod37+135=136。本发明的方法中,基于ID自增长技术生成用户注册序号n可以是用户注册的自然排序作为用户注册序号n,也可以是基于以下方式生成:将备选序号分为S个容量相同的子库,即D1={1,S+1,2S+1……},D2={2,S+2,2S+2……},……,DS={S,2S,3S……},当用户向系统提交注册请求,将各用户按顺序分配到不同的子库中,并从该子库中按由小到大的顺序抽取还未使用过的备选序号作为该用户的用户注册序号n。上述S个容量相同的子库,例如在S取5时为:{1,6,11,16,……}{2,7,12,17,……}{3,8,13,18,……}{4,9,14,19,……}{5,10,15,20,……}将备选序号分隔成多个子库的目的是为了减少整个大数据库的检索、插入等操作对系统资源的消耗;同时在并发多个用户注册请求时,可以通过多个数据库同时操作更快地响应和处理。采用本发明方法后,根据生成的用户userID无法推算出用户群规模,具体说明如下:假设第m个用户在t1时刻注册,得到userID1;第n个用户在t2时刻注册,得到userID2。在t1到t2这段时间共注册了n-m+1个用户。但因为P为非线性一一映射,userID2-userID1≠n-m。因此,用户无法根据各自的userID来推算这段时间内的用户注册数量。账号生成涉及到3个参数,p,a,m,实际应用时这3个数都很大,破解者很难同时猜测到这3个数,所以很难破解该账号系统。本发明技术方案中的映射p,也可以采用生成不重复随机数的方式。但该替代方案当生成的随机数与已有用户ID重复时,还需要重新生成,并且该方案需要将该映射关系存储为哈希表,当用户规模很大时这需要较大的存储空间,并且哈希表不可逆,需要存储逆映射,导致占用更多存储空间。本发明方法中涉及到的概念和术语解释如下:环:环(Ring)是一类包含两种运算(加法和乘法)的代数系统,是现代代数学十分重要的一类研究对象,由一个集合以及两个作用在该集合上的二元运算所组成,两个二元运算分别称为加法和乘法,加法满足交换律和结合律,乘法对加法满足分配率,加法有零元素(任何元素加上零元素是本身)。交换环:如果乘法满足交换率,这样的环就是交换环。模m同余类环:如果a-b=im(a,b,i都是正整数),记为将所有这样的元素组成的集合,在模的加法和乘法下成为一个交换环,该环叫做模m同余类环。一一映射:假设f是从集合A到集合B的一个映射,如果f既是单射又是满射,那么f就称为是一一映射。哈希表(Hashtable):是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。上述实施例仅是本发明的优选实施方式,应当指出:对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和等同替换,这些对本发明权利要求进行改进和等同替换后的技术方案,均落入本发明的保护范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1