国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

VB使用Base64編碼

2021-12-21 23:13陳新龍
電腦報(bào) 2021年47期
關(guān)鍵詞:二進(jìn)制字符編碼

陳新龍

現(xiàn)有的字符集非常多,常用的有ASCII、UTF-8、GBK等。ASCII編碼是美國(guó)信息交換標(biāo)準(zhǔn)代碼的簡(jiǎn)稱,它是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng),只定義了128個(gè)字符。其他的編碼內(nèi)容更豐富,容量也更大。

在各種信息傳輸渠道中并不能很好地支持所有的編碼,比如在郵件傳輸中就不支持ASCII編碼中的控制字符。連最通用的ASCII編碼都不能完全支持,其他編碼我們就更無(wú)法保證信息傳輸?shù)耐暾粤恕?/p>

為了保證各種信息傳輸渠道都能正確識(shí)別信息,Base64編碼誕生了。Base64是一種用64個(gè)字符來(lái)表示任意二進(jìn)制數(shù)據(jù)的方法,將二進(jìn)制數(shù)據(jù)轉(zhuǎn)變?yōu)?4個(gè)“可打印字符”。它是一種編碼方式,而非加密方式。

Base64一般用于在HTTP協(xié)議下傳輸二進(jìn)制數(shù)據(jù),由于HTTP協(xié)議是文本協(xié)議,所以在HTTP協(xié)議下傳輸二進(jìn)制數(shù)據(jù)前需要將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)。

然而簡(jiǎn)單的直接轉(zhuǎn)換是不夠的,因?yàn)榫W(wǎng)絡(luò)傳輸只能傳輸可打印字符。這64個(gè)字符中包括大小寫字母、數(shù)字、+和/,還有用來(lái)補(bǔ)缺的特殊字符=(圖1)。

以在VB中將ASCII編碼進(jìn)行Base64編碼和解碼為例。Base64有64個(gè)字符,2^6=64。所以用一個(gè)6位的二進(jìn)制數(shù)來(lái)表示一個(gè)Base64編碼表就夠了。

如果有3個(gè)字節(jié)(3×8=24)共計(jì)24位的二進(jìn)制數(shù),就剛好可以用4位(4×6=24)Base64字符來(lái)表示。

ASCII編碼轉(zhuǎn)Base64編碼流程的第一步是將ASCII編碼字符串根據(jù)ASCII碼對(duì)照表轉(zhuǎn)換成二進(jìn)制數(shù),然后把二進(jìn)制數(shù)值按每6位進(jìn)行劃分,然后將6位二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),然后在對(duì)照表中找到Base64編碼字符完成轉(zhuǎn)碼。

如果待編碼字符串長(zhǎng)度不是3的倍數(shù)怎么辦呢?不是3的倍數(shù)會(huì)導(dǎo)致ASCII轉(zhuǎn)換的二進(jìn)制數(shù)串不能整除于6了,也就不能完整編碼為Base64。為了讓編譯出的數(shù)串可以整除,就需要用0補(bǔ)位。如果有連續(xù)六位都是0的話,就用字符“=”來(lái)表示。

例如英文單詞“Man”對(duì)應(yīng)的ASCII編碼值為77、97、110,通過(guò)進(jìn)制轉(zhuǎn)換得出24位二進(jìn)制數(shù),將24位二進(jìn)制數(shù)按6個(gè)一組分成四份。然后根據(jù)Base64的編碼值找出最終對(duì)應(yīng)的值TWFU(圖2)。

知曉了原理后,我們通過(guò)VB編程來(lái)實(shí)現(xiàn)ASCII編碼轉(zhuǎn)換為Base64編碼的過(guò)程,首先我們創(chuàng)建兩個(gè)Text文本框(Text1代表原始字符,Text2代表加密轉(zhuǎn)換后的字符)。用txt來(lái)存儲(chǔ)Base編碼的字符集合(A-Z,a-z,0-9,+,- 64個(gè)字符)。

在Text1文本中輸入原始字符Python,通過(guò)for循環(huán)提取出一個(gè)英文字符,將提取的字符通過(guò)ASCII編碼方法將字符轉(zhuǎn)換成數(shù)字,接下來(lái)將數(shù)字除以二取余,倒序輸出排列,高位補(bǔ)零,轉(zhuǎn)換成最終二進(jìn)制的數(shù),打印在空白區(qū)域。

由于Base64編碼按每6位一組進(jìn)行劃分,所以根據(jù)每六位二進(jìn)制數(shù)(從左往右)進(jìn)行加權(quán)求和公式為(tmp=tmp*2+val(s,i,1);例如原始第一個(gè)字符為P,ASCII碼值為80,轉(zhuǎn)換成二進(jìn)制后值為01010000,提取前六位010100,通過(guò)加權(quán)法求出二進(jìn)制轉(zhuǎn)十進(jìn)制為20,找出txt中第20位置編碼的值為U即可(txt的索引初始值為0,所以第20位其實(shí)是第21位),以此類推,Python從ASCII碼轉(zhuǎn)換成Base64碼后值為UH10Ag9u。

小結(jié):Base64編碼是現(xiàn)代密碼學(xué)的基礎(chǔ),把原本8位一組表示數(shù)據(jù),改為6位一組表示數(shù)據(jù),不足的部分補(bǔ)零,用Base64編碼之后,數(shù)據(jù)長(zhǎng)度會(huì)變長(zhǎng)約1/3;雖然Base64可以作為簡(jiǎn)單加密算法,但是Base64能夠逆運(yùn)算,非常不安全(圖3)。

猜你喜歡
二進(jìn)制字符編碼
住院病案首頁(yè)ICD編碼質(zhì)量在DRG付費(fèi)中的應(yīng)用
Python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫
有用的二進(jìn)制
用Scratch把十進(jìn)制轉(zhuǎn)為二進(jìn)制
正則表達(dá)式快速入門
有趣的進(jìn)度
圖片輕松變身ASCⅡ藝術(shù)畫
高效視頻編碼幀內(nèi)快速深度決策算法
視頻監(jiān)視系統(tǒng)中字符疊加技術(shù)的應(yīng)用
不斷修繕 建立完善的企業(yè)編碼管理體系