陳向陽
摘 要:眾所周知,在計(jì)算機(jī)內(nèi)部,數(shù)據(jù)或信息最終都以二進(jìn)制存儲(chǔ)。在實(shí)際應(yīng)用中,人們雖然習(xí)慣使用十進(jìn)制數(shù)據(jù)解決問題,但對(duì)于有些問題的處理,如果能夠合理的使用二進(jìn)制數(shù)據(jù),會(huì)獲得意想不到的效果,比如在幾張帶有編號(hào)的紙板上寫上一些數(shù)字,利用二進(jìn)制與十進(jìn)制的轉(zhuǎn)換快速猜出該數(shù)字;在電報(bào)中使用二進(jìn)制數(shù)據(jù)編寫報(bào)文內(nèi)容,然后通過一定的規(guī)律來譯碼,得到清晰的報(bào)文內(nèi)容。
關(guān)鍵詞:二進(jìn)制十進(jìn)制猜測明碼暗碼
中圖分類號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2012)05(c)-0031-01
二進(jìn)制數(shù)據(jù)中只有兩個(gè)數(shù)碼,即0和1,隨機(jī)的給出一個(gè)二進(jìn)制數(shù)據(jù),比如11011,記下它們的位權(quán),然后將這些位權(quán)與對(duì)應(yīng)位上的數(shù)碼相乘,所得之和即為一個(gè)十進(jìn)制數(shù)據(jù),這是一個(gè)即便是計(jì)算機(jī)初學(xué)者都掌握的知識(shí),但是如果能合理的使用它,有時(shí)候卻非常有趣!
1 二進(jìn)制與數(shù)據(jù)猜測
事先準(zhǔn)備N張卡片,從0到N-1依次編上號(hào),利用二進(jìn)制就可以準(zhǔn)確的猜出1到2N-1之內(nèi)的任意自然數(shù)。假設(shè)N=5,則可以準(zhǔn)確的猜出1到31之間的任意自然數(shù)。從0到4依次給每張卡片編號(hào)。
所有編上號(hào)的卡及各卡上的數(shù)字全部記下后,猜數(shù)的原理是:若數(shù)據(jù)不在卡上,則相應(yīng)位置記為0,反之,記為1。
2 二進(jìn)制數(shù)據(jù)與電文
2.1 ASCII碼作電文暗碼
兩個(gè)實(shí)體之間互發(fā)電文時(shí),可按事先規(guī)定好的翻譯電文的約定來進(jìn)行電文暗碼的設(shè)置及明碼的翻譯,若電文內(nèi)容全為漢字時(shí),可按下面的算法進(jìn)行電文暗碼的設(shè)置及明碼的翻譯。
暗碼設(shè)置:用一個(gè)字節(jié)寫出各個(gè)英文字母及自然數(shù)1、2、3、4。
明碼翻譯:
第一步:將每個(gè)字節(jié)間加一空格
第二步:將二進(jìn)制表示的各個(gè)字節(jié)轉(zhuǎn)化成十進(jìn)制數(shù)。
第三步:將每個(gè)十進(jìn)制數(shù)當(dāng)做ASCII碼值寫出其對(duì)應(yīng)的字符,若該十進(jìn)制數(shù)是1、2、3或4時(shí),則表示聲調(diào)中的1、2、3或4聲。
第四步:寫出帶有聲調(diào)的拼音
第五步:譯出明碼。
明碼翻譯:
第一步:每個(gè)字節(jié)之間加一空格
第二步:寫出每8位二進(jìn)制數(shù)的十進(jìn)制數(shù)
第三步:寫出對(duì)應(yīng)的字母
第四步:注音
第五步:得到明碼
2.2 用BCD碼作電文暗碼
當(dāng)電文明碼內(nèi)容(假定全為漢字)已知時(shí),可按下面的算法對(duì)該電文使用四位的二進(jìn)制數(shù)據(jù)加密。
第一步:將電文內(nèi)容注上拼音。
第二步:給出第一步中每個(gè)英文字母的ASCII碼,四個(gè)聲調(diào)用1到4代替。
第三步:給出第二步中每個(gè)數(shù)字的BCD碼。
第四步:所有的BCD碼連在一起即為該電文的暗碼。
用BCD碼作電文暗碼翻譯成明文時(shí),將所有的電文內(nèi)容以四位二進(jìn)制數(shù)據(jù)為一組,將每組二進(jìn)制數(shù)據(jù)翻譯成相應(yīng)的十進(jìn)制數(shù)據(jù)。
用BCD碼作電文暗碼時(shí),最后翻譯成的數(shù)字中1到4中的數(shù)字很多,這就容易造成二義,也就是說這些數(shù)字到底是屬于ASCII值中的數(shù)字還是用來它表示聲調(diào)呢?這需要認(rèn)真判斷!
2.3 用AB碼作電文暗碼
所謂AB碼是指ASCII碼和BCD碼混合使用,使用AB碼的算法如下:
第一步:將明碼漢字部分注音(用大寫字母)。
第二步:寫出每個(gè)字母的ASCII碼,四個(gè)聲調(diào)用1到4依次表示
第三步:自左至右用ABABAB…翻譯,即第一個(gè)用ASCII碼表示,第二個(gè)用BCD碼表,第三個(gè)用ASCII碼表示,第四個(gè)用BCD碼表示,…;碰到1到4時(shí),皆用ASCII碼表示。
電文AB碼還原成明碼算法:
第一步:將AB碼按ASCII碼和BCD碼的形式用空格分開。
第二步:將相應(yīng)的ASCII碼和BCD碼轉(zhuǎn)化成十進(jìn)制數(shù)據(jù)。
第三步:寫出除1到4以外的數(shù)值作為ASCII值對(duì)應(yīng)的字符。
第三步:寫出帶有聲調(diào)的拼音。
第四步:獲取明碼。
2.4 用AC碼作電文暗碼
所謂的AC碼即ASCII碼和外碼,用AC碼作電文暗碼時(shí)的規(guī)則是:若內(nèi)容為漢字時(shí),高位為1,若為英文字符,高位為0,具體算法與3.1類似,只是漢字部分的最高位為1,英文字母的最高位為0。如電文內(nèi)容如下:ASCII碼用7位的二進(jìn)制表示。那么將其譯成AC碼的步驟如下:
第一步:漢字部分用拼音表示,其余內(nèi)容不變。
第二步:將第一步中的字母用ASCII碼表示,聲調(diào)用0到4表示(0表示輕聲)。
第三步:將第二步中的ASCII碼及0-4用二進(jìn)制表示,其中漢字的最高用1表示,字母的最高位用0表示。
第四步:獲取AC碼。
將AC碼翻譯成明文,按上面的步驟的逆即可完成。即:
第一步:將AC碼每8位間加一空格,以示區(qū)分。
第二步:轉(zhuǎn)化為十進(jìn)制(需要注要的是高位若為0表示字母或其它字符,高位若為1表示漢字的拼音字母)。
第三步:寫成字符或拼音。
第四步:獲得明文。
3 結(jié)語
文章運(yùn)用二進(jìn)制獨(dú)有的性質(zhì),介紹了如何利用二進(jìn)制來進(jìn)行數(shù)字的猜測,又巧妙地利用二進(jìn)制的特征來進(jìn)行電文的加密。
參考文獻(xiàn)
[1] 譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,1991:255~267.
[2] 蔡自興,徐光祐.人工智能及其應(yīng)用[M].北京.清華大學(xué)出版社,2004:10~21.
[3] 孫家啟.計(jì)算機(jī)文化基礎(chǔ)[M].安徽大學(xué)出版社,2010:10~17.
[4] 李志成,劉基余.關(guān)于GPSL5導(dǎo)航電文的編碼特點(diǎn)研究[J].測繪通報(bào),2006,10:4~6.
[5] 梁華國,蔣翠云.基于交替與連續(xù)長度碼的有效測試數(shù)據(jù)壓縮和解壓[J].計(jì)算機(jī)學(xué)報(bào),2004,27(4):528~53.