專利名稱:利用排序產(chǎn)生的序號碼加密的方法及密碼機的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種利用排序產(chǎn)生的序號碼對數(shù)字信息加密的方法。
背景技術(shù):
隨著計算機速度的不斷提高,當(dāng)前分組加密算法不斷受到挑戰(zhàn),甚至已被破解如DES加密,這需要加密強度更高的方法來取代現(xiàn)有的加密方法。
發(fā)明內(nèi)容
本發(fā)明正是針對以上問題而產(chǎn)生。
根據(jù)本發(fā)明的一個方面,提供一種加密方法,其加密流程如下 1用預(yù)定算法計算數(shù)列P的序號碼, 2以序號碼為密鑰對明文分組加密,其中, 所述預(yù)定算法是指用于排序的方法,并且是下列其中一種計數(shù)排序法、快速排序算法、選擇排序算法、冒泡排序算法、堆排序算法、歸并排序算法、希爾排序算法、插入排序算法、二叉樹排序算法、桶排序算法、基數(shù)排序算法, 所述序號碼是指按照某種規(guī)則對一個數(shù)列重新排序得到新數(shù)列后,原數(shù)列中數(shù)據(jù)在新數(shù)列中的位置序號代碼,并且,所述按照某種規(guī)則對一個數(shù)列重新排序指以下四者之一①按照從大到小的順序?qū)σ粋€數(shù)列重新排序,②按照從小到大的順序?qū)σ粋€數(shù)列重新排序,③按照從大到小的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置,④按照從小到大的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置, 所述以序號碼為密鑰對明文分組加密,是指采用以下算法中一種或多種根據(jù)序號碼重新排列明文分組各代碼的位置,直接利用序號碼與明文分組的數(shù)據(jù)做異或、同或、加、減、乘、除、取模等運算來加密。
根據(jù)本發(fā)明的一個方面,提供一種加密方法,其加密流程如下 1用計數(shù)排序法計算數(shù)列P的序號碼, 2以序號碼為密鑰對明文分組加密,其中, 所述序號碼是指按照某種規(guī)則對一個數(shù)列重新排序得到新數(shù)列后,原數(shù)列中數(shù)據(jù)在新數(shù)列中的位置序號代碼,并且,所述按照某種規(guī)則對一個數(shù)列重新排序指以下四者之一①按照從大到小的順序?qū)σ粋€數(shù)列重新排序,②按照從小到大的順序?qū)σ粋€數(shù)列重新排序,③按照從大到小的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置,④按照從小到大的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置, 所述以序號碼為密鑰對明文分組加密,是指采用以下算法中一種或多種根據(jù)序號碼重新排列明文分組中各代碼的位置,直接以序號碼為密鑰對明文分組的數(shù)據(jù)做異或、同或、加、減、乘、除、取模等運算來加密, 所述用計數(shù)排序法計算數(shù)列P的序號碼,包括四步(a)對計數(shù)數(shù)列清0,(b)用計數(shù)數(shù)列記錄數(shù)列P中各種數(shù)值的出現(xiàn)次數(shù),(c)對計數(shù)數(shù)列中的數(shù)據(jù)累加,(d)利用累加結(jié)果和數(shù)列P中的數(shù)據(jù)計算序號碼,并且,所述數(shù)列P能以下列三種形式之一出現(xiàn)(1)數(shù)列P在步驟(b)之前就已產(chǎn)生,(2)數(shù)列P在步驟(b)中產(chǎn)生,并且每產(chǎn)生一個數(shù)列P的數(shù)據(jù)p[i],就將計數(shù)數(shù)列中與數(shù)據(jù)p[i]的值對應(yīng)的數(shù)據(jù)加1,(3)數(shù)列P在步驟(b)中產(chǎn)生,并且在數(shù)列P中數(shù)據(jù)都產(chǎn)生之后,再用計數(shù)數(shù)列記錄數(shù)列P中各種數(shù)值的出現(xiàn)次數(shù), 在數(shù)列P以(1)這種形式出現(xiàn)的條件下,步驟1可采用以下八種方法之一或指以下八種方法的變異方法 第一種計數(shù)排序法計算序號碼的方法如下 ①i=0/*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { r[i]=0 /*...將數(shù)列R清0,r[i]表示數(shù)列R中第i+1個整數(shù)...*/ i=i+1 } ②i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { r[p[i]]=r[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/ i=i+1 } ③i=1 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n-1遍...*/ { r[i]=r[i]+r[i-1] /*...累加...*/ i=i+1 } ④i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { r[p[i]]=r[p[i]]-1 k[i]=r[p[i]] /*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù),當(dāng)然前面兩條指令也可修改為k[i]=r[p[i]]-1 r[p[i]]=k[i]...*/ i=i+1 } 第二種計數(shù)排序法計算序號碼的方法如下 ①i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { r[i]=0 /*...將數(shù)列R清0,r[i]表示數(shù)列R中第i+1個整數(shù)...*/ i=i+1 } ②i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { r[p[i]]=r[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/ i=i+1 } ③i=1 a=r
r
=0 /*...賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/ { b=r[i] r[i]=a+r[i-1] /*...累加...*/ i=i+1 a=b } ④i=0/*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[i]=r[p[i]] r[p[i]]=r[p[i]]+1 /*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } 第三種計數(shù)排序法計算序號碼的方法如下 ①i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { r[i]=0 /*...將數(shù)列R清0,r[i]表示數(shù)列R中第i+1個整數(shù)...*/ i=i+1 } ②i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { r[p[i]]=r[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/ i=i+1 } ③i=2n-2 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/ { r[i]=r[i]+r[i+1] /*...累加...*/ i=i-1 } ④i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { r[p[i]]=r[p[i]]-1 k[i]=r[p[i]] /*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù),當(dāng)然前面兩條指令也可修改為k[i]=r[p[i]]-1 r[p[i]]=k[i]...*/ i=i+1 } 第四種計數(shù)排序法計算序號碼的方法如下 ①i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { r[i]=0 /*...將數(shù)列R清0,r[i]表示數(shù)列R中第i+1個整數(shù)...*/ i=i+1 } ②i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { r[p[i]]=r[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/ i=i+1 } ③i=2n-2 a=r[2n-1] r[2n-1]=0/*...賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/ { b=r[i] r[i]=a+r[i+1]/*...累加...*/ i=i-1 a=b } ④i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[i]=r[p[i]] r[p[i]]=r[p[i]]+1 /*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } 第五種計數(shù)排序法計算序號碼的方法如下 ①i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[i]=0 /*...將數(shù)列K清0,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } ②i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[p[i]]=k[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/ i=i+1 } ③i=1 r
=k
/*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/ { r[i]=k[i]+r[i-1] /*...累加...*/ i=i+1 } ④i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { r[p[i]]=r[p[i]]-1 k[i]=r[p[i]] /*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } 第六種計數(shù)排序法計算序號碼的方法如下 ①i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[i]=0 /*...將數(shù)列K清0,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } ②i=0/*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[p[i]]=k[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/ i=i+1 } ③i=1 r
=0 /*...賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/ { r[i]=k[i-1]+r[i-1] /*...累加...*/ i=i+1 } ④i=0/*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { k[i]=r[p[i]] r[p[i]]=r[p[i]]+1 /*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } 第七種計數(shù)排序法計算序號碼的方法如下 ①i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[i]=0 /*...將數(shù)列K清0,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } ②i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[p[i]]=k[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/ i=i+1 } ③i=2n-2 r[2n-1]=k[2n-1] /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/ { r[i]=k[i]+r[i+1]/*...累加...*/ i=i-1 } ④i=0/*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { r[p[i]]=r[p[i]]-1 k[i]=r[p[i]] /*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } 第八種計數(shù)排序法計算序號碼的方法如下 ①i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[i]=0 /*...將數(shù)列K清0,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } ②i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { k[p[i]]=k[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/ i=i+1 } ③i=2n-2 r[2n-1]=0 /*...賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/ { r[i]=k[i+1]+r[i+1] /*...累加...*/ i=i-1 } ④i=0/*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[i]=r[p[i]] r[p[i]]=r[p[i]]+1 /*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/ i=i+1 } 在數(shù)列P以(2)這種形式出現(xiàn)的條件下,對于前四種計數(shù)排序法計算序號碼的方法,只要修改方法中的②即可,如將②修改為如下 ②i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { p[i]=f(...) /*...f(...)用來表示產(chǎn)生數(shù)列P的程序段...*/ r[p[i]]=r[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/ i=i+1 } 在數(shù)列P以(3)這種形式出現(xiàn)的條件下,對于前四種計數(shù)排序法計算序號碼的方法,只要修改方法中的②即可,如將②修改為如下 ② i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { p[i]=f(...) /*...f(...)用來表示產(chǎn)生數(shù)列P的程序段...*/ i=i+1 } i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { r[p[i]]=r[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/ i=i+1 } 在數(shù)列P以(2)這種形式出現(xiàn)的條件下,對于后四種計數(shù)排序法計算序號碼的方法,只要修改方法中的②即可,如將②修改為如下 ②i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/ { p[i]=f(...) /*...f(...)用來表示產(chǎn)生數(shù)列P的程序段...*/ k[p[i]]=k[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/ i=i+1 } 在數(shù)列P以(3)這種形式出現(xiàn)的條件下,對于后四種計數(shù)排序法計算序號碼的方法,只要修改方法中的②即可,如將②修改為如下 ② i=0/*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { p[i]=f(...)/*...f(...)用來表示產(chǎn)生數(shù)列P的程序段...*/ i=i+1 } i=0 /*...給i賦初始值...*/ 針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/ { k[p[i]]=k[p[i]]+1 /*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/ i=i+1 } 上述計數(shù)排序法計算序號碼的方法中如果將所有出現(xiàn)的“k[i]=r[p[i]]”修改為“k[(i+u)%(2n)]=(r[p[i]]+w)%(2n)”則可產(chǎn)生變異的計算序號碼的方法,如果將所有出現(xiàn)的“k[i]=r[p[i]]”修改為“k[(i+u)%(2n)]=((r[p[i]]*r[p[i]]+r[p[i]]+v)/2+w)%(2n)”則又可產(chǎn)生變異的計算序號碼的方法,如果將所有出現(xiàn)的“k[i]=r[p[i]]”修改為“k[(i+u)%(2n)]=f(r[p[i]])”則又可產(chǎn)生變異的計算序號碼的方法,其中f(r[p[i]])表示以r[p[i]]為變元的函數(shù),即以序號碼為變元,如果將所有出現(xiàn)的“r[p[i]]”修改為“r[(p[i]+z)%(2n)]”,并將所有出現(xiàn)的“k[p[i]]”修改為“k[(p[i]+z)%(2n)]”則也可產(chǎn)生變異的計算序號碼的方法,如果將計數(shù)器i的初始值修改為其他大于-1的數(shù)值,并將受該參數(shù)影響的命令參數(shù)適當(dāng)修改就可產(chǎn)生變異的計算序號碼的方法,上面計算序號碼的方法中計數(shù)器i的計數(shù)操作(如加1或減1)都放在循環(huán)體的尾部,如果將計數(shù)器i的計數(shù)操作放在循環(huán)體的首部,并調(diào)整受影響的命令參數(shù)適當(dāng)修改也可產(chǎn)生變異的計算序號碼的方法,注意前面所出現(xiàn)的z、u、v、w在計算序號碼的過程中是不變的整數(shù)。
根據(jù)本發(fā)明的一個方面,提供一種加密方法,其加密流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,設(shè)置j=0 2將明文分組逐組輸入明文數(shù)列T中,并且每輸入一組明文后做下列運算 {/*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán),明文分組長為2n個單元,每個單元為n個比特,n為正整數(shù)...*/ ①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系進(jìn)行排序的序號碼,并將序號碼記錄到數(shù)列K中, ②i=0 針對整數(shù)i做下列循環(huán)運算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ c[j]=(t[i]+k[i])%(2n) i=i+1 j=j(luò)+1 /*...即用序號碼對明文數(shù)列T加密,其中t[i]表示數(shù)列T中第i+1個整數(shù),k[i]表示數(shù)列K中第i+1個整數(shù),c[j]表示密文數(shù)列C中第j+1個密文,“%”表示mod,...*/ } ③i=0 針對整數(shù)i做下列循環(huán)運算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ p[i]=(p[i]+(t[i]*t[i]+t[i])/2)%(2n) /*...即用明文數(shù)列T中的數(shù)據(jù)對數(shù)列P更新,其中t[i],p[i]分別表示數(shù)列T、數(shù)列P中第i+1個整數(shù),*表示乘,/表示整除,上式應(yīng)用函數(shù)f(x)=((x2+x)/2)%(2n)對數(shù)列P加密,函數(shù)f(x)在x和n都為正整數(shù)的條件下,具有最佳的離散性能...*/ i=i+1 } } 根據(jù)本發(fā)明的一個方面,提供一種加密方法,其加密流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,設(shè)置j=0 2將明文分組逐組輸入明文數(shù)列T中,并且每輸入一組明文后做下列運算 {/*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán),明文分組長為2n個單元,每個單元為n個比特,n為正整數(shù)...*/ ①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系進(jìn)行排序的序號碼,并將序號碼記錄到數(shù)列K中, ②i=0 針對整數(shù)i做下列循環(huán)運算 {/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ s[i]=t[k[i]] i=i+1 /*...即用數(shù)列K中的序號碼重新排列數(shù)列T中各整數(shù)的位置,并將結(jié)果保存在數(shù)列S中,其中k[i]分別表示數(shù)列K中第i+1個整數(shù),t[k[i]]表示數(shù)列T中第k[i]+1個整數(shù),s[i]表示數(shù)列S中第i+1個密文...*/ } ③i=0 針對整數(shù)i做下列循環(huán)運算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ c[j]=(s[i]+k[i])%(2) i=i+1 j=j(luò)+1 /*...即用序號碼對數(shù)列S繼續(xù)加密,其中s[i]表示數(shù)列S中第i+1個整數(shù),k[i]表示數(shù)列K中第i+1個整數(shù),c[j]表示密文數(shù)列C中第j+1個密文,“%”表示mod,...*/ } ④i=0 針對整數(shù)i做下列循環(huán)運算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ p[i]=(p[i]+(t[i]*t[i]+t[i])/2)%(2n) /*...即用明文數(shù)列T中的數(shù)據(jù)對數(shù)列P更新,其中t[i],p[i]分別表示數(shù)列T、數(shù)列P中第i+1個整數(shù),*表示乘,/表示整除...*/ i=i+1 } } 根據(jù)本發(fā)明的一個方面,提供一種加密方法,其加密流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,并且數(shù)列P中每個整數(shù)可用n比特表示,設(shè)置j=0, 2將明文分組逐組輸入明文數(shù)列T中,并且每輸入一組明文后做下列運算 {/*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán)...*/ ①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系進(jìn)行排序的序號碼,并將序號碼記錄到數(shù)列K中, ②i=0 針對整數(shù)i做下列循環(huán)運算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ s[i]=t[i]^k[i] i=i+1 /*...即用序號碼對明文數(shù)列T加密,其中t[i]表示數(shù)列T中第i+1個整數(shù),k[i]表示數(shù)列K中第i+1個整數(shù),s[i]表示整數(shù)數(shù)列s中第i+1個密文,“^”表示異或...*/ } ③i=0 針對整數(shù)i做下列循環(huán)運算 {/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ q[i]=p[k[i]] i=i+1 /*...依據(jù)數(shù)列K中記錄的序號碼,將用數(shù)列P中的數(shù)據(jù)逆向復(fù)制到數(shù)列Q中,其中q[i]、k[i]分別表示數(shù)列Q、數(shù)列K中第i+1個整數(shù),p[k[i]]表示數(shù)列P中第k[i]+1個整數(shù)...*/ } ④用計數(shù)排序法計算將數(shù)列Q按照大小關(guān)系進(jìn)行排序的序號碼,并將序號碼記錄到數(shù)列K中, ⑤i=0 針對整數(shù)i做下列循環(huán)運算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ c[j+i]=s[k[i]] i=i+1 /*...即用數(shù)列K中的序號碼重新排列數(shù)列S中各整數(shù)的位置,并將結(jié)果作為密文輸出,其中k[i]分別表示數(shù)列K中第i+1個整數(shù),s[k[i]]表示數(shù)列s中第k[i]+1個整數(shù),c[j+i]表示密文數(shù)列C中第j+i+1個密文,...*/ } ⑥i=0 針對整數(shù)i做下列循環(huán)運算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ p[i]=(q[i]+(t[i]*t[i]+t[i])/2)%(2n) i=i+1 /*...即用明文數(shù)列T中的數(shù)據(jù)對數(shù)列Q更新,并將更新結(jié)果保存在數(shù)列P中,其中t[i]、p[i]、q[i]分別表示數(shù)列T、數(shù)列P、數(shù)列Q中第i+1個整數(shù),...*/ } ⑦j=j(luò)+2n/*...這里為下一個分組的加密做準(zhǔn)備...*/ } 根據(jù)本發(fā)明的一個方面,提供一種加密方法,其加密流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,并且數(shù)列P中每個整數(shù)可用n比特表示,設(shè)置j=0 2將明文分組逐組輸入明文數(shù)列T中,并且每輸入一組明文后做下列運算 {/*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán)...*/ ①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中, ②i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ s[k[i]]=t[i] /*...s[k[i]]表示數(shù)列S中第k[i]+1個整數(shù),這里將明文分組重排位置并將結(jié)果保存在數(shù)列S中...*/ i=i+1 } ③i=0 針對i進(jìn)行循環(huán)計算 {/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ q[i]=p[k[i]] i=i+1 } ④i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ r[i]=((q[i]*q[i]+q[i])/2+p[i])%2n i=i+1 } ⑤用計數(shù)排序法計算將數(shù)列Q按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中, ⑥i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ c[j]=(k[i]+r[i]+s[i])%2n /*...加密...*/ i=i+1 j=j(luò)+1 } ⑦i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ p[i]=(q[i]+t[i])%2n /*...用明文數(shù)列T對數(shù)列Q更新,并將結(jié)果保存在數(shù)列P中...*/ i=i+1 } } 根據(jù)本發(fā)明的一個方面,提供一種加密方法,其加密流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,并且數(shù)列P中每個整數(shù)可用n比特表示, 2將明文分組逐組輸入數(shù)列C中,并且每輸入一組明文后做下列運算 {/*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán)...*/ ①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中, ②R=g(P) /*...這里表示R是數(shù)列P中數(shù)據(jù)作函數(shù)g運算后得到的結(jié)果...*/ d=2n-1 {/*...第二層循環(huán),當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ t[d]=c[d]^(((R*R+R)/2)%(2n)) R=((c[d]*c[d]+c[d]*3)/2+R)%2n /*...t[d]、c[d]分別表示數(shù)列T、數(shù)列C中第d+1個整數(shù)...*/ d=d-1 } ③R=h(P) /*...這里表示R是數(shù)列P中數(shù)據(jù)作函數(shù)h運算后得到的結(jié)果...*/ a=0 {/*...第二層循環(huán),當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ c[k[a]]=t[a]^(((R*R+R)/2)%(2n)) /*...c[k[a]]表示密文分組數(shù)列C中第k[a]+1個整數(shù),k[a]、t[a]分別表示數(shù)列K、數(shù)列T中第a+1個整數(shù),這里將數(shù)列T重排位置并將結(jié)果保存在密文分組數(shù)列C中...*/ R=((t[a]*t[a]+t[a]*3)/2+R)%(2n) a=a+1 } ④i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ q[i]=f(p[k[i]]) /*...f(p[k[i]])表示以為p[k[i]]變量,作某種函數(shù)運算...*/ i=i+1 } ⑤i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ r[i]=((q[i]*q[i]+q[i])/2+p[i])%2n i=i+1 } ⑥用計數(shù)排序法計算將數(shù)列Q按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中, ⑦i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ c[i]=(k[i]+r[i]+c[i])%2n/*...加密...*/ i=i+1 } 輸出分組密文數(shù)列C ⑧i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ p[i]=(q[i]+t[i])%2n /*...對數(shù)列Q更新,并將結(jié)果保存在數(shù)列P中...*/ i=i+1 } } 根據(jù)本發(fā)明的一個方面,提供一種密碼機,該密碼機的結(jié)構(gòu)如下 有一個處理器CPU,該處理器CPU集成有運算寄存器R、遞增計數(shù)器A、遞減計數(shù)器D和四組運算寄存器。并且,所述四組運算寄存器分別為寄存器組S、寄存器組K、寄存器組T、寄存器組C,每個寄存器組都有2n個單元,每個單元為可保存n比特信息,每個寄存器組不僅可寄存數(shù)據(jù),還可作為寄存器組中單元的相對地址控制寄存器,處理器CPU通過數(shù)據(jù)總線接收和輸出信息,處理器CPU每執(zhí)行一個跳轉(zhuǎn)指令遞增計數(shù)器A加1,遞減計數(shù)器D減1,當(dāng)這些計數(shù)器與地址控制線路接通時,計數(shù)器中的數(shù)值就決定該地址控制線路接通的運算寄存器組中哪個單元能接通使用,并且接通的單元序號就等于計數(shù)器中的數(shù)值,即計數(shù)器可作為前述四組運算寄存器的相對地址控制寄存器,計數(shù)器還用于控制循環(huán)次數(shù),所述寄存器R只有一個單元且能容納n比特的信息,并且密碼機的工作流程分為加密工作流程和解密工作流程這兩部分,其中, 密碼機加密工作流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)(每個整數(shù)為n比特)的數(shù)列,并將該數(shù)列保存在寄存器組S中, 2將明文分組逐組輸入寄存器組C中,并且每輸入一組明文后做下列運算 {/*...第一層循環(huán),明文分組長為2n×n比特,當(dāng)最后一組明文加密完畢時跳出循環(huán)...*/ (1)將遞增計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,寄存器組S作為寄存器組K的相對地址控制寄存器接通,并將寄存器組K中各單元都設(shè)為0,將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[S[a]]←K[S[a]]+1的指令 /*...a表示遞增計數(shù)器A中的數(shù)值,S[a]表示寄存器組S中序號為a的單元,K[S[a]]表示寄存器組K中由S[a]接通的單元,即表示寄存器組K中序號等于S[a]中數(shù)據(jù)的單元,這條指令是將K[s[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到K[S[a]],...*/ } (2)將遞減計數(shù)器D作為寄存器組K、寄存器組T的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞減計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ 執(zhí)行T[d]←(K[d]+R)→R的指令 /*...d表示遞減計數(shù)器D中的數(shù)據(jù),K[d]表示寄存器組K中序號為d的單元,T[d]表示寄存器組T中序號為d的單元,這條指令是將K[d]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給寄存器組T中序號為d的單元,同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組K中整數(shù)的累加,本循環(huán)結(jié)束時,T
中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,所以實際上本循環(huán)結(jié)束時T
中的數(shù)據(jù)為0,但只要能實現(xiàn)四組寄存器中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,...*/ } (3)將遞增計數(shù)器A作為寄存器組S和寄存器組K的相對地址控制寄存器接通,將寄存器組S作為寄存器組T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[a]←(T[S[a]]-1)→T[S[a]]的指令 /*...a為遞增計數(shù)器A中的數(shù)據(jù),S[a]、K[a]分別表示寄存器組S、寄存器組K中序號為a的單元,T[S[a]]表示寄存器組T中序號等于S[a]中內(nèi)容的單元,這條指令表示將T[S[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到K[a],同時也傳送到T[S[a]],以實現(xiàn)算出序號碼,...*/ } (4)執(zhí)行R←(K[2n-1]+S[K[2n-2]])%2n的命令 /*...這條指令是將寄存器組S中序號等于K[2n-2]中數(shù)據(jù)的單元數(shù)據(jù)與寄存器組K中第2n個單元中的數(shù)據(jù)相加,然后模2n,并將結(jié)果傳送到寄存器R中...*/ 遞減計數(shù)器D作為寄存器組C和寄存器組T的相對地址控制寄存器接通,并將計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ 執(zhí)行T[d]←(C[d])^(((R*R+R)/2)%(2n))的指令 /*...d為遞減計數(shù)器D中的數(shù)據(jù),T[d]、C[d]分別表示寄存器組T、寄存器組C中序號為d的單元,這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加后,以2整除,然后模2n,再與C[d]中數(shù)據(jù)作異或運算,并將結(jié)果傳送到T[d],即對分組信息進(jìn)行第一次加密...*/ 執(zhí)行R←((C[d]*C[d]+C[d]*3)/2+R)%2n的指令 /*...將寄存器組C中第d+1個單元中的數(shù)據(jù)乘以3的結(jié)果與寄存器組C第d+1個單元中的數(shù)據(jù)平方相加,接著以2整除,然后與寄存器R中數(shù)據(jù)相加,再模2n,并將運算結(jié)果傳送到寄存器R中...*/ } (5)執(zhí)行R←(K[1]+S[K
])%2n的指令 /*...即將寄存器組K中第2個單元中的數(shù)據(jù)和寄存器組S中第K
+1個單元中的數(shù)據(jù)相加,并將結(jié)果傳送到寄存器R,...*/ 將遞增計數(shù)器A作為寄存器組T和寄存器組K的相對地址控制寄存器接通,將寄存器組K作為寄存器組C的相對地址控制寄存器接通,接著將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行C[K[a]]←T[a]^(((R*R+R)/2)%(2n))的指令 /*...這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加,接著以2整除,然后模2n,再與寄存器組T中第a個單元中數(shù)據(jù)互異,并將運算結(jié)果傳送到存器組C的第K[a]+1個單元,即對分組信息進(jìn)行第二次加密,...*/ 執(zhí)行R←((T[a]*T[a]+T[a]*3)/2+R)%(2n)的指令 /*...這條指令表示將T[a]中數(shù)據(jù)與3相乘后的積與T[a]中數(shù)據(jù)的平方相加,接著以2整除,然后加上寄存器R中的數(shù)據(jù),再模2n,并將運算結(jié)果傳送到存器R,為加密下一單元做準(zhǔn)備,...*/ } (6)將遞增計數(shù)器A作為寄存器組K的相對地址控制寄存器接通,將寄存器組K作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[a]←S[K[a]]^m的指令 /*...S[K[a]]表示寄存器組S中序號等于K[a]中數(shù)據(jù)的單元,這條指令表示將S[K[a]]中數(shù)據(jù)與m作互異運算,并將結(jié)果保存在寄存器組K中序號等于a的單元,m為常數(shù), } (7)將遞增計數(shù)器A作為寄存器組K、S這兩者的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←((K[a]*K[a]+K[a])/2+S[a])%(2n)的指令 /*...這務(wù)指令表示將K[a]中整數(shù)的平方與K[a]中整數(shù)相加,接著以2整除,然后與S[a]中數(shù)據(jù)相加,再模2n,并將結(jié)果傳送到寄存器組S中序號為a的單元中,以便后面實施第三次加密,...*/ } (8)將遞增計數(shù)器A作為寄存器組C、S這兩者的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行C[a]←(C[a]+S[a])%2n的指令 /*...這條指令表示將C[a]和S[a]相加后,再模2n,并將結(jié)果傳送到寄存器組C中序號為a的單元中,以實現(xiàn)第三次加密,...*/ } (9)將遞增計數(shù)器A作為寄存器組K的相對地址控制寄存器接通,寄存器組K作為寄存器組S的相對地址控制寄存器接通,將寄存器組S中各單元都設(shè)為0,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[K[a]]←S[K[a]]+1的指令 /*...a表示遞增計數(shù)器A中的數(shù)值,K[a]表示寄存器組K中序號為a的單元,S[K[a]]表示寄存器組S中由K[a]接通的單元,即表示寄存器組S中序號等于K[a]中數(shù)據(jù)的單元,這條指令是將S[K[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到S[K[a]],...*/ } (10)將計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞增計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←(S[a]+R)→R的指令 /*...這條指令是將S[a]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給S[a],同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組S中整數(shù)的累加,本循環(huán)結(jié)束時,S[2n-1]中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,實際上本循環(huán)結(jié)束時S[2n-1]中的數(shù)據(jù)為0,但只要能實現(xiàn)四個寄存器組中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,...*/ } (11)將遞增計數(shù)器A作為寄存器組K和寄存器組C的相對地址控制寄存器接通,將寄存器組K作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行R←S[K[a]]-1→S[K[a]]的指令 /*...這條指令表示將S[K[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到寄存器R,同時也傳送到S[K[a]],以實現(xiàn)將寄存器組K中序號為a單元中數(shù)據(jù)按照從小到大在排序后新數(shù)列中的位置序號算出,...*/ 執(zhí)行Port←(R+C[a])%2n的指令 /*...port,表示輸出端口或輸出線路,這條指令表示將寄存器R中的數(shù)據(jù)與C[a]中的數(shù)據(jù)相加,并模2n,然后輸出,這一步功能是利用序號碼加密,這是第四次加密,并向外傳送,...*/ } (12)將遞增計數(shù)器A作為寄存器組K、S、T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←(K[a]+T[a])%2n的指令 /*...這條指令表示將K[a]和T[a]相加后,再模2n,并將結(jié)果傳送S[a]到中,以實現(xiàn)更新用來產(chǎn)生密鑰的參數(shù),為加密下一組明文做準(zhǔn)備,...*/ } } 密碼機解密工作流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)(每個整數(shù)為n比特)的數(shù)列,并將該數(shù)列保存在寄存器組S中, 2將密文分組逐組輸入寄存器組C中,并且每輸入一組密文后做下列運算 {/*...第一層循環(huán),密文分組長為2n×n比特,當(dāng)最后一組密文解密完畢時跳出循環(huán)...*/ (1)將遞增計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,寄存器組S作為寄存器組K的相對地址控制寄存器接通,并將寄存器組K中各單元都設(shè)為0,將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[S[a]]←K[S[a]]+1的指令 /*...a表示遞增計數(shù)器A中的數(shù)值,S[a]表示寄存器組S中序號為a的單元,K[S[a]]表示寄存器組K中由S[a]接通的單元,即表示寄存器組K中序號等于S[a]中數(shù)據(jù)的單元,這條指令是將K[S[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到K[S[a]],...*/ } (2)將遞減計數(shù)器D作為寄存器組T、寄存器組K的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞減計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ 執(zhí)行T[d]←(K[d]+R)→R的指令 /*...d表示遞減計數(shù)器D中的數(shù)據(jù),K[d]表示寄存器組K中序號為d的單元,T[d]表示寄存器組T中序號為d的單元,這條指令是將K[d]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給寄存器組T中序號為d的單元,同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組K中整數(shù)的累加,本循環(huán)結(jié)束時,T
中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,所以實際上本循環(huán)結(jié)束時T
中的數(shù)據(jù)為0,但只要能實現(xiàn)四組寄存器中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,當(dāng)d等于-1時,自動結(jié)束本循環(huán),往下執(zhí)行...*/ } (3)將遞增計數(shù)器A作為寄存器組S和寄存器組K的相對地址控制寄存器接通,將寄存器組S作為寄存器組T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[a]←(T[S[a]]-1)→T[S[a]]的指令 /*...a為遞增計數(shù)器A中的數(shù)據(jù),S[a]、K[a]分別表示寄存器組S、寄存器組K中序號為a的單元,T[S[a]]表示寄存器組T中序號等于S[a]中內(nèi)容的單元,這條指令表示將T[S[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到K[a],同時也傳送到T[S[a]],以實現(xiàn)算出序號碼,...*/ } (4)將遞增計數(shù)器A作為寄存器組K、T的相對地址控制寄存器接通,將寄存器組K作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行T[a]←S[K[a]]^m的指令 /*...S[K[a]]表示寄存器組S中序號等于K[a]中數(shù)據(jù)的單元,這條指令表示將S[K[a]]中數(shù)據(jù)與m作互異運算,并將結(jié)果保存在寄存器組T中序號等于a的單元,m為常數(shù),...*/ } (5)將遞增計數(shù)器A作為寄存器組T、S、C這三者的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán)往下執(zhí)行,...*/ 執(zhí)行R←2n-((T[a]*T[a]+T[a])/2+S[a])%(2n)的指令 /*...這條指令表示將T[a]中整數(shù)的平方與T[a]中整數(shù)相加后,以2整除,接著與S[a]相加,再模2n,然后用2n減去前述模2n之后的結(jié)果,并將結(jié)果傳送寄存器R,...*/ 執(zhí)行C[a]←(R+C[a])%(2n)的指令 /*...這條指令表示將C[a]中數(shù)據(jù)與R中數(shù)據(jù)相加,再模2n,并將結(jié)果傳送C[a],以實現(xiàn)解除第三次加密,...*/ } (6)將遞增計數(shù)器A作為寄存器組T的相對地址控制寄存器接通,寄存器組T作為寄存器組S的相對地址控制寄存器接通,將寄存器組S中各單元都設(shè)為0,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[T[a]]←S[T[a]]+1的指令 /*...a表示遞增計數(shù)器A中的數(shù)值,T[a]表示寄存器組T中序號為a的單元,S[T[a]]表示寄存器組S中由T[a]接通的單元,即表示寄存器組S中序號等于T[a]中數(shù)據(jù)的單元,這條指令是將S[T[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到S[T[a]],...*/ } (7)將計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞增計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←(S[a]+R)→R的指令 /*...這條指令是將S[a]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給S[a],同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組S中整數(shù)的累加,本循環(huán)結(jié)束時,S[2n-1]中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,實際上本循環(huán)結(jié)束時S[2n-1]中的數(shù)據(jù)為0,但只要能實現(xiàn)四組寄存器中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,...*/ } (8)將遞增計數(shù)器A作為寄存器組C和寄存器組T的相對地址控制寄存器接通,將寄存器組T作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行R←S[T[a]]-1→S[T[a]]的指令 /*...這條指令表示將S[T[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到寄存器R,同時也傳送到S[T[a]],以實現(xiàn)算出序號碼,...*/ 執(zhí)行C[a]←(2n-R+C[a])%2n的指令 /*...這條指令表示用2n減去寄存器R中的數(shù)據(jù)再與C[a]中的數(shù)據(jù)相加,并模2n,并將結(jié)果傳送到C[a],以實現(xiàn)解除第四次加密,...*/ } (9)執(zhí)行R←(K[1]+(T
^m))%2n的指令 /*...即將寄存器組T中第1個單元中的數(shù)據(jù)與m作互異運算,將互異結(jié)果與寄存器組K中第2個單元中的數(shù)據(jù)相加,再模2n,并將結(jié)果傳送到寄存器R,...*/ 將遞增計數(shù)器A作為寄存器組S、寄存器組K的相對地址控制寄存器接通,將寄存器組K作為寄存器組C的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←C[K[a]]^(((R*R+R)/2)%(2n))的指令 /*...這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加,接著以2整除,然后模2n,再與寄存器組C中第K[a]+1個單元中數(shù)據(jù)互異,并將運算結(jié)果傳送到存器組S的第a+1個單元,以實現(xiàn)解除第二次加密,...*/ 執(zhí)行R←((S[a]*S[a]+S[a]*3)/2+R)%(2n)的指令 /*...這條指令表示將S[a]中數(shù)據(jù)與3相乘后的數(shù)據(jù)與S[a]中數(shù)據(jù)的平方相加,接著以2整除,然后加上寄存器R中的數(shù)據(jù),再模2n,并將運算結(jié)果傳送到存器R,為解密下一單元做準(zhǔn)備,...*/ } (10)執(zhí)行R←(K[2n-1]+(T[2n-2]^m))%2n的指令 /*...即將寄存器組T中第2n-1個單元中的數(shù)據(jù)與m作互異運算,將互異結(jié)果與寄存器組K中第2n個單元中的數(shù)據(jù)相加,再模2n,并將結(jié)果傳送到寄存器R,...*/ 將遞減計數(shù)器D作為寄存器組C和寄存器組S的相對地址控制寄存器接通,并將計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ 執(zhí)行C[d]←(S[d])^(((R*R+R)/2)%(2n))→Port的指令 /*...d為遞減計數(shù)器D中的數(shù)據(jù),S[d]、C[d]分別表示寄存器組S、寄存器組C中序號為d的單元,這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加后,以2整除,然后模2n,再與S[d]中數(shù)據(jù)作異或運算,以實現(xiàn)解除第一次加密,并將結(jié)果傳送到C[d],同時輸出明文...*/ 執(zhí)行R←((C[d]*C[d]+C[d]*3)/2+R)%2n的指令 /*...將寄存器組C中第d+1個單元中的數(shù)據(jù)乘以3的結(jié)果與寄存器組C第d+1個單元中的數(shù)據(jù)平方相加,接著以2整除,然后與寄存器R中數(shù)據(jù)相加,再模2n,并將運算結(jié)果傳送到寄存器R中...*/ } (11)將遞增計數(shù)器A作為寄存器組S、T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←(S[a]+T[a])%2n的指令 /*...這條指令表示將S[a]和T[a]相加后,再模2n,并將結(jié)果傳送S[a]到中,以實現(xiàn)更新用來產(chǎn)生密鑰的參數(shù),為解密下一組密文做準(zhǔn)備,...*/ } }
具體實施例方式 本發(fā)明的基本特征是用某種算法計算整數(shù)數(shù)列P的序號碼,并以序號碼為密鑰對明文加密。所述序號碼是指按照某種規(guī)則對一個數(shù)列重新排序得到新數(shù)列后,原數(shù)列中數(shù)據(jù)在新數(shù)列中的位置序號代碼。所述按照某種規(guī)則對一個數(shù)列重新排序指以下四者之一①按照從大到小的順序?qū)σ粋€數(shù)列重新排序,②按照從小到大的順序?qū)σ粋€數(shù)列重新排序,③按照從大到小的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置,④按照從小到大的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置。由于序號碼記錄的是位置序號,序號碼中的整數(shù)總是互不相同的,因此序號碼來加密信息時,具有其他任何加密方法不具有的特性第一由于序號碼是通過數(shù)學(xué)中的大小關(guān)系產(chǎn)生的,任何破解者無法根據(jù)數(shù)列P的序號碼推出數(shù)列P,第二用序號碼中的數(shù)據(jù)直接與明文進(jìn)行異或、加、減等運算時具有高效地破壞頻率特征的功能,第三可根據(jù)序號碼的位置序號重排明文中各代碼的位置。
在計算機上實驗發(fā)現(xiàn),當(dāng)數(shù)列P中的整數(shù)都是n比特,數(shù)列P的個數(shù)為2n的條件下當(dāng)n≥3時,用計數(shù)排序法計算序號碼比用快速排序法計算序號碼快,當(dāng)n<3時,用計數(shù)排序法計算序號碼比用快速排序法計算排序碼慢,因此本發(fā)明主張當(dāng)n≥3時,用計數(shù)排序法計算序號碼,當(dāng)n<3時,用快速排序法計算序號碼。對計算序號碼而言,在大多數(shù)情況下,計數(shù)排序法不僅速度快,而且不用對數(shù)列P進(jìn)行排序也可計算序號碼,這是其他排序法難以做到的,尤其是采用硬件實現(xiàn)本發(fā)明時,采用計數(shù)排序法來計算序號碼的電路設(shè)計更簡單。
本發(fā)明在利用序號碼對數(shù)字信息的加密運算中,既可根據(jù)序號碼重新排列明文中各代碼的位置,可直接利用序號碼與明文作異或、同或、加、減、乘、除、取模等運算,以生成密文實現(xiàn)對明文的加密。
本發(fā)明第一個實施例提供一種加密方法,其加密流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,并且數(shù)列P中每個整數(shù)可用n比特表示, 2將明文分組逐組輸入數(shù)列C中,并且每輸入一組明文后做下列運算 {/*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán)...*/ ①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中, ②R=g(P) /*...這里表示R是數(shù)列P中數(shù)據(jù)作函數(shù)g運算后得到的結(jié)果...*/ d=2n-1 {/*...第二層循環(huán),當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ t[d]=c[d]^(((R*R+R)/2)%(2)) R=((c[d]*c[d]+c[d]*3)/2+R)%2 /*...t[d]、c[d]分別表示數(shù)列T、數(shù)列C中第d+1個整數(shù)...*/ d=d-1 } ③R=h(P) /*...這里表示R是數(shù)列P中數(shù)據(jù)作函數(shù)h運算后得到的結(jié)果...*/ a=0 {/*...第二層循環(huán),當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ c[k[a]]=t[a]^(((R*R+R)/2)%(2n)) /*...c[k[a]]表示密文分組數(shù)列C中第k[a]+1個整數(shù),k[a]、t[a]分別表示數(shù)列K、數(shù)列T中第a+1個整數(shù),這里將數(shù)列T重排位置并將結(jié)果保存在密文分組數(shù)列C中...*/ R=((t[a]*t[a]+t[a]*3)/2+R)%(2n) a=a+1 } ④i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ q[i]=f(p[k[i]])/*...f(p[k[i]])表示以為p[k[i]]變量,作某種函數(shù)運算...*/ i=i+1 } ⑤i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ r[i]=((q[i]*q[i]+q[i])/2+p[i])%2n i=i+1 } ⑥用計數(shù)排序法計算將數(shù)列Q按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中, ⑦i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ c[i]=(k[i]+r[i]+c[i])%2n/*...加密...*/ i=i+1 } 輸出分組密文數(shù)列C ⑧i=0 針對i進(jìn)行循環(huán)計算 { /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/ p[i]=(q[i]+t[i])%2n /*...對數(shù)列Q更新,并將結(jié)果保存在數(shù)列P中...*/ i=i+1 } } 本發(fā)明第二個實施例提供一種密碼機,該密碼機的結(jié)構(gòu)如下 有一個處理器CPU,該處理器CPU集成有運算寄存器R、遞增計數(shù)器A、遞減計數(shù)器D和四組運算寄存器。并且,所述四組運算寄存器分別為寄存器組S、寄存器組K、寄存器組T、寄存器組C,每個寄存器組都有2n個單元,每個單元為可保存n比特信息,每個寄存器組不僅可寄存數(shù)據(jù),還可作為寄存器組中單元的相對地址控制寄存器,處理器CPU通過數(shù)據(jù)總線接收和輸出信息,處理器CPU每執(zhí)行一個跳轉(zhuǎn)指令遞增計數(shù)器A加1,遞減計數(shù)器D減1,當(dāng)這些計數(shù)器與地址控制線路接通時,計數(shù)器中的數(shù)值就決定該地址控制線路接通的運算寄存器組中哪個單元能接通使用,并且接通的單元序號就等于計數(shù)器中的數(shù)值,即計數(shù)器可作為前述四組運算寄存器的相對地址控制寄存器,計數(shù)器還用于控制循環(huán)次數(shù),所述寄存器R只有一個單元且能容納n比特的信息,并且密碼機的工作流程分為加密工作流程和解密工作流程這兩部分,其中, 密碼機加密工作流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)(每個整數(shù)為n比特)的數(shù)列,并將該數(shù)列保存在寄存器組S中, 2將明文分組逐組輸入寄存器組C中,并且每輸入一組明文后做下列運算 {/*...第一層循環(huán),明文分組長為2n×n比特,當(dāng)最后一組明文加密完畢時跳出循環(huán)...*/ (1)將遞增計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,寄存器組S作為寄存器組K的相對地址控制寄存器接通,并將寄存器組K中各單元都設(shè)為0,將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[S[a]]←K[S[a]]+1的指令 /*...a表示遞增計數(shù)器A中的數(shù)值,S[a]表示寄存器組S中序號為a的單元,K[S[a]]表示寄存器組K中由S[a]接通的單元,即表示寄存器組K中序號等于S[a]中數(shù)據(jù)的單元,這條指令是將K[S[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到K[S[a]],...*/ } (2)將遞減計數(shù)器D作為寄存器組K、寄存器組T的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞減計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ 執(zhí)行T[d]←(K[d]+R)→R的指令 /*...d表示遞減計數(shù)器D中的數(shù)據(jù),K[d]表示寄存器組K中序號為d的單元,T[d]表示寄存器組T中序號為d的單元,這條指令是將K[d]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給寄存器組T中序號為d的單元,同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組K中整數(shù)的累加,本循環(huán)結(jié)束時,T
中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,所以實際上本循環(huán)結(jié)束時T
中的數(shù)據(jù)為0,但只要能實現(xiàn)四組寄存器中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,...*/ } (3)將遞增計數(shù)器A作為寄存器組S和寄存器組K的相對地址控制寄存器接通,將寄存器組S作為寄存器組T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[a]←(T[S[a]]-1)→T[S[a]]的指令 /*...a為遞增計數(shù)器A中的數(shù)據(jù),S[a]、K[a]分別表示寄存器組S、寄存器組K中序號為a的單元,T[S[a]]表示寄存器組T中序號等于S[a]中內(nèi)容的單元,這條指令表示將T[S[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到K[a],同時也傳送到T[S[a]],以實現(xiàn)算出序號碼,...*/ } (4)執(zhí)行R←(K[2n-1]+S[K[2n-2]])%2n的命令 /*...這條指令是將寄存器組S中序號等于K[2n-2]中數(shù)據(jù)的單元數(shù)據(jù)與寄存器組K中第2n個單元中的數(shù)據(jù)相加,然后模2n,并將結(jié)果傳送到寄存器R中...*/ 遞減計數(shù)器D作為寄存器組C和寄存器組T的相對地址控制寄存器接通,并將計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ 執(zhí)行T[d]←(C[d])^(((R*R+R)/2)%(2n))的指令 /*...d為遞減計數(shù)器D中的數(shù)據(jù),T[d]、C[d]分別表示寄存器組T、寄存器組C中序號為d的單元,這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加后,以2整除,然后模2n,再與C[d]中數(shù)據(jù)作異或運算,并將結(jié)果傳送到T[d],即對分組信息進(jìn)行第一次加密...*/ 執(zhí)行R←((C[d]*C[d]+C[d]*3)/2+R)%2n的指令 /*...將寄存器組C中第d+1個單元中的數(shù)據(jù)乘以3的結(jié)果與寄存器組C第d+1個單元中的數(shù)據(jù)平方相加,接著以2整除,然后與寄存器R中數(shù)據(jù)相加,再模2n,并將運算結(jié)果傳送到寄存器R中...*/ } (5)執(zhí)行R←(K[1]+S[K
])%2n的指令 /*...即將寄存器組K中第2個單元中的數(shù)據(jù)和寄存器組S中第K
+1個單元中的數(shù)據(jù)相加,并將結(jié)果傳送到寄存器R,...*/ 將遞增計數(shù)器A作為寄存器組T和寄存器組K的相對地址控制寄存器接通,將寄存器組K作為寄存器組C的相對地址控制寄存器接通,接著將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行C[K[a]]←T[a]^(((R*R+R)/2)%(2n))的指令 /*...這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加,接著以2整除,然后模2n,再與寄存器組T中第a個單元中數(shù)據(jù)互異,并將運算結(jié)果傳送到存器組C的第K[a]+1個單元,即對分組信息進(jìn)行第二次加密,...*/ 執(zhí)行R←((T[a]*T[a]+T[a]*3)/2+R)%(2n)的指令 /*...這條指令表示將T[a]中數(shù)據(jù)與3相乘后的積與T[a]中數(shù)據(jù)的平方相加,接著以2整除,然后加上寄存器R中的數(shù)據(jù),再模2n,并將運算結(jié)果傳送到存器R,為加密下一單元做準(zhǔn)備,...*/ } (6)將遞增計數(shù)器A作為寄存器組K的相對地址控制寄存器接通,將寄存器組K作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[a]←S[K[a]]^m的指令 /*...S[K[a]]表示寄存器組S中序號等于K[a]中數(shù)據(jù)的單元,這條指令表示將S[K[a]]中數(shù)據(jù)與m作互異運算,并將結(jié)果保存在寄存器組K中序號等于a的單元,m為常數(shù), } (7)將遞增計數(shù)器A作為寄存器組K、S這兩者的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←((K[a]*K[a]+K[a])/2+S[a])%(2n)的指令 /*...這條指令表示將K[a]中整數(shù)的平方與K[a]中整數(shù)相加,接著以2整除,然后與S[a]中數(shù)據(jù)相加,再模2n,并將結(jié)果傳送到寄存器組S中序號為a的單元中,以便后面實施第三次加密,...*/ } (8)將遞增計數(shù)器A作為寄存器組C、S這兩者的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行C[a]←(C[a]+S[a])%2n的指令 /*...這條指令表示將C[a]和S[a]相加后,再模2n,并將結(jié)果傳送到寄存器組C中序號為a的單元中,以實現(xiàn)第三次加密,...*/ } (9)將遞增計數(shù)器A作為寄存器組K的相對地址控制寄存器接通,寄存器組K作為寄存器組S的相對地址控制寄存器接通,將寄存器組S中各單元都設(shè)為0,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[K[a]]←S[K[a]]+1的指令 /*...a表示遞增計數(shù)器A中的數(shù)值,K[a]表示寄存器組K中序號為a的單元,S[K[a]]表示寄存器組S中由K[a]接通的單元,即表示寄存器組S中序號等于K[a]中數(shù)據(jù)的單元,這條指令是將S[K[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到S[K[a]],...*/ } (10)將計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞增計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←(S[a]+R)→R的指令 /*...這條指令是將S[a]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給S[a],同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組S中整數(shù)的累加,本循環(huán)結(jié)束時,S[2n-1]中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,實際上本循環(huán)結(jié)束時S[2n-1]中的數(shù)據(jù)為0,但只要能實現(xiàn)四個寄存器組中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,...*/ } (11)將遞增計數(shù)器A作為寄存器組K和寄存器組C的相對地址控制寄存器接通,將寄存器組K作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行R←S[K[a]]-1→S[K[a]]的指令 /*...這條指令表示將S[K[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到寄存器R,同時也傳送到S[K[a]],以實現(xiàn)將寄存器組K中序號為a單元中數(shù)據(jù)按照從小到大在排序后新數(shù)列中的位置序號算出,...*/ 執(zhí)行Port←(R+C[a])%2n的指令 /*...port,表示輸出端口或輸出線路,這條指令表示將寄存器R中的數(shù)據(jù)與C[a]中的數(shù)據(jù)相加,并模2n,然后輸出,這一步功能是利用序號碼加密,這是第四次加密,并向外傳送,...*/ } (12)將遞增計數(shù)器A作為寄存器組K、S、T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←(K[a]+T[a])%2n的指令 /*...這條指令表示將K[a]和T[a]相加后,再模2n,并將結(jié)果傳送S[a]到中,以實現(xiàn)更新用來產(chǎn)生密鑰的參數(shù),為加密下一組明文做準(zhǔn)備,...*/ } } 密碼機解密工作流程如下 1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)(每個整數(shù)為n比特)的數(shù)列,并將該數(shù)列保存在寄存器組S中, 2將密文分組逐組輸入寄存器組C中,并且每輸入一組密文后做下列運算 {/*...第一層循環(huán),密文分組長為2n×n比特,當(dāng)最后一組密文解密完畢時跳出循環(huán)...*/ (1)將遞增計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,寄存器組S作為寄存器組K的相對地址控制寄存器接通,并將寄存器組K中各單元都設(shè)為0,將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[S[a]]←K[S[a]]+1的指令 /*...a表示遞增計數(shù)器A中的數(shù)值,S[a]表示寄存器組S中序號為a的單元,K[S[a]]表示寄存器組K中由S[a]接通的單元,即表示寄存器組K中序號等于S[a]中數(shù)據(jù)的單元,這條指令是將K[S[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到K[S[a]],...*/ } (2)將遞減計數(shù)器D作為寄存器組T、寄存器組K的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞減計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ 執(zhí)行T[d]←(K[d]+R)→R的指令 /*...d表示遞減計數(shù)器D中的數(shù)據(jù),K[d]表示寄存器組K中序號為d的單元,T[d]表示寄存器組T中序號為d的單元,這條指令是將K[d]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給寄存器組T中序號為d的單元,同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組K中整數(shù)的累加,本循環(huán)結(jié)束時,T
中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,所以實際上本循環(huán)結(jié)束時T
中的數(shù)據(jù)為0,但只要能實現(xiàn)四組寄存器中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,當(dāng)d等于-1時,自動結(jié)束本循環(huán),往下執(zhí)行...*/ } (3)將遞增計數(shù)器A作為寄存器組S和寄存器組K的相對地址控制寄存器接通,將寄存器組S作為寄存器組T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行K[a]←(T[S[a]]-1)→T[S[a]]的指令 /*...a為遞增計數(shù)器A中的數(shù)據(jù),S[a]、K[a]分別表示寄存器組S、寄存器組K中序號為a的單元,T[S[a]]表示寄存器組T中序號等于S[a]中內(nèi)容的單元,這條指令表示將T[S[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到K[a],同時也傳送到T[S[a]],以實現(xiàn)算出序號碼,...*/ } (4)將遞增計數(shù)器A作為寄存器組K、T的相對地址控制寄存器接通,將寄存器組K作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行T[a]←S[K[a]]^m的指令 /*...S[K[a]]表示寄存器組S中序號等于K[a]中數(shù)據(jù)的單元,這條指令表示將S[K[a]]中數(shù)據(jù)與m作互異運算,并將結(jié)果保存在寄存器組T中序號等于a的單元,m為常數(shù),...*/ } (5)將遞增計數(shù)器A作為寄存器組T、S、C這三者的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán)往下執(zhí)行,...*/ 執(zhí)行R←2n-((T[a]*T[a]+T[a])/2+S[a])%(2n)的指令 /*...這條指令表示將T[a]中整數(shù)的平方與T[a]中整數(shù)相加后,以2整除,接著與S[a]相加,再模2n,然后用2n減去前述模2n之后的結(jié)果,并將結(jié)果傳送寄存器R,...*/ 執(zhí)行C[a]←(R+C[a])%(2n)的指令 /*...這條指令表示將C[a]中數(shù)據(jù)與R中數(shù)據(jù)相加,再模2n,并將結(jié)果傳送C[a],以實現(xiàn)解除第三次加密,...*/ } (6)將遞增計數(shù)器A作為寄存器組T的相對地址控制寄存器接通,寄存器組T作為寄存器組S的相對地址控制寄存器接通,將寄存器組S中各單元都設(shè)為0,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[T[a]]←S[T[a]]+1的指令 /*...a表示遞增計數(shù)器A中的數(shù)值,T[a]表示寄存器組T中序號為a的單元,S[T[a]]表示寄存器組S中由T[a]接通的單元,即表示寄存器組S中序號等于T[a]中數(shù)據(jù)的單元,這條指令是將S[T[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到S[T[a]],...*/ } (7)將計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞增計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 {/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←(S[a]+R)→R的指令 /*...這條指令是將S[a]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給S[a],同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組S中整數(shù)的累加,本循環(huán)結(jié)束時,S[2n-1]中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,實際上本循環(huán)結(jié)束時S[2n-1]中的數(shù)據(jù)為0,但只要能實現(xiàn)四組寄存器中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,...*/ } (8)將遞增計數(shù)器A作為寄存器組C和寄存器組T的相對地址控制寄存器接通,將寄存器組T作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行R←S[T[a]]-1→S[T[a]]的指令 /*...這條指令表示將S[T[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到寄存器R,同時也傳送到S[T[a]],以實現(xiàn)算出序號碼,...*/ 執(zhí)行C[a]←(2n-R+C[a])%2n的指令 /*...這條指令表示用2n減去寄存器R中的數(shù)據(jù)再與C[a]中的數(shù)據(jù)相加,并模2n,并將結(jié)果傳送到C[a],以實現(xiàn)解除第四次加密,...*/ } (9)執(zhí)行R←(K[1]+(T
^m))%2n的指令 /*...即將寄存器組T中第1個單元中的數(shù)據(jù)與m作互異運算,將互異結(jié)果與寄存器組K中第2個單元中的數(shù)據(jù)相加,再模2n,并將結(jié)果傳送到寄存器R,...*/ 將遞增計數(shù)器A作為寄存器組S、寄存器組K的相對地址控制寄存器接通,將寄存器組K作為寄存器組C的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←C[K[a]]^(((R*R+R)/2)%(2n))的指令 /*...這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加,接著以2整除,然后模2n,再與寄存器組C中第K[a]+1個單元中數(shù)據(jù)互異,并將運算結(jié)果傳送到存器組S的第a+1個單元,以實現(xiàn)解除第二次加密,...*/ 執(zhí)行R←((S[a]*S[a]+S[a]*3)/2+R)%(2n)的指令 /*...這條指令表示將S[a]中數(shù)據(jù)與3相乘后的數(shù)據(jù)與S[a]中數(shù)據(jù)的平方相加,接著以2整除,然后加上寄存器R中的數(shù)據(jù),再模2n,并將運算結(jié)果傳送到存器R,為解密下一單元做準(zhǔn)備,...*/ } (10)執(zhí)行R←(K[2n-1]+(T[2n-2]^m))%2n的指令 /*...即將寄存器組T中第2n-1個單元中的數(shù)據(jù)與m作互異運算,將互異結(jié)果與寄存器組K中第2n個單元中的數(shù)據(jù)相加,再模2n,并將結(jié)果傳送到寄存器R,...*/ 將遞減計數(shù)器D作為寄存器組C和寄存器組S的相對地址控制寄存器接通,并將計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/ 執(zhí)行C[d]←(S[d])^(((R*R+R)/2)%(2n))→Port的指令 /*...d為遞減計數(shù)器D中的數(shù)據(jù),S[d]、C[d]分別表示寄存器組S、寄存器組C中序號為d的單元,這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加后,以2整除,然后模2n,再與S[d]中數(shù)據(jù)作異或運算,以實現(xiàn)解除第一次加密,并將結(jié)果傳送到C[d],同時輸出明文...*/ 執(zhí)行R←((C[d]*C[d]+C[d]*3)/2+R)%2n的指令 /*...將寄存器組C中第d+1個單元中的數(shù)據(jù)乘以3的結(jié)果與寄存器組C第d+1個單元中的數(shù)據(jù)平方相加,接著以2整除,然后與寄存器R中數(shù)據(jù)相加,再模2n,并將運算結(jié)果傳送到寄存器R中...*/ } (11)將遞增計數(shù)器A作為寄存器組S、T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令 { /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/ 執(zhí)行S[a]←(S[a]+T[a])%2n的指令 /*...這條指令表示將S[a]和T[a]相加后,再模2n,并將結(jié)果傳送S[a]到中,以實現(xiàn)更新用來產(chǎn)生密鑰的參數(shù),為解密下一組密文做準(zhǔn)備,...*/ } } 可以以多種方法來實現(xiàn)本發(fā)明的實施例,本發(fā)明不僅可用軟件實現(xiàn)也可用硬件實現(xiàn)。當(dāng)用軟件實現(xiàn)時,包括寫在計算機可讀記錄介質(zhì)上的計算機可讀代碼。計算機可讀記錄介質(zhì)可以是任意類型的記錄設(shè)備,在其中數(shù)據(jù)以計算機可讀形式存儲。計算機可讀記錄介質(zhì)包括、但不局限于ROM、RAM、CD-ROM、磁帶、軟盤、硬盤、移動存儲盤、光數(shù)據(jù)存儲、和載波(例如,通過因特網(wǎng)的數(shù)據(jù)傳輸)。計算機可讀記錄介質(zhì)可以分布在多個連接到網(wǎng)絡(luò)的計算機系統(tǒng)上,以使得計算機可讀代碼能夠以分布方式寫到其上以及從其上執(zhí)行。另外,實現(xiàn)本發(fā)明的實施例所需要的功能程序、代碼或代碼段可以被本領(lǐng)域的普通技術(shù)人員解釋。
盡管已經(jīng)參照本發(fā)明的給定優(yōu)選實施例示出并描述了本發(fā)明,但是本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,在不脫離如所附權(quán)利要求所限定的本發(fā)明的精神和范圍的條件下,可以在這里進(jìn)行形式和細(xì)節(jié)上的各種變化。
產(chǎn)業(yè)上的可利用性 根據(jù)本發(fā)明的加密方法可以用于加密各種數(shù)字信息和文件,并且生成的密文無有效方法進(jìn)行破解。
權(quán)利要求
1.一種加密方法,其加密流程如下
1用預(yù)定算法計算數(shù)列P的序號碼,
2以序號碼為密鑰對明文分組加密,其中,
所述預(yù)定算法是指用于排序的方法,并且是下列其中一種計數(shù)排序法、快速排序算法、選擇排序算法、冒泡排序算法、堆排序算法、歸并排序算法、希爾排序算法、插入排序算法、二叉樹排序算法、桶排序算法、基數(shù)排序算法,
所述序號碼是指按照某種規(guī)則對一個數(shù)列重新排序得到新數(shù)列后,原數(shù)列中數(shù)據(jù)在新數(shù)列中的位置序號代碼,并且,所述按照某種規(guī)則對一個數(shù)列重新排序指以下四者之一①按照從大到小的順序?qū)σ粋€數(shù)列重新排序,②按照從小到大的順序?qū)σ粋€數(shù)列重新排序,③按照從大到小的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置,④按照從小到大的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置,
所述以序號碼為密鑰對明文分組加密,是指采用以下算法中一種或多種根據(jù)序號碼重新排列明文分組各代碼的位置,直接利用序號碼與明文分組的數(shù)據(jù)做異或、同或、加、減、乘、除、取模等運算來加密。
2.一種加密方法,其加密流程如下
1用計數(shù)排序法計算數(shù)列P的序號碼,
2以序號碼為密鑰對明文分組加密,其中,
所述序號碼是指按照某種規(guī)則對一個數(shù)列重新排序得到新數(shù)列后,原數(shù)列中數(shù)據(jù)在新數(shù)列中的位置序號代碼,并且,所述按照某種規(guī)則對一個數(shù)列重新排序指以下四者之一①按照從大到小的順序?qū)σ粋€數(shù)列重新排序,②按照從小到大的順序?qū)σ粋€數(shù)列重新排序,③按照從大到小的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置,④按照從小到大的順序?qū)σ粋€數(shù)列重新排序,然后在此基礎(chǔ)上再調(diào)整數(shù)列中數(shù)據(jù)的位置,
所述以序號碼為密鑰對明文分組加密,是指采用以下算法中一種或多種根據(jù)序號碼重新排列明文分組中各代碼的位置,直接以序號碼為密鑰對明文分組的數(shù)據(jù)做異或、同或、加、減、乘、除、取模等運算來加密,
所述用計數(shù)排序法計算數(shù)列P的序號碼,包括四步(a)對計數(shù)數(shù)列清0,(b)用計數(shù)數(shù)列記錄數(shù)列P中各種數(shù)值的出現(xiàn)次數(shù),(c)對計數(shù)數(shù)列中的數(shù)據(jù)累加,(d)利用累加結(jié)果和數(shù)列P中的數(shù)據(jù)計算序號碼,并且,所述數(shù)列P能以下列三種形式之一出現(xiàn)(1)數(shù)列P在步驟(b)之前就已產(chǎn)生,(2)數(shù)列P在步驟(b)中產(chǎn)生,并且每產(chǎn)生一個數(shù)列P的數(shù)據(jù)p[i],就將計數(shù)數(shù)列中與數(shù)據(jù)p[i]的值對應(yīng)的數(shù)據(jù)加1,(3)數(shù)列P在步驟(b)中產(chǎn)生,并且在數(shù)列P中數(shù)據(jù)都產(chǎn)生之后,再用計數(shù)數(shù)列記錄數(shù)列P中各種數(shù)值的出現(xiàn)次數(shù)。
3.一種加密方法,其加密流程如下
1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,設(shè)置j=0
2將明文分組逐組輸入明文數(shù)列T中,并且每輸入一組明文后做下列運算
{/*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán),明文分組長為2n個單元,每個單元為n個比特,n為正整數(shù)...*/
①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系進(jìn)行排序的序號碼,并將序號碼記錄到數(shù)列K中,
②i=0
針對整數(shù)i做下列循環(huán)運算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
c[j]=(t[i]+k[i])%(2n)
i=i+1
j=j(luò)+1
/*...即用序號碼對明文數(shù)列T加密,其中t[i]表示數(shù)列T中第i+1個整數(shù),k[i]表示數(shù)列K中第i+1個整數(shù),c[j]表示密文數(shù)列C中第j+1個密文,“%”表示mod,...*/
}
③i=0
針對整數(shù)i做下列循環(huán)運算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
p[i]=(p[i]+(t[i]*t[i]+t[i])/2)%(2n)
/*...即用明文數(shù)列T中的數(shù)據(jù)對數(shù)列P更新,其中t[i],p[i]分別表示數(shù)列T、數(shù)列P中第i+1個整數(shù),*表示乘,/表示整除,上式應(yīng)用函數(shù)f(χ)=((χ2+χ)/2)%(2n)對數(shù)列P加密,函數(shù)f(χ)在χ和n都為正整數(shù)的條件下,具有最佳的離散性能...*/
i=i+1
}
}。
4.一種加密方法,其加密流程如下
1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,設(shè)置j=0
2將明文分組逐組輸入明文數(shù)列T中,并且每輸入一組明文后做下列運算
{/*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán),明文分組長為2n個單元,每個單元為n個比特,n為正整數(shù)...*/
①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系進(jìn)行排序的序號碼,并將序號碼記錄到數(shù)列K中,
②i=0
針對整數(shù)i做下列循環(huán)運算
{/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
s[i]=t[k[i]]
i=i+1
/*...即用數(shù)列K中的序號碼重新排列數(shù)列T中各整數(shù)的位置,并將結(jié)果保存在數(shù)列S中,其中k[i]分別表示數(shù)列K中第i+1個整數(shù),t[k[i]]表示數(shù)列T中第k[i]+1個整數(shù),s[i]表示數(shù)列S中第i+1個密文,...
*/
}
③i=0
針對整數(shù)i做下列循環(huán)運算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
c[j]=(s[i]+k[i])%(2n)
i=i+1
j=j(luò)+1
/*...即用序號碼對數(shù)列S繼續(xù)加密,其中s[i]表示數(shù)列S中第i+1個整數(shù),k[i]表示數(shù)列K中第i+1個整數(shù),c[j]表示密文數(shù)列C中第j+1個密文,“%”表示mod,...*/
}
④i=0
針對整數(shù)i做下列循環(huán)運算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
p[i]=(p[i]+(t[i]*t[i]+t[i])/2)%(2n)
/*...即用明文數(shù)列T中的數(shù)據(jù)對數(shù)列P更新,其中t[i],p[i]分別表示數(shù)列T、數(shù)列P中第i+1個整數(shù),*表示乘,/表示整除...*/
i=i+1
}
}。
5.一種加密方法,其加密流程如下
1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,并且數(shù)列P中每個整數(shù)可用n比特表示,設(shè)置j=0,
2將明文分組逐組輸入明文數(shù)列T中,并且每輸入一組明文后做下列運算
{ /*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán)...*/
①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系進(jìn)行排序的序號碼,并將序號碼記錄到數(shù)列K中,
②i=0
針對整數(shù)i做下列循環(huán)運算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
s[i]=t[i]^k[i]
i=i+1
/*...即用序號碼對明文數(shù)列T加密,其中t[i]表示數(shù)列T中第i+1個整數(shù),k[i]表示數(shù)列K中第i+1個整數(shù),s[i]表示整數(shù)數(shù)列s中第i+1個密文,“^”表示異或...*/
}
③i=0
針對整數(shù)i做下列循環(huán)運算
{/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
q[i]=p[k[i]]
i=i+1
/*...依據(jù)數(shù)列K中記錄的序號碼,將用數(shù)列P中的數(shù)據(jù)逆向復(fù)制到數(shù)列Q中,其中q[i]、k[i]分別表示數(shù)列Q、數(shù)列K中第i+1個整數(shù),p[k[i]]表示數(shù)列P中第k[i]+1個整數(shù)...*/
}
④用計數(shù)排序法計算將數(shù)列Q按照大小關(guān)系進(jìn)行排序的序號碼,并將序號碼記錄到數(shù)列K中,
⑤i=0
針對整數(shù)i做下列循環(huán)運算
{/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
c[j+i]=s[k[i]]
i=i+1
/*...即用數(shù)列K中的序號碼重新排列數(shù)列S中各整數(shù)的位置,并將結(jié)果作為密文輸出,其中k[i]分別表示數(shù)列K中第i+1個整數(shù),s[k[i]]表示數(shù)列s中第k[i]+1個整數(shù),c[j+i]表示密文數(shù)列C中第j+i+1個密文,...*/
}
⑥i=0
針對整數(shù)i做下列循環(huán)運算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
p[i]=(q[i]+(t[i]*t[i]+t[i])/2)%(2n)
i=i+1
/*...即用明文數(shù)列T中的數(shù)據(jù)對數(shù)列Q更新,并將更新結(jié)果保存在數(shù)列P中,其中t[i]、p[i]、q[i]分別表示數(shù)列T、數(shù)列P、數(shù)列Q中第i+1個整數(shù),...*/
}
⑦j=j(luò)+2n/*...這里為下一個分組的加密做準(zhǔn)備...*/
}。
6.一種加密方法,其加密流程如下
1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,并且數(shù)列P中每個整數(shù)可用n比特表示,設(shè)置j=0
2將明文分組逐組輸入明文數(shù)列T中,并且每輸入一組明文后做下列運算
{ /*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán)...*/
①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中,
②i=0
針對i進(jìn)行循環(huán)計算
{/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
s[k[i]]=t[i]
/*...s[k[i]]表示數(shù)列S中第k[i]+1個整數(shù),這里將明文分組重排位置并將結(jié)果保存在數(shù)列S中...*/
i=i+1
}
③i=0
針對i進(jìn)行循環(huán)計算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
q[i]=p[k[i]]
i=i+1
}
④i=0
針對i進(jìn)行循環(huán)計算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
r[i]=((q[i]*q[i]+q[i])/2+p[i])%2n
i=i+1
}
⑤用計數(shù)排序法計算將數(shù)列Q按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中,
⑥i=0
針對i進(jìn)行循環(huán)計算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
c[j]=(k[i]+r[i]+s[i])%2n/*...加密...*/
i=i+1
j=j(luò)+1
}
⑦i=0
針對i進(jìn)行循環(huán)計算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
p[i]=(q[i]+t[i])%2n
/*...用明文數(shù)列T對數(shù)列Q更新,并將結(jié)果保存在數(shù)列P中...*/
i=i+1
}
}。
7.一種加密方法,其加密流程如下
1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)的數(shù)列P,并且數(shù)列P中每個整數(shù)可用n比特表示,
2將明文分組逐組輸入數(shù)列C中,并且每輸入一組明文后做下列運算
{/*...第一層循環(huán),當(dāng)最后一個明文分組加密完畢時跳出循環(huán)...*/
①用計數(shù)排序法計算將數(shù)列P按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中,
②R=g(P)
/*...這里表示R是數(shù)列P中數(shù)據(jù)作函數(shù)g運算后得到的結(jié)果...*/
d=2n-1
{/*...第二層循環(huán),當(dāng)d等于-1時,結(jié)束本循環(huán),...*/
t[d]=c[d]^(((R*R+R)/2)%(2n))
R=((c[d]*c[d]+c[d]*3)/2+R)%2n
/*...t[d]、c[d]分別表示數(shù)列T、數(shù)列C中第d+1個整數(shù)...*/
d=d-1
}
③R=h(P)
/*...這里表示R是數(shù)列P中數(shù)據(jù)作函數(shù)h運算后得到的結(jié)果...*/
a=0
{/*...第二層循環(huán),當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
c[k[a]]=t[a]^(((R*R+R)/2)%(2n))
/*...c[k[a]]表示密文分組數(shù)列C中第k[a]+1個整數(shù),k[a]、t[a]分別表示數(shù)列K、數(shù)列T中第a+1個整數(shù),這里將數(shù)列T重排位置并將結(jié)果保存在密文分組數(shù)列C中...*/
R=((t[a]*t[a]+t[a]*3)/2+R)%(2n)
a=a+1
}
④i=0
針對i進(jìn)行循環(huán)計算
{ /*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
q[i]=f(p[k[i]])/*...f(p[k[i]])表示以為p[k[i]]變量,作某種函數(shù)運算...*/
i=i+1
}
⑤i=0
針對i進(jìn)行循環(huán)計算
{/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
r[i]=((q[i]*q[i]+q[i])/2+p[i])%2n
i=i+1
}
⑥用計數(shù)排序法計算將數(shù)列Q按照大小關(guān)系排序的序號碼,并將序號碼記錄到數(shù)列K中,
⑦i=0
針對i進(jìn)行循環(huán)計算
{/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
c[i]=(k[i]+r[i]+c[i])%2n/*...加密...*/
i=i+1
}
輸出分組密文數(shù)列C
⑧i=0
針對i進(jìn)行循環(huán)計算
{/*...第二層循環(huán),i等于2n時跳出循環(huán)...*/
p[i]=(q[i]+t[i])%2n
/*...對數(shù)列Q更新,并將結(jié)果保存在數(shù)列P中...*/
i=i+1
}
}。
8、一種密碼機,該密碼機的結(jié)構(gòu)工作原理如下
有一個處理器CPU,該處理器CPU集成有運算寄存器R、遞增計數(shù)器A、遞減計數(shù)器D和四組運算寄存器。并且,所述四組運算寄存器分別為寄存器組S、寄存器組K、寄存器組T、寄存器組C,每個寄存器組都有2n個單元,每個單元為可保存n比特信息,每個寄存器組不僅可寄存數(shù)據(jù),還可作為寄存器組中單元的相對地址控制寄存器,處理器CPU通過數(shù)據(jù)總線接收和輸出信息,處理器CPU每執(zhí)行一個跳轉(zhuǎn)指令遞增計數(shù)器A加1,遞減計數(shù)器D減1,當(dāng)這些計數(shù)器與地址控制線路接通時,計數(shù)器中的數(shù)值就決定該地址控制線路接通的運算寄存器組中哪個單元能接通使用,并且接通的單元序號就等于計數(shù)器中的數(shù)值,即計數(shù)器可作為前述四組運算寄存器的相對地址控制寄存器,計數(shù)器還用于控制循環(huán)次數(shù),所述寄存器R只有一個單元且能容納n比特的信息,并且密碼機的工作流程分為加密工作流程和解密工作流程這兩部分,其中,
密碼機加密工作流程如下
1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)(每個整數(shù)為n比特)的數(shù)列,并將該數(shù)列保存在寄存器組S中,
2將明文分組逐組輸入寄存器組C中,并且每輸入一組明文后做下列運算
{/*...第一層循環(huán),明文分組長為2n×n比特,當(dāng)最后一組明文加密完畢時跳出循環(huán)...*/
(1)將遞增計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,寄存器組S作為寄存器組K的相對地址控制寄存器接通,并將寄存器組K中各單元都設(shè)為0,將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*....當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行K[S[a]]←K[S[a]]+1的指令
/*...a表示遞增計數(shù)器A中的數(shù)值,S[a]表示寄存器組S中序號為a的單元,K[S[a]]表示寄存器組K中由S[a]接通的單元,即表示寄存器組K中序號等于S[a]中數(shù)據(jù)的單元,這條指令是將K[S[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到K[S[a]],...*/
}
(2)將遞減計數(shù)器D作為寄存器組K、寄存器組T的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞減計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/
執(zhí)行T[d]←(K[d]+R)→R的指令
/*...d表示遞減計數(shù)器D中的數(shù)據(jù),K[d]表示寄存器組K中序號為d的單元,T[d]表示寄存器組T中序號為d的單元,這條指令是將K[d]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給寄存器組T中序號為d的單元,同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組K中整數(shù)的累加,本循環(huán)結(jié)束時,T
中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,所以實際上本循環(huán)結(jié)束時T
中的數(shù)據(jù)為0,但只要能實現(xiàn)四組寄存器中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,...*/
}
(3)將遞增計數(shù)器A作為寄存器組S和寄存器組K的相對地址控制寄存器接通,將寄存器組S作為寄存器組T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行K[a]←(T[S[a]]-1)→T[S[a]]的指令
/*...a為遞增計數(shù)器A中的數(shù)據(jù),S[a]、K[a]分別表示寄存器組S、寄存器組K中序號為a的單元,T[S[a]]表示寄存器組T中序號等于S[a]中內(nèi)容的單元,這條指令表示將T[S[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到K[a],同時也傳送到T[S[a]],以實現(xiàn)算出序號碼,...*/
}
(4)執(zhí)行 R←(K[2n-1]+S[K[2n-2]])%2n 的命令
/*...這條指令是將寄存器組S中序號等于K[2n-2]中數(shù)據(jù)的單元數(shù)據(jù)與寄存器組K中第2n個單元中的數(shù)據(jù)相加,然后模2n,并將結(jié)果傳送到寄存器R中...*/
遞減計數(shù)器D作為寄存器組C和寄存器組T的相對地址控制寄存器接通,并將計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/
執(zhí)行 T[d]←(C[d])^(((R*R+R)/2)%(2n)) 的指令
/*...d為遞減計數(shù)器D中的數(shù)據(jù),T[d]、C[d]分別表示寄存器組T、寄存器組C中序號為d的單元,這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加后,以2整除,然后模2n,再與C[d]中數(shù)據(jù)作異或運算,并將結(jié)果傳送到T[d],即對分組信息進(jìn)行第一次加密...*/
執(zhí)行 R←((C[d]*C[d]+C[d]*3)/2+R)%2n 的指令
/*...將寄存器組C中第d+1個單元中的數(shù)據(jù)乘以3的結(jié)果與寄存器組C第d+1個單元中的數(shù)據(jù)平方相加,接著以2整除,然后與寄存器R中數(shù)據(jù)相加,再模2n,并將運算結(jié)果傳送到寄存器R中...*/
}
(5)執(zhí)行 R←(K[1]+S[K
])%2n 的指令
/*...即將寄存器組K中第2個單元中的數(shù)據(jù)和寄存器組S中第K
+1個單元中的數(shù)據(jù)相加,并將結(jié)果傳送到寄存器R,...*/
將遞增計數(shù)器A作為寄存器組T和寄存器組K的相對地址控制寄存器接通,將寄存器組K作為寄存器組C的相對地址控制寄存器接通,接著將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行C[K[a]]←T[a]^(((R*R+R)/2)%(2n)) 的指令
/*...這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加,接著以2整除,然后模2n,再與寄存器組T中第a個單元中數(shù)據(jù)互異,并將運算結(jié)果傳送到存器組C的第K[a]+1個單元,即對分組信息進(jìn)行第二次加密,...*/
執(zhí)行R←((T[a]*T[a]+T[a]*3)/2+R)%(2n) 的指令
/*...這條指令表示將T[a]中數(shù)據(jù)與3相乘后的積與T[a]中數(shù)據(jù)的平方相加,接著以2整除,然后加上寄存器R中的數(shù)據(jù),再模2n,并將運算結(jié)果傳送到存器R,為加密下一單元做準(zhǔn)備,...*/
}
(6)將遞增計數(shù)器A作為寄存器組K的相對地址控制寄存器接通,將寄存器組K作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行K[a]←S[K[a]]^m的指令
/*...S[K[a]]表示寄存器組S中序號等于K[a]中數(shù)據(jù)的單元,這條指令表示將S[K[a]]中數(shù)據(jù)與m作互異運算,并將結(jié)果保存在寄存器組K中序號等于a的單元,m為常數(shù),
}
(7)將遞增計數(shù)器A作為寄存器組K、S這兩者的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行S[a]←((K[a]*K[a]+K[a])/2+S[a])%(2n) 的指令
/*...這條指令表示將K[a]中整數(shù)的平方與K[a]中整數(shù)相加,接著以2整除,然后與S[a]中數(shù)據(jù)相加,再模2n,并將結(jié)果傳送到寄存器組S中序號為a的單元中,以便后面實施第三次加密,...*/
}
(8)將遞增計數(shù)器A作為寄存器組C、S這兩者的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行C[a]←(C[a]+S[a])%2n 的指令
/*...這條指令表示將C[a]和S[a]相加后,再模2n,并將結(jié)果傳送到寄存器組C中序號為a的單元中,以實現(xiàn)第三次加密,...*/
}
(9)將遞增計數(shù)器A作為寄存器組K的相對地址控制寄存器接通,寄存器組K作為寄存器組S的相對地址控制寄存器接通,將寄存器組S中各單元都設(shè)為0,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行S[K[a]]←S[K[a]]+1 的指令
/*...a表示遞增計數(shù)器A中的數(shù)值,K[a]表示寄存器組K中序號為a的單元,S[K[a]]表示寄存器組S中由K[a]接通的單元,即表示寄存器組S中序號等于K[a]中數(shù)據(jù)的單元,這條指令是將S[K[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到S[K[a]],...*/
}
(10)將計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞增計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行S[a]←(S[a]+R)→R 的指令
/*...這條指令是將S[a]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給S[a],同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組S中整數(shù)的累加,本循環(huán)結(jié)束時,S[2n-1]中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,實際上本循環(huán)結(jié)束時S[2n-1]中的數(shù)據(jù)為0,但只要能實現(xiàn)四個寄存器組中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,...*/
}
(11)將遞增計數(shù)器A作為寄存器組K和寄存器組C的相對地址控制寄存器接通,將寄存器組K作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行 R←S[K[a]]-1→S[K[a]] 的指令
/*...這條指令表示將S[K[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到寄存器R,同時也傳送到S[K[a]],以實現(xiàn)將寄存器組K中序號為a單元中數(shù)據(jù)按照從小到大在排序后新數(shù)列中的位置序號算出,...*/
執(zhí)行 Port←(R+C[a])%2n 的指令
/*...port,表示輸出端口或輸出線路,這條指令表示將寄存器R中的數(shù)據(jù)與C[a]中的數(shù)據(jù)相加,并模2n,然后輸出,這一步功能是利用序號碼加密,這是第四次加密,并向外傳送,...*/
}
(12)將遞增計數(shù)器A作為寄存器組K、S、T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行S[a]←(K[a]+T[a])%2n 的指令
/*...這條指令表示將K[a]和T[a]相加后,再模2n,并將結(jié)果傳送S[a]到中,以實現(xiàn)更新用來產(chǎn)生密鑰的參數(shù),為加密下一組明文做準(zhǔn)備,...
*/
}
}
密碼機解密工作流程如下
1初始化輸入初始密鑰Key,并利用初始密鑰Key產(chǎn)生一個具有2n個整數(shù)(每個整數(shù)為n比特)的數(shù)列,并將該數(shù)列保存在寄存器組S中,
2將密文分組逐組輸入寄存器組C中,并且每輸入一組密文后做下列運算
{/*...第一層循環(huán),密文分組長為2n×n比特,當(dāng)最后一組密文解密完畢時跳出循環(huán)...*/
(1)將遞增計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,寄存器組S作為寄存器組K的相對地址控制寄存器接通,并將寄存器組K中各單元都設(shè)為0,將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行 K[S[a]]←K[S[a]]+1 的指令
/*...a表示遞增計數(shù)器A中的數(shù)值,S[a]表示寄存器組S中序號為a的單元,K[S[a]]表示寄存器組K中由S[a]接通的單元,即表示寄存器組K中序號等于S[a]中數(shù)據(jù)的單元,這條指令是將K[S[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到K[S[a]],...*/
}
(2)將遞減計數(shù)器D作為寄存器組T、寄存器組K的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞減計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/
執(zhí)行 T[d]←(K[d]+R)→R 的指令
/*...d表示遞減計數(shù)器D中的數(shù)據(jù),K[d]表示寄存器組K中序號為d的單元,T[d]表示寄存器組T中序號為d的單元,這條指令是將K[d]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給寄存器組T中序號為d的單元,同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組K中整數(shù)的累加,本循環(huán)結(jié)束時,T
中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,所以實際上本循環(huán)結(jié)束時T
中的數(shù)據(jù)為0,但只要能實現(xiàn)四組寄存器中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,當(dāng)d等于-1時,自動結(jié)束本循環(huán),往下執(zhí)行...*/
}
(3)將遞增計數(shù)器A作為寄存器組S和寄存器組K的相對地址控制寄存器接通,將寄存器組S作為寄存器組T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行K[a]←(T[S[a]]-1)→T[S[a]]的指令
/*...a為遞增計數(shù)器A中的數(shù)據(jù),S[a]、K[a]分別表示寄存器組S、寄存器組K中序號為a的單元,T[S[a]]表示寄存器組T中序號等于S[a]中內(nèi)容的單元,這條指令表示將T[S[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到K[a],同時也傳送到T[S[a]],以實現(xiàn)算出序號碼,...*/
}
(4)將遞增計數(shù)器A作為寄存器組K、T的相對地址控制寄存器接通,將寄存器組K作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行T[a]←S[K[a]]^m的指令
/*...S[K[a]]表示寄存器組S中序號等于K[a]中數(shù)據(jù)的單元,這條指令表示將S[K[a]]中數(shù)據(jù)與m作互異運算,并將結(jié)果保存在寄存器組T中序號等于a的單元,m為常數(shù),...*/
}
(5)將遞增計數(shù)器A作為寄存器組T、S、C這三者的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{ /*...當(dāng)a等于2n時,結(jié)束本循環(huán)往下執(zhí)行,...*/
執(zhí)行R←2n-((T[a]*T[a]+T[a])/2+S[a])%(2n)的指令
/*...這條指令表示將T[a]中整數(shù)的平方與T[a]中整數(shù)相加后,以2整除,接著與S[a]相加,再模2n,然后用2n減去前述模2n之后的結(jié)果,并將結(jié)果傳送寄存器R,...*/
執(zhí)行C[a]←(R+C[a])%(2n)的指令
/*...這條指令表示將C[a]中數(shù)據(jù)與R中數(shù)據(jù)相加,再模2n,并將結(jié)果傳送C[a],以實現(xiàn)解除第三次加密,...*/
}
(6)將遞增計數(shù)器A作為寄存器組T的相對地址控制寄存器接通,寄存器組T作為寄存器組S的相對地址控制寄存器接通,將寄存器組S中各單元都設(shè)為0,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{ /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行S[T[a]]←S[T[a]]+1的指令
/*...a表示遞增計數(shù)器A中的數(shù)值,T[a]表示寄存器組T中序號為a的單元,S[T[a]]表示寄存器組S中由T[a]接通的單元,即表示寄存器組S中序號等于T[a]中數(shù)據(jù)的單元,這條指令是將S[T[a]]中數(shù)據(jù)與1相加,并將結(jié)果傳送到S[T[a]],...*/
}
(7)將計數(shù)器A作為寄存器組S的相對地址控制寄存器接通,將寄存器R設(shè)為0,將遞增計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行S[a]←(S[a]+R)→R的指令
/*...這條指令是將S[a]中數(shù)據(jù)和寄存器R中數(shù)據(jù)相加,并將運算結(jié)果傳送給S[a],同時還將運算結(jié)果傳送給寄存器R,這里實現(xiàn)對寄存器組S中整數(shù)的累加,本循環(huán)結(jié)束時,S[2n-1]中的數(shù)據(jù)應(yīng)為2n,但由于四組寄存器中各單元的長度都為n比特,因此只能表示2n個數(shù)據(jù),又因序號從0開始,實際上本循環(huán)結(jié)束時S[2n-1]中的數(shù)據(jù)為0,但只要能實現(xiàn)四組寄存器中各單元在單元中的數(shù)據(jù)為0的情況下作減1運算后,該單元中代碼與表示2n-1的代碼相同,就不會影響本密碼機的實施,...*/
}
(8)將遞增計數(shù)器A作為寄存器組C和寄存器組T的相對地址控制寄存器接通,將寄存器組T作為寄存器組S的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{ /*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行R←S[T[a]]-1→S[T[a]]的指令
/*...這條指令表示將S[T[a]]中數(shù)據(jù)減1,然后將結(jié)果傳送到寄存器R,同時也傳送到S[T[a]],以實現(xiàn)算出序號碼,...*/
執(zhí)行C[a]←(2n-R+C[a])%2n的指令
/*...這條指令表示用2n減去寄存器R中的數(shù)據(jù)再與C[a]中的數(shù)據(jù)相加,并模2n,并將結(jié)果傳送到C[a],以實現(xiàn)解除第四次加密,...*/
}
(9)執(zhí)行R← (K[1]+(T
^m))%2n的指令
/*...即將寄存器組T中第1個單元中的數(shù)據(jù)與m作互異運算,將互異結(jié)果與寄存器組K中第2個單元中的數(shù)據(jù)相加,再模2n,并將結(jié)果傳送到寄存器R,...*/
將遞增計數(shù)器A作為寄存器組S、寄存器組K的相對地址控制寄存器接通,將寄存器組K作為寄存器組C的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行S[a]←C[K[a]]^(((R*R+R)/2)%(2n))的指令
/*...這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加,接著以2整除,然后模2n,再與寄存器組C中第K[a]+1個單元中數(shù)據(jù)互異,并將運算結(jié)果傳送到存器組S的第a+1個單元,以實現(xiàn)解除第二次加密,...*/
執(zhí)行R←((S[a]*S[a]+S[a]*3)/2+R)%(2n)的指令
/*...這條指令表示將S[a]中數(shù)據(jù)與3相乘后的數(shù)據(jù)與S[a]中數(shù)據(jù)的平方相加,接著以2整除,然后加上寄存器R中的數(shù)據(jù),再模2n,并將運算結(jié)果傳送到存器R,為解密下一單元做準(zhǔn)備,...*/
}
(10)執(zhí)行 R←(K[2n-1]+(T[2n-2]^m))%2n的指令
/*...即將寄存器組T中第2n-1個單元中的數(shù)據(jù)與m作互異運算,將互異結(jié)果與寄存器組K中第2n個單元中的數(shù)據(jù)相加,再模2n,并將結(jié)果傳送到寄存器R,...*/
將遞減計數(shù)器D作為寄存器組C和寄存器組S的相對地址控制寄存器接通,并將計數(shù)器D設(shè)為2n-1,然后,循環(huán)執(zhí)行以下指令
{ /*...當(dāng)d等于-1時,結(jié)束本循環(huán),...*/
執(zhí)行 C[d]←(S[d])^(((R*R+R)/2)%(2n))→Port的指令
/*...d為遞減計數(shù)器D中的數(shù)據(jù),S[d]、C[d]分別表示寄存器組S、寄存器組C中序號為d的單元,這條指令表示將寄存器R中數(shù)據(jù)的平方與寄存器R中數(shù)據(jù)相加后,以2整除,然后模2n,再與S[d]中數(shù)據(jù)作異或運算,以實現(xiàn)解除第一次加密,并將結(jié)果傳送到C[d],同時輸出明文...*/
執(zhí)行R←((C[d]*C[d]+C[d]*3)/2+R)%2n的指令
/*...將寄存器組C中第d+1個單元中的數(shù)據(jù)乘以3的結(jié)果與寄存器組C第d+1個單元中的數(shù)據(jù)平方相加,接著以2整除,然后與寄存器R中數(shù)據(jù)相加,再模2n,并將運算結(jié)果傳送到寄存器R中...*/
}
(11)將遞增計數(shù)器A作為寄存器組S、T的相對地址控制寄存器接通,并將計數(shù)器A設(shè)為0,然后,循環(huán)執(zhí)行以下指令
{/*...當(dāng)a等于2n時,結(jié)束本循環(huán),...*/
執(zhí)行S[a]←(S[a]+T[a])%2n的指令
/*...這條指令表示將S[a]和T[a]相加后,再模2n,并將結(jié)果傳送S[a]到中,以實現(xiàn)更新用來產(chǎn)生密鑰的參數(shù),為解密下一組密文做準(zhǔn)備,...
*/
}
}。
9.根據(jù)權(quán)利要求2所述加密方法,其特征是其中,步驟1采用以下八種方法之一
第一種計數(shù)排序法計算序號碼的方法如下
①i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
r[i]=0
/*...將數(shù)列R清0,r[i]表示數(shù)列R中第i+1個整數(shù)...*/
i=i+1
}
②i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/
{
r[p[i]]=r[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/
i=i+1
}
③i=1/*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n-1遍...*/
{
r[i]=r[i]+r[i-1]/*...累加...*/
i=i+1
}
④i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
r[p[i]]=r[p[i]]-1
k[i]=r[p[i]]
/*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù),當(dāng)然前面兩條指令也可修改為k[i]=r[p[i]]-1r[p[i]]=k[i] ...*/
i=i+1
}
第二種計數(shù)排序法計算序號碼的方法如下
①i=0/*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/
{
r[i]=0
/*...將數(shù)列R清0,r[i]表示數(shù)列R中第i+1個整數(shù)...*/
i=i+1
}
②i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
r[p[i]]=r[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/
i=i+1
}
③i=1a=r
r
=0/*...賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/
{
b=r[i]
r[i]=a+r[i-1]/*...累加...*/
i=i+1a=b
}
④i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
k[i]=r[p[i]]
r[p[i]]=r[p[i]]+1
/*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/
i=i+1
}
第三種計數(shù)排序法計算序號碼的方法如下
①i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
r[i]=0
/*...將數(shù)列R清0,r[i]表示數(shù)列R中第i+1個整數(shù)...*/
i=i+1
}
②i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/
{
r[p[i]]=r[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/
i=i+1
}
③i=2n-2/*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/
{
r[i]=r[i]+r[i+1]/*...累加...*/
i=i-1
}
④i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/
{
r[p[i]]=r[p[i]]-1
k[i]=r[p[i]]
/*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù),當(dāng)然前面兩條指令也可修改為k[i]=r[p[i]]-1r[p[i]]=k[i] ...*/
i=i+1
}
第四種計數(shù)排序法計算序號碼的方法如下
①i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
r[i]=0
/*...將數(shù)列R清0,r[i]表示數(shù)列R中第i+1個整數(shù)...*/
i=i+1
}
②i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
r[p[i]]=r[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/
i=i+1
}
③i=2n-2a=r[2n-1] r[2n-1]=0 /*...賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/
{
b=r[i]
r[i]=a+r[i+1] /*...累加...*/
i=i-1a=b
}
④i=0/*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
k[i]=r[p[i]]
r[p[i]]=r[p[i]]+1
/*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/
i=i+1
}
第五種計數(shù)排序法計算序號碼的方法如下
①i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
k[i]=0
/*...將數(shù)列K清0,k[i]表示數(shù)列K中第i+1個整數(shù)...*/
i=i+1
}
②i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/
{
k[p[i]]=k[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/
i=i+1
}
③i=1 r
=k
/*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n-1遍...*/
{
r[i]=k[i]+r[i-1]/*...累加...*/
i=i+1
}
④i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
r[p[i]]=r[p[i]]-1
k[i]=r[p[i]]
/*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/
i=i+1
}
第六種計數(shù)排序法計算序號碼的方法如下
①i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
k[i]=0
/*...將數(shù)列K清0,k[i]表示數(shù)列K中第i+1個整數(shù)...*/
i=i+1
}
②i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/
{
k[p[i]]=k[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/
i=i+1
}
③i=1r
=0/*...賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/
{
r[i]=k[i-1]+r[i-1]/*...累加...*/
i=i+1
}
④i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/
{
k[i]=r[p[i]]
r[p[i]]=r[p[i]]+1
/*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...*/
i=i+1
}
第七種計數(shù)排序法計算序號碼的方法如下
①i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
k[i]=0
/*...將數(shù)列K清0,k[i]表示數(shù)列K中第i+1個整數(shù)...*/
i=i+1
}
②i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/
{
k[p[i]]=k[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/
i=i+1
}
③i=2n-2r[2n-1]=k[2n-1] /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/
{
r[i]=k[i]+r[i+1] /*...累加...*/
i=i-1
}
④i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令/*...執(zhí)行2n遍...*/
{
r[p[i]]=r[p[i]]-1
k[i]=r[p[i]]
/*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...
*/
i=i+1
}
第八種計數(shù)排序法計算序號碼的方法如下
①i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
k[i]=0
/*...將數(shù)列K清0,k[i]表示數(shù)列K中第i+1個整數(shù)...*/
i=i+1
}
②i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
k[p[i]]=k[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),k[p[i]]表示數(shù)列K中第p[i]+1個整數(shù)...*/
i=i+1
}
③i=2n-2r[2n-1]=0 /*...賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n-1遍...*/
{
r[i]=k[i+1]+r[i+1] /*...累加...*/
i=i-1
}
④i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
k[i]=r[p[i]]
r[p[i]]=r[p[i]]+1
/*...在數(shù)列K中,記錄序號碼,k[i]表示數(shù)列K中第i+1個整數(shù)...
*/
i=i+1
}。
10.根據(jù)權(quán)利要求9所述加密方法,其特征是其中,步驟②被修改為
②i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
p[i]=f(...)/*...f(...)用來表示產(chǎn)生數(shù)列P的程序段...*/
r[p[i]]=r[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/
i=i+1
}。
11.根據(jù)權(quán)利要求9所述加密方法,其特征是其中,步驟②被修改為
②
i=0 /*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
p[i]=f(...)/*...f(...)用來表示產(chǎn)生數(shù)列P的程序段...*/
i=i+1
}
i=0/*...給i賦初始值...*/
針對i循環(huán)執(zhí)行以下指令 /*...執(zhí)行2n遍...*/
{
r[p[i]]=r[p[i]]+1
/*...計數(shù),p[i]表示數(shù)列P中第i+1個整數(shù),r[p[i]]表示數(shù)列R中第p[i]+1個整數(shù)...*/
i=i+1
}。
12.根據(jù)權(quán)利要求9、或9和10、或9和11所述加密方法,其特征是其中,“k[i]=r[p[i]]”被修改為“k[(i+u)%(2n)]=(r[p[i]]+w)%(2n)”
13.根據(jù)權(quán)利要求9、或9和10、或9和11所述加密方法,其特征是其中,“k[i]=r[p[i]]”被修改為“k[(i+u)%(2n)]=((r[p[i]]*r[p[i]]+r[p[i]]+v)/2+w)%(2n)”。
14.根據(jù)權(quán)利要求9、或9和10、或9和11所述加密方法,其特征是其中,“k[i]=r[p[i]]”被修改為“k[(i+u)%(2n)]=f(r[p[i]])”。
15.根據(jù)權(quán)利要求9、或9和10、或9和11、或12、或13、或14所述加密方法,其特征是其中,“r[p[i]]”被修改為“r[(p[i]+z)%(2n)]”。
16.根據(jù)權(quán)利要求9、或9和10、或9和11、或12、或13、或14、或15所述加密方法,其特征是其中,“k[p[i]]”被修改為“k[(p[i]+z)%(2n)]”。
全文摘要
本發(fā)明涉及一種利用序號碼加密的方法及密碼機,本發(fā)明的基本特征是用某種算法計算整數(shù)數(shù)列P的序號碼,并以序號碼為密鑰對明文加密。所述序號碼是指按照某種規(guī)則對一個數(shù)列重新排序得到新數(shù)列后,原數(shù)列中數(shù)據(jù)在新數(shù)列中的位置序號代碼。用序號碼來加密信息時,具有其他任何加密方法不具有的特性第一由于序號碼是通過數(shù)學(xué)中的大小關(guān)系產(chǎn)生的,任何破解者無法根據(jù)數(shù)列P的序號碼推出數(shù)列P,第二用數(shù)列P的序號碼中的數(shù)據(jù)直接與明文進(jìn)行異或、加、減等運算時具有高效地破壞頻率特征的功能,第三可根據(jù)序號碼的位置序號重排明文中各代碼的位置。
文檔編號H04L9/08GK101567781SQ20091014745
公開日2009年10月28日 申請日期2009年6月9日 優(yōu)先權(quán)日2009年6月9日
發(fā)明者劉海云 申請人:劉海云