專利名稱::一種數(shù)字?jǐn)?shù)據(jù)變換方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及信息處理
技術(shù)領(lǐng)域:
,特別涉及數(shù)字加密、數(shù)字簽字、數(shù)據(jù)壓縮等信息處理
技術(shù)領(lǐng)域:
。隨著Internet國際互聯(lián)網(wǎng)及其商業(yè)應(yīng)用的迅猛發(fā)展,E-mail(電子郵件)的安全保密問題越來越突出。1991年出現(xiàn)了主要用于E-mail加密的密碼系統(tǒng)PGP(PrettyGoodPrivacy),以及于1993年發(fā)布最后文本的Internet標(biāo)準(zhǔn)建議草案PEM(PrivacyEnhancedMail)。如今,PGP密碼系統(tǒng)大約被全世界三億Internet個人用戶中的半數(shù)用于E-mail加密;而PEM正在被越來越多的Internet企業(yè)用戶采用,成為電子商務(wù)安全的一個基礎(chǔ)。PGP和PEM都能為用戶提供消息的保密和認(rèn)證功能,以及與E-mail的兼容性;PGP還為用戶提供消息的壓縮功能。所謂與E-mail兼容,就是把準(zhǔn)備用E-mail傳送的任意8-比特數(shù)據(jù)字節(jié)(Byte)串或任意比特流數(shù)據(jù),變換為有限制的ASCII(AmericanStandardCodeforInformationInterchange)字符的串。對后者的主要限制有(1)字符可打印;(2)字符集中不包含控制字符。這樣的ASCII字符共有95個,其對應(yīng)的10進(jìn)制編碼是從32到126的全部整數(shù)。由這樣的ASCII字符書寫的郵件符合Internet標(biāo)準(zhǔn)SMTP(SimpleMailTransferProtocol),能在幾乎所有的E-mail系統(tǒng)中傳遞。目前,PGP或PEM提供與E-mail的兼容性,都是通過稱為“基數(shù)-64變換”的編碼映射Base64(也記作Radix-64)來實(shí)現(xiàn)的?!盎鶖?shù)-64變換”將輸入消息M切分為6比特長的分組作為自變量實(shí)施映射,該映射記為Base64[]X→Y其中,自變量或原像集X包括全部64個6比特符號(用整數(shù)記為0,1,...,63)和表示“無數(shù)據(jù)”的Φ;像集Y包括26個英文字符的大寫和小寫、0至9的阿拉伯?dāng)?shù)字、“+”、“/”,和填充符“=”。常用軟件中采用的映射規(guī)則為Base64=“A”,...,Base64[25]=“Z”,Base64[26]=“a”,...,Base64[51]=“z”,Base64[52]=“0”,...,Base64[61]=“9”,Base64[62]=“+”,Base64[63]=“/”特別地,Base64[Φ]=“=”,僅在必要時使用,以便將變換輸出的總字符數(shù)湊足為4的整倍數(shù)。為避免混淆,與C語言源程序的規(guī)定不同,本說明書采用中文引號“”作為ASCII字符或字符串的定界符。設(shè)Y中的每個符號用8-比特字節(jié)來記錄、存儲和傳輸(以下均按這種簡化觀點(diǎn)理解“傳輸”以避免討論各式各樣的實(shí)際傳輸信道,它不影響本說明書中各變換的性能對比),采用“基數(shù)-64變換”的編碼效率為6/8=75%,數(shù)據(jù)擴(kuò)展率為8/6=4/3=133.33%,故通常說“基數(shù)-64變換”將3字節(jié)輸入變換為4字節(jié)輸出。這對信道資源寶貴的Internet是一個浪費(fèi)。目前在“多用途國際互聯(lián)網(wǎng)郵件擴(kuò)展(MIME)”中使用的變換QP(Quoted-Printable),是簡單地用三個可打印字符“=LR”來替換16進(jìn)制記法為“LR”的8-比特數(shù)據(jù),L、R∈{0,1,...,9,A,B,C,D,E,F(xiàn)}。故QP變換的自變量比特分組長度為8,編碼效率為1/3,數(shù)據(jù)擴(kuò)展率為300%,對Internet資源的浪費(fèi)更大。據(jù)新聞媒體報道,1999年底北京大學(xué)學(xué)生張明和戚文敏發(fā)明了名稱為“電子郵局”(英文縮寫EPOST)的技術(shù),其效果是加速數(shù)據(jù)在Internet中的傳送和突破原電子郵件郵箱存儲容量的限制;但至今未見實(shí)現(xiàn)技術(shù)的公開報道,也未檢索到國內(nèi)外相關(guān)的專利申請。本發(fā)明的目的是提供一種數(shù)字?jǐn)?shù)據(jù)變換方法,它能與SMTP或稍作修訂的MIME結(jié)合使用,降低在網(wǎng)絡(luò)傳輸中由PGP或PEM加工(簽字、壓縮、加密)消息時使用“基數(shù)-64變換”導(dǎo)致的數(shù)據(jù)擴(kuò)展,或因?yàn)槭褂谩癚P變換”導(dǎo)致的數(shù)據(jù)擴(kuò)展,提高消息傳輸速度;同時降低以可打印字符方式存儲該類數(shù)據(jù)的存儲容量需求。本發(fā)明的目的由以下技術(shù)方案實(shí)現(xiàn)設(shè)計了一種從任意比特串?dāng)?shù)據(jù)到可打印字符或字的序列的變換。其主要思路是將輸入消息M分組映射的比特長度,從現(xiàn)有技術(shù)使用的6或8,增加到13、27或20,并利用91個可打印ASCII字符的集合或可打印雙字符集合的直積與并積,來設(shè)計因分組長度增加后以指數(shù)方式增大的變換像集,從而提高編碼效率。以下是本發(fā)明設(shè)計的“基數(shù)-91變換”,以及它的擴(kuò)展形式——“基數(shù)-91擴(kuò)展變換”1.“基數(shù)-91變換”描述“基數(shù)-91變換”將輸入消息M切分為13比特的分組作為自變量實(shí)施映射,該映射記為Radix-91X→Y其中,自變量或原像集X包括全部8192個13比特符號(用整數(shù)記為0,1,...,8191),和必要時用于指示末組約定一側(cè)n個比特數(shù)據(jù)為填充數(shù)據(jù)的φn(n=1,...,12),φ1=8192,...,φ12=8203,原像集X有8204個元素;像集Y為直積R91×R91的子集,符號R91表示從95個可打印ASCII字符中除去包括“=”、“?”和空格符在內(nèi)的四個字符后余下的91個字符的集合,直積R91×R91有8281個元素。定義Radix-91是X到直積R91×R91內(nèi)任意選定的一個1-1映射。選取哪一個具體的1-1映射作為Radix-91,不影響本發(fā)明的效果。為實(shí)現(xiàn)方便,本發(fā)明首選以下映射(設(shè)R91_CH[91]是包括R91全部元素的字符組,下同)Radix-91X→Y≡(ch1,ch2)字符ch1,ch2∈R91ch1=R91_CH[X/91],ch2=R91_CH[X%91](1)這里的符號“/”和“%”為C語言中的運(yùn)算符,分別表示整數(shù)除法和模除求余數(shù)運(yùn)算。將輸入消息M切分為13比特分組的操作,可能產(chǎn)生不足13比特的末分組。對這種分組,在約定一側(cè)用n個比特補(bǔ)足成為完整分組后實(shí)施映射;同時在其后增加一組數(shù)據(jù)φn(n=1,...,12),并當(dāng)做輸入數(shù)據(jù)實(shí)施映射。雙字符“=?”與“?=”分別用作輸出字符串的“引導(dǎo)符”和“結(jié)束符”。故“基數(shù)-91變換”的輸出中最多可出現(xiàn)93個可打印ASCII字符。按以上“基數(shù)-91變換”的變換規(guī)則,由填充比特及其指示符φn的像以及“引導(dǎo)符”和“結(jié)束符”導(dǎo)致的輸出數(shù)據(jù)的額外增加不超過8個字符。所以,隨輸入消息M的比特數(shù)或字節(jié)數(shù)增加,本發(fā)明設(shè)計的“基數(shù)-91變換”的平均編碼效率趨近于81.25%,數(shù)據(jù)擴(kuò)展率趨近于123%(現(xiàn)有的“基數(shù)-64變換”的編碼效率為75%,數(shù)據(jù)擴(kuò)展率為133%)。2.“基數(shù)-91擴(kuò)展變換”(27比特分組)描述集合R91的定義與上文中相同。按“基數(shù)-91變換”的思路,但輸入消息分組長度由13比特增加到27比特,再設(shè)計出可打印字符或字的4字節(jié)值作為變換的像,就得到“基數(shù)-91擴(kuò)展變換”。將其針對27比特分組的映射記為Radix-91+X→Y其中,自變量或原像集X包括全部227個27比特符號(用整數(shù)記為0,1,...,134217727),和必要時用于指示末組約定一側(cè)n個比特數(shù)據(jù)為填充數(shù)據(jù)的φn(n=1,...,26),φ1=134217728,...,φ26=134217753,原像集X有227+26個元素;像集Y為直積Y0×Y0的子集,集合Y0是直積R91×R91與“漢字通信編碼字符集的信息交換碼集合”(包括GB2312和GB8565)或更一般的“中國、日本和韓國通用漢字編碼字符集(CJKUNIFIEDIDERGRAPH)”的信息交換碼集合的某個m元子集HZm的并集,即Y0={R91×R91}∪HZm整數(shù)m∈[3305,942],R91×R91元素數(shù)為8281,Y0的元素數(shù)N=8281+m≥11586,直積Y0×Y0的元素數(shù)為N2,大于X的元素數(shù)。定義Radix-91+是X到直積Y0×Y0內(nèi)任意選定的一個1-1映射。在以上限定下m或N的取法,以及選取哪一個具體映射作為Radix-91+,均不影響本發(fā)明的效果。為實(shí)現(xiàn)方便,本發(fā)明首選m=3305,N=11586,HZm為GB2312中漢字“啊”至漢字“盈”的信息交換碼(雙8-比特字符,其中不同的8-比特字符有94個)的集合,[]內(nèi)數(shù)字是該漢字的區(qū)位碼,并選擇以下具體映射Radix-91+X→Y≡(y1,y2)≡(ch1,ch2,ch3,ch4)其中整數(shù)y1,y2∈,字符ch1,ch2,ch3,ch4∈R91y1=X/N,y2=X%N(2)所以稱N為“擴(kuò)展的基數(shù)”。當(dāng)y1<8281時ch1=R91_CH[y1/91],ch2=R91_CH[y1%91](3)當(dāng)y1≥8281時ch1ch2=區(qū)位碼為1601+(y1-8281)的漢字的信息交換碼(4)當(dāng)y2<8281時ch3=R91_CH[y2/91],ch4=R91_CH[y2%91](3’)當(dāng)y2≥8281時ch3ch4=區(qū)位碼為1601+(y2-8281)的漢字的信息交換碼(4’)將輸入消息M切分為27比特分組的操作,可能產(chǎn)生不足27比特的末分組。對這種分組,在約定一側(cè)用n個比特補(bǔ)足成為完整分組后實(shí)施映射;同時在其后增加一組數(shù)據(jù)φn(n=1,...,26),并當(dāng)做輸入數(shù)據(jù)實(shí)施映射。雙字符“=?”與“?=”分別用作輸出字符串的“引導(dǎo)符”和“結(jié)束符”。按以上“基數(shù)-91擴(kuò)展變換”的變換規(guī)則,由填充比特及其指示符φn的像以及“引導(dǎo)符”和“結(jié)束符”導(dǎo)致的輸出數(shù)據(jù)的額外增加不超過12個字符。所以,隨輸入消息M的比特數(shù)或字節(jié)數(shù)增加,本發(fā)明設(shè)計的“基數(shù)-91擴(kuò)展變換”(27比特分組)的平均編碼效率趨近于84.375%,數(shù)據(jù)擴(kuò)展率趨近于118.5%(現(xiàn)有的Base64變換的編碼效率為75%,數(shù)據(jù)擴(kuò)展率為133%)。3.“基數(shù)-91擴(kuò)展變換”(20比特分組)描述集合R91、HZm與集合Y0的定義與上文中相同。按“基數(shù)-91變換”的思路,但輸入消息分組長度由13比特增加到20比特,再設(shè)計出可打印字符或字的3字節(jié)值作為變換的像,就得到另一種“基數(shù)-91擴(kuò)展變換”。仍然采用前面的映射記號Radix-91+X→Y其中,自變量或原像集X包括全部220個20比特符號(用整數(shù)記為0,1,...,1048575),和必要時用于指示末組約定一側(cè)n個比特數(shù)據(jù)為填充數(shù)據(jù)的φn(n=1,...,19),φ1=1048576,...,φ19=1048594,原像集X有=220+19個元素;像集Y為直積R91×Y0的子集,Y0的元素數(shù)N≥11586,直積R91×Y0的元素數(shù)為91×N,大于X的元素數(shù)。定義Radix-91+是X到直積R91×Y0內(nèi)任意選定的一個1-1映射。在以上限定下m或N的取法,以及選取哪一個具體的映射作為Radix-91+,均不影響本發(fā)明的效果。為實(shí)現(xiàn)方便,本發(fā)明首選m=3305,N=11586,并選擇以下具體映射;Radix-91+X→Y≡(y1,y2)≡(ch1,ch2,ch3)其中,整數(shù)y1∈,y2∈,字符ch1,ch2,ch3∈R91y1=X/N,y2=X%N(5)ch1=R91_CH[y1](6)當(dāng)y2<8281時ch2=R91_CH[y2/91],ch3=R91_CH[y2%91](7)當(dāng)y2≥8281時ch2ch3=區(qū)位碼為1601+(y2-8281)的漢字的信息交換碼(8)不足20比特的末分組的處理方法,與按27比特分組的“基數(shù)-91擴(kuò)展變換”類似。如同“基數(shù)-91變換”,雙字符“=?”與“?=”分別用作輸出字符串的“引導(dǎo)符”和“結(jié)束符”。由填充比特及其指示符φn的像以及“引導(dǎo)符”和“結(jié)束符”導(dǎo)致的輸出數(shù)據(jù)的額外增加不超過10個字符。所以,隨輸入消息M的比特數(shù)或字節(jié)數(shù)增加,本發(fā)明設(shè)計的“基數(shù)-91擴(kuò)展變換”(20比特分組)的平均編碼效率趨近于83.33%,數(shù)據(jù)擴(kuò)展率趨近于120%(現(xiàn)有的Base64變換的編碼效率為75%,數(shù)據(jù)擴(kuò)展率為133%)。本發(fā)明與MIME準(zhǔn)用的“基數(shù)-64變換”與QP變換相比,其特點(diǎn)是變換分組映射的自變量比特數(shù)超過6或8,也不是6或8的整倍數(shù),而是特意選定的13、27或20。變換設(shè)計特征對比數(shù)據(jù)見表1。表1本發(fā)明與現(xiàn)有技術(shù)相比,明顯地提高了信息編碼效率。將本發(fā)明用于信息傳輸時可以減少信道占用時間,節(jié)省傳輸費(fèi)用;將本發(fā)明用于任意比特串?dāng)?shù)據(jù)按可打印字符或字方式的存儲時,能節(jié)省存儲空間或費(fèi)用。變換性能特征對比數(shù)據(jù)見表2。表2表2中的(等量)“消息”,指表中變換的輸入,而不是指具體應(yīng)用中由PGP或PEM處理的用戶明文消息。表2中第三行數(shù)據(jù)(“等量消息變換后經(jīng)E-mail傳輸?shù)臅r間”)只是按編碼方法本身計算的結(jié)果。在實(shí)際網(wǎng)絡(luò)傳輸中使用本發(fā)明時,由于待傳輸消息的編碼效率提高,網(wǎng)絡(luò)負(fù)荷隨之減輕,網(wǎng)絡(luò)處理信道爭用(“碰撞”)的資源消耗也隨之降低,故本發(fā)明的實(shí)際效果比表2中第三行數(shù)據(jù)顯示的會更好。本發(fā)明的如下圖1為本發(fā)明的“基數(shù)-91變換”計算機(jī)算法流程圖。圖2為本發(fā)明的“基數(shù)-91擴(kuò)展變換”計算機(jī)算法流程圖。以下結(jié)合圖1對本發(fā)明作進(jìn)一步的詳細(xì)說明。將任意比特串?dāng)?shù)據(jù)映射為可打印ASCII字符序列,該變換方法由計算機(jī)軟件實(shí)現(xiàn),其特征在于采用下列步驟(1)啟動計算機(jī)(或計算機(jī)已由使用本變換軟件的應(yīng)用程序啟動);(2)將欲執(zhí)行變換算法的可執(zhí)行程序模塊存入計算機(jī)系統(tǒng)的程序存儲器,將程序準(zhǔn)備就緒的輸出字符集和填充比特指示數(shù)組移入內(nèi)存,建立R91_CH[91]和φ[13]的表(Table);(3)參數(shù)準(zhǔn)備及賦值(由調(diào)用本模塊的程序完成)將輸入字節(jié)串指針I(yè)NP_STR指向待變換字節(jié)串地址,INP_Len=輸入字節(jié)串長度,32比特?zé)o符號整數(shù)變量X,W=0,W中未變換的剩余比特數(shù)R=0,輸出字符串OUT_STR=“=?”,輸出字符串長度OL=2;(4)將程序計數(shù)器指針指向程序存儲器中前述可執(zhí)行程序模塊入口地址,讀取指令并執(zhí)行操作,即執(zhí)行映射變換;(5)變換的循環(huán)體過程(當(dāng)INP_Len>0時執(zhí)行)W的第R至第R+7比特位←從地址INP_STR處讀取1個字節(jié);調(diào)整參數(shù)R←R+8;INP_STR←INP_STR+1;INP_Len←INP_Len-1;實(shí)施分組映射如果(R≥13或INP_Len=0)則執(zhí)行{X←W的低端13比特;W>>13;(即在W的低端保存剩余比特)R←R-13;ch1←R91_CH[X/91];ch2←R91_CH[X%91];將字符ch1、ch2添加到輸出串OUT_CH末尾;OL←OL+2;}如果(R<0)則執(zhí)行{n←-R(即末組高端n個0比特是填充比特)X←φ[n];ch1←R91_CH[X/91];ch2←R91_CH[X%91];將字符ch1、ch2添加到輸出串OUT_CH末尾;OL←OL+2;}(6)在OUT_STR末尾加結(jié)束符“?=”;(7)變換模塊執(zhí)行結(jié)束。變換模塊執(zhí)行結(jié)束后,輸出字符串存于OUT_STR,其長度為OL的值。[例1]參照圖1和前面對該計算機(jī)程序主要技術(shù)特征的說明,首先初始化確定具體映射關(guān)系的輸出字符集charR91_CH[91]={“!”“"”,...,“+”,“-”,...,“<”,“>”,“@”,...,“~”};即這里從95個可打印字符中扣除的4個字符是“=”、空格符、“,”和“?”,各符號在ASCII表中的順序不變;故映射規(guī)則為R91_CH=“!”,R91_CH[1]=“"”,R91_CH[22]=“8”,R91_CH[67]=“g”,R91_CH[90]=“~”等等。比特填充指示數(shù)據(jù)初始化為unsignedφ[13]={0,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203};設(shè)輸入消息按8-比特分段的10進(jìn)制表出為unsignedcharINP_STR[5]={255,255,252,254,129};輸入消息字節(jié)長度INP_Len=5,輸出字符串初始化為OUT_STR=“=?”,其長度OL=2。用W表示無符號32比特變量,其比特位由高(左)到低(右)用31,...,1,0標(biāo)記;用R計移入W但尚未分組的輸入比特數(shù)目,這些比特總是存放在W的低R位(新讀取的輸入字節(jié)比特在W中緊靠原剩余比特的左側(cè)存放)。初始化W=0,R=0。以符號“B”開頭的記數(shù)為二進(jìn)制數(shù),其右端為低位比特。與圖1算法流程中循環(huán)體對應(yīng)的處理過程如下(1)取INP_STR=255存入W低8位,得到W=B0...011111111,R=8,INP_Len=4(2)取INP_STR[1]=255,在W中緊臨低R位的左側(cè)存入,即存入W的第8至第15位,得到W=B0...01111111111111111,R=16,INP_Len=3,此時R≥13,取出W低端13比特為X,X=8191,W>>13(即在W低位保存剩余比特,下同),成為W=B0......00000111,R=3,ch1=R91_CH[X/91]=R91_CH[90],ch2=R91_CH[X%91]=R91_CH[1]OUT_STR=“=?~"”,OL=4;(3)取INP_STR[2]=252,存入W第3至第10位,得到W=B0...011111100111,R=11,INP_Len=2;(4)取INP_STR[3]=254,存入W第11至第18位,得到W=B0...01111111011111100111,R=19,INP_Len=1,此時R≥13,取出W低端13比特為X,X=6119,W>>13,成為W=B0......00111111,R=6,ch1=R91_CH[X/91]=R91_CH[67],ch2=R91_CH[X%91]=R91_CH[22],OUT_STR=“=?~"g8”,OL=6;(5)取INP_STR[4]=129,存入W第6至第13位,得到W=B0...010000001111111,R=14,INP_Len=0,此時R≥13,取出W低端13比特為X,X=127,W>>13,成為W=B0......00001,R=1,ch1=R91_CH[X/91]=R91_CH[1],ch2=R91_CH[X%91]=R91_CH[36],OUT_STR=“=?~"g8"H”,OL=8;(6)因?yàn)镮NP_Len=0,取X=W=1作為完整13比特組(即在剩余比特左側(cè)填充了12個0比特),R=R-13=-12,ch1=R91_CH[X/91]=R91_CH,ch2=R91_CH[X%91]=R91_CH[1],OUT_STR=“=?~"g8"H?。ⅰ?,OL=10;(7)R<0,知n=-R=12是末組有效數(shù)據(jù)(1比特)左側(cè)的填充0比特個數(shù),用φ[12]=8203指出填充比特個數(shù),并將它映射為輸出X=8203,ch1=R91_CH[X/91]=R91_CH[90],ch2=R91_CH[X%91]=R91_CH[13],OUT_STR=“=?~"g8"H?。ⅰ?”,OL=12;(循環(huán)體處理過程結(jié)束)最后,在輸出串末尾添加“?=”,使輸出串符合Internet標(biāo)準(zhǔn)建議MIME中已編碼數(shù)據(jù)的標(biāo)示法。所以,對所給輸入數(shù)據(jù),“基數(shù)-91變換”的輸出是字符長度為14的可打印字符串OUT_STR=“=?~"g8"H?。ⅰ??=”,OL=14。要實(shí)施Radix-91逆變換,只需按相反的次序進(jìn)行操作,并注意字符“=?”和“?=”沒有原像[例1結(jié)束]。以下結(jié)合圖2對本發(fā)明作進(jìn)一步的詳細(xì)說明。將任意比特串?dāng)?shù)據(jù)映射為可打印ASCII字符和漢字信息交換碼的序列,該變換方法由計算機(jī)軟件實(shí)現(xiàn),其特征在于采用下列步驟(1′)啟動計算機(jī)(或計算機(jī)已由使用本變換軟件的應(yīng)用程序啟動);(2′)將欲執(zhí)行變換算法的可執(zhí)行程序模塊存入計算機(jī)系統(tǒng)的程序存儲器,將程序準(zhǔn)備就緒的輸出字符集、漢字信息交換碼集、填充比特指示數(shù)組和常數(shù)11586移入內(nèi)存,建立R91_CH[91]、HZm、φ[27]的表(Table)和常量——擴(kuò)展的基數(shù)N;(3′)參數(shù)準(zhǔn)備及賦值(由調(diào)用本模塊的程序完成)將輸入字節(jié)串指針I(yè)NP_STR指向待變換字節(jié)串地址,INP_Len=輸入字節(jié)串長度,32比特?zé)o符號整數(shù)變量X,y1,y2,W=0,W中未變換的剩余比特數(shù)R=0,輸出字符串OUT_STR“=?”,輸出字符串長度OL=2;(4′)將程序計數(shù)器指針指向程序存儲器中前述可執(zhí)行程序模塊入口地址,讀取指令并執(zhí)行操作,即執(zhí)行映射變換;(5′)變換的循環(huán)體過程(當(dāng)INP_Len>0時執(zhí)行)W的第R至第R+7比特位←從地址INP_STR處讀取1個字節(jié);調(diào)整參數(shù)R←R+8;INP_STR←INP_STR+1;INP_Len←INP_Len-1;實(shí)施分組映射如果(R≥27或INP_Len=0)則執(zhí)行{X←W的低端27比特;W>>27;(即在W的低端保存剩余比特)R←R-27;y1←X/N;y2←X%N;當(dāng)(y1<8281){ch1←R91_CH[y1/91];ch2←R91_CH[y1%91];}當(dāng)(y1≥8281)ch1ch2←HZm[y1-8281];當(dāng)(y2<8281){ch3←R91_CH[y2/91];ch4←R91_CH[y2%91];}當(dāng)(y2≥8281)ch3ch4←HZm[y2-8281];將ch1、ch2、ch3、ch4添加到輸出串OUT_CH末尾;OL←OL+4;}如果(R<0)則執(zhí)行{n←-R(即末組高端n個0比特是填充比特);X←φ[n];y1←X/N;y2←X%N;當(dāng)(y1<8281){ch1←R91_CH[y1/91];ch2←R91_CH[y1%91];}當(dāng)(y1≥8281)ch1ch2←HZm[y1-8281];當(dāng)(y2<8281){ch3←R91_CH[y2/91];ch4←R91_CH[y2%91];}當(dāng)(y2≥8281)ch3ch4←HZm[y2-8281];將ch1、ch2、ch3、ch4添加到輸出串OUT_CH末尾;OL←OL+4;}(6′)在OUT_STR末尾加結(jié)束符“?=”;(7′)變換模塊執(zhí)行結(jié)束。變換模塊執(zhí)行結(jié)束后,輸出字符串存于OUT_STR,其長度為OL的值。[例2]本例將對輸入數(shù)據(jù)unsignedcharINP_STR[6]={255,255,252,254,129,255};實(shí)施27比特分組的“基數(shù)-91擴(kuò)展變換”,變換輸出中作為GB2312信息交換碼的雙8-比特字符約定以相應(yīng)漢字顯示。參照圖2和前面對該計算機(jī)程序主要技術(shù)特征的說明,首先初始化R91_CH[91](同例1)、HZm、φ[27]和擴(kuò)展的基數(shù)N=11586。輸出串初始化為OUT_STR=“=?”,其長度OL=2。采用與例1類似的比特分組拼裝方案,可得到如下兩個分組X1=B110111111001111111111111111=117243903X2=B000000111111111000000111111=2093119二進(jìn)制記數(shù)中的間隔僅僅是為解說方便,即從左往右,X1是由INP_STR[3]低位3比特、INP_STR[2]8比特、INP_STR[1]8比特、INP_STR8比特組成,X2是由6個填充0比特、INP_STR[5]8比特、INP_STR[4]8比特、INP_STR[3]高位5比特組成。按照公式(2)、(3)、(4)、(3′)、(4′)實(shí)施映射,對X=X1,y1=X/N=10119,y2=X%N=5169y1≥8281,ch1ch2是區(qū)位碼為1601+(y1-8281)=3439的漢字的信息交換碼;y2<8281,ch3=R91_CH[y2/91]=R91_CH[56],ch4=R91_CH[y2%91]=R91_CH[73]第一分組變換后的結(jié)果是OUTSTR=“=?謎\m”,OL=6。對X=X2,y1=X/N=180,y2=X%N=7639y1<8281,ch1=R91_CH[y1/91]=R91_CH[1],ch2=R91_CH[y1%91]=R91_CH[79]y2<8281,ch3=R91_CH[y2/91]=R91_CH[83],ch4=R91_CH[y2%91]=R91_CH[86]第二分組變換后的結(jié)果是OUT_STR=“=?謎\m"swz”,OL=10。增加一組指示X2高端6個0比特為填充比特的分組X=φ[6]=134217733,此時y1=X/N=11584,y2=X%N=5509y1≥8281,ch1ch2是區(qū)位碼為1601+(y1-8281)=4904的漢字的信息交換碼;y2<8281,ch3=R91_CH[y2/91]=R91_CH[60],ch4=R91_CH[y2%91]=R91_CH[49]再加上結(jié)束符“?=”,最終的輸出是OUT_STR=“=?謎\m"swz贏U?=”,OL=16。“基數(shù)-91擴(kuò)展變換”的逆變換按照上述過程的逆過程進(jìn)行,并注意字符“=?”和“?=”沒有原像?!盎鶖?shù)-91擴(kuò)展變換”的編碼效率高于“基數(shù)-91變換”[例2結(jié)束]。在實(shí)施本發(fā)明時,即使分組映射規(guī)則確定之后,將輸入字節(jié)串按確定比特長度的分組拼裝方案(包括比特數(shù)不足的末組的處理辦法)還可能有多種選擇,以致給出不同的輸出字符串,但輸出字符串的長度不會因?yàn)榉纸M拼裝方案不同而變化。因而,比特分組拼裝方案并不影響本發(fā)明的編碼效率,也不影響通過相應(yīng)逆變換還原出正確的輸入數(shù)據(jù)。本發(fā)明中雙字符“=?”和“?=”的用法遵從MIME標(biāo)準(zhǔn)建議中關(guān)于已編碼數(shù)據(jù)的標(biāo)示法(參考RFC2049第二部分“MIME相容性”之9),只是作為已編碼數(shù)據(jù)的字符集有擴(kuò)展。但是,“基數(shù)-91變換”的輸出字符不超出95個可打印ASCII字符之集,所以可以配合Internet標(biāo)準(zhǔn)SMTP使用,在PGP、PEM或稍加改進(jìn)的MIME中取代“基數(shù)-64變換”或QP變換。本發(fā)明比QP變換和“基數(shù)-64變換”適用范圍更廣還在于,本發(fā)明由于設(shè)計了填充比特指示符φn,所以可對任意長度的輸入比特數(shù)據(jù)實(shí)施變換和逆變換;而QP變換僅對比特長度為8的整倍數(shù)的輸入數(shù)據(jù)使用方便,“基數(shù)-64變換”僅對比特長度為6的整倍數(shù)的輸入數(shù)據(jù)使用方便。權(quán)利要求1.一種數(shù)字?jǐn)?shù)據(jù)變換方法,該方法將任意比特串?dāng)?shù)據(jù)映射為可打印ASCII字符序列,該變換方法由計算機(jī)軟件實(shí)現(xiàn),其特征在于(1)將欲執(zhí)行變換算法的可執(zhí)行程序模塊存入計算機(jī)系統(tǒng)的程序存儲器,將程序準(zhǔn)備就緒的輸出字符集和填充比特指示數(shù)組移入內(nèi)存,建立字符組R91_CH[91]和整數(shù)組φ[13]的表(Table);(2)將輸入字節(jié)串指針指向待變換字節(jié)串地址,用變量記錄輸入字節(jié)串長度,將程序計數(shù)器指針指向程序存儲器中前述可執(zhí)行程序模塊入口地址,讀取指令并執(zhí)行操作;(3)變換對輸入數(shù)據(jù)進(jìn)行分組處理,每分組的比特長度為13;(4)變換分組映射的自變量或原像集X包括全部8192個13比特符號和12個填充比特指示符φ1,...,φ12,共計8204個元素;(5)變換的輸出表示中,使用93個可打印ASCII字符;(6)變換分組映射的像集Y為直積R91×R91的子集,R91是91個可打印ASCII字符的集合,可逆的1-1映射關(guān)系為Radix-91X→Y≡(ch1,ch2)字符ch1,ch2∈R91ch1=R91_CH[X/91],ch2=R91_CH[X%91](7)對不足13比特的輸入數(shù)據(jù)分組,在約定一側(cè)用n個比特填充后成為完整分組實(shí)施映射,再添加一組數(shù)據(jù)φn當(dāng)做輸入數(shù)據(jù)實(shí)施相同映射,其像在直積R91×R91中。2.根據(jù)權(quán)利要求1所述的數(shù)字?jǐn)?shù)據(jù)變換方法,其特征在于從任意比特串到可打印ASCII字符序列的變換方法為(1)變換的基本輸出字符集R91的91個可打印ASCII字符,可以從除去符號“=”、“?”和空格符之外的92個可打印ASCII字符中任意選?。?2)變換對輸入數(shù)據(jù)分組實(shí)施,分組比特長度為13,在自變量集和像集確定之后,可任意選取一個具體的1-1映射實(shí)現(xiàn)變換;(3)變換對輸入數(shù)據(jù)分組實(shí)施,在分組比特長度、自變量集和像集、具體實(shí)現(xiàn)變換的1-1映射確定之后,可任意選取一種比特分組拼裝方案,實(shí)現(xiàn)輸入數(shù)據(jù)按13比特長度分組;(4)在變換像的表示或編碼算法中,使用非2的整數(shù)冪次的91進(jìn)位制或基數(shù)。3.一種數(shù)字?jǐn)?shù)據(jù)變換方法,該方法將任意比特串?dāng)?shù)據(jù)映射為可打印ASCII字符和漢字信息交換碼的序列,該變換方法由計算機(jī)軟件實(shí)現(xiàn),其特征在于(1)將欲執(zhí)行變換算法的可執(zhí)行程序模塊存入計算機(jī)系統(tǒng)的程序存儲器,將程序準(zhǔn)備就緒的輸出字符集與漢字信息交換碼集、填充比特指示數(shù)組和常數(shù)11586移入內(nèi)存,建立R91_CH[91]、HZm[3305]、φ[27]的表(Table)和常量單元——擴(kuò)展的基數(shù)N;(2)將輸入字節(jié)串指針指向待變換字節(jié)串地址,用變量記錄輸入字節(jié)串長度,將程序計數(shù)器指針指向程序存儲器中前述可執(zhí)行程序模塊入口地址,讀取指令并執(zhí)行操作;(3)變換對輸入數(shù)據(jù)進(jìn)行分組處理,每分組的比特長度為27;(4)變換分組映射的自變量或原像集X包括全部227個27比特符號和26個填充比特指示符φ1,...,φ26,共計227+26個元素;(5)變換的輸出表示中,使用93個可打印ASCII字符和94個8-比特字符,后者的兩兩組合為GB2312漢字信息交換碼字;(6)變換分組映射的像集Y為直積Y0×Y0的子集,Y0={R91×R91}∪HZm即Y0為直積R91×R91與HZm的并集,整數(shù)m∈[3305,942],Y0的元素數(shù)N∈[11586,942+8281],可逆的1-1映射關(guān)系為Radix-91+X→Y≡(y1,y2)≡(ch1,ch2,ch3,ch4)其中整數(shù)y1,y2∈,字符ch1,ch2,ch3,ch4∈R91y1=X/N,y2=X%N當(dāng)y1<8281時,ch1=R91_CH[y1/91],ch2=R91_CH[y1%91]當(dāng)y1≥8281時,ch1ch2=區(qū)位碼為1601+(y1-8281)的漢字的信息交換碼當(dāng)y2<8281時,ch3=R91_CH[y2/91],ch4=R91_CH[y2%91]當(dāng)y2≥8281時,ch3ch4=區(qū)位碼為1601+(y2-8281)的漢字的信息交換碼;(7)對不足27比特的輸入數(shù)據(jù)分組,在約定一側(cè)用n個比特填充后成為完整分組實(shí)施映射,再添加一組數(shù)據(jù)φn當(dāng)做輸入數(shù)據(jù)實(shí)施相同映射,其像在直積Y0×Y0中。4.根據(jù)權(quán)利要求3所述的數(shù)字?jǐn)?shù)據(jù)變換方法,其特征在于從任意比特串到可打印ASCII字符及漢字信息交換碼序列的變換方法為(1)變換的基本輸出字符集R91的91個可打印ASCII字符,可以從除去符號“=”、“?”和空格符之外的92個可打印ASCII字符中任意選取,變換的基本輸出雙字符集HZm的m個碼字,可從包括GB2312和GB8565的“漢字通信編碼字符集的信息交換碼集合”中任意選取,或從“中國、日本和韓國通用漢字編碼字符集(CJKUNIFIEDIDERGRAPH)”的信息交換碼集合中任意選??;(2)變換對輸入數(shù)據(jù)分組實(shí)施,分組比特長度為27,在自變量集和像集確定之后,可任意選取一個具體的1-1映射實(shí)現(xiàn)變換;(3)變換對輸入數(shù)據(jù)分組實(shí)施,在分組比特長度、自變量集和像集、具體實(shí)現(xiàn)變換的1-1映射確定之后,可任意選取一種比特分組拼裝方案,實(shí)現(xiàn)輸入數(shù)據(jù)按27比特長度分組;(4)在變換像的表示或編碼算法中,使用非2的整數(shù)冪次的91進(jìn)位制或基數(shù),和N進(jìn)位制或擴(kuò)展的基數(shù),N∈[11586,942+8281]。5.一種數(shù)字?jǐn)?shù)據(jù)變換方法,該方法將任意比特串?dāng)?shù)據(jù)映射為可打印ASCII字符和漢字信息交換碼的序列,該變換方法由計算機(jī)軟件實(shí)現(xiàn),其特征在于(1)將欲執(zhí)行變換算法的可執(zhí)行程序模塊存入計算機(jī)系統(tǒng)的程序存儲器,將程序準(zhǔn)備就緒的輸出字符集與漢字信息交換碼集、填充比特指示數(shù)組和常數(shù)11586移入內(nèi)存,建立R91_CH[91]、HZm[3305]、φ[20]的表(Table)和常量單元N;(2)將輸入字節(jié)串指針指向待變換字節(jié)串地址,用變量記錄輸入字節(jié)串長度,將程序計數(shù)器指針指向程序存儲器中前述可執(zhí)行程序模塊入口地址,讀取指令并執(zhí)行操作;(3)變換對輸入數(shù)據(jù)進(jìn)行分組處理,每分組的比特長度為20;(4)變換分組映射的自變量或原像集X包括全部220個20比特符號和19個填充比特指示符φ1,...,φ19,共計220+19個元素;(5)變換的輸出表示中,使用93個可打印ASCII字符和94個8-比特字符,后者的兩兩組合為GB2312漢字信息交換碼字;(6)變換分組映射的像集Y為直積R91×Y0的子集,Y0={R91×R91}∪HZm;(7)對不足20比特的輸入數(shù)據(jù)分組,在約定一側(cè)用n個比特填充后成為完整分組實(shí)施映射,再添加一組數(shù)據(jù)φn當(dāng)做輸入數(shù)據(jù)實(shí)施相同映射,其像在直積R91×Y0中。全文摘要本發(fā)明公開一種數(shù)字?jǐn)?shù)據(jù)變換方法,該方法解決現(xiàn)有加密電子郵件或任意8-比特數(shù)據(jù)序列在傳送準(zhǔn)備時所用變換編碼效率低,加重網(wǎng)絡(luò)負(fù)荷問題。其技術(shù)關(guān)鍵是設(shè)計了從一般比特串到可打印ASCII字符或漢字信息交換碼序列的“基數(shù)-91變換”及擴(kuò)展變換。與Internet標(biāo)準(zhǔn)SMTP結(jié)合使用,本發(fā)明取代“基數(shù)-64變換”(PGP和PEM采用)能使傳輸時間、存儲需求減少7.7%或11.11%;取代QP變換能使傳輸時間、存儲需求減少58.97%或60.49%。主要用于Internet加密電子郵件的傳輸或存儲。文檔編號G06F17/22GK1269657SQ0011288公開日2000年10月11日申請日期2000年4月28日優(yōu)先權(quán)日2000年4月28日發(fā)明者何大可,何薇申請人:西南交通大學(xué)