本發明屬于計算機和信息處理領域,涉及一種賬號生成方法。
背景技術:
::現有的賬號生成方法,多采用基于用戶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