?

由于很多同學(xué)還沒有跟上前面系列課程的進(jìn)度,因此,今天暫停課程,來講一篇技術(shù)科普文:二維碼里面到底是什么?
生活中,經(jīng)常能夠看到二維碼,到處充斥著掃一掃,那么,究竟二維碼里面是什么?能用二維碼做什么?如何創(chuàng)建和使用?如何判斷二維碼是否安全?
二維碼的本質(zhì)
二維碼就是根據(jù)某種約定的編碼方式將一段文本信息轉(zhuǎn)換為一個能夠被解碼識別的圖片。
其本質(zhì)就是一段文本信息。
既然是文本信息,可能是如下一些信息用途類別:
人的姓名/一個數(shù)字/一段文字/一個網(wǎng)址/一個驗(yàn)證碼/一個訂單ID/會員ID/優(yōu)惠券編號/位置坐標(biāo)/WiFi密碼......
也就是可能是任意文本信息,除了有長度限制,沒有其它限制。二維碼最大數(shù)據(jù)含量大約是1850個字符。
那么關(guān)鍵點(diǎn)就是編碼方式,到底什么是編碼方式?
年紀(jì)稍大的人應(yīng)該知道,在電話沒有普及之前,都是用電報來傳遞信息。
電報就是將需要發(fā)送的文本信息,編碼,通過無線電波發(fā)射,接收方接收后進(jìn)行解碼,翻譯回原來的文本信息。
這里的無線電波和二維碼是類似的。
密碼加密也是一種編碼方式
至于如何編碼,編碼之后變成了什么信息數(shù)據(jù),這在不同的規(guī)則或約定方法下是不一樣的。
舉一個密碼加密的例子:
h e l l o w o r l d
將每個字母替換為該字母在字母表中向后順序移動5個位置的字母,碰到末尾則回到頭部
結(jié)果如下:
m j q q t b t w q i
這里的字母表和數(shù)字5就是關(guān)鍵的鑰匙,只有兩者皆知道的情況下才能解碼
但是這種加密方式有很大的弱點(diǎn),因?yàn)樽帜傅氖褂妙l率通過大數(shù)據(jù)是可以統(tǒng)計出來的,比如元音字母的概率會更大,如果得到一定量的加密后的信息,通過統(tǒng)計加密后的字母的使用頻率,和原始使用頻率進(jìn)行對比,就容易發(fā)現(xiàn)對照關(guān)系,從而推算出加密的方法。
二維碼的編碼方式是公開的,是為了使用二維碼的一方能夠按照公開的編碼方式進(jìn)行逆向的解碼。
二維碼還有一個很好的特點(diǎn),就是具有一定的容錯能力。二維條碼因穿孔、污損等引起局部損壞時,仍然可以正確得到識讀,損毀面積達(dá)50%仍可恢復(fù)信息。這同樣是根據(jù)編碼規(guī)則從數(shù)學(xué)原理上進(jìn)行保證。
所以大家經(jīng)常看到二維碼的正中間會放一個小圖標(biāo),盡管占據(jù)了二維碼的部分面積,但仍然可以正常識別出來。
二維碼圖片的編碼原理
這里大概介紹一下QR Code這種二維碼的編碼規(guī)則:

位置探測圖形,位置探測圖形分隔符,定位圖形:對二維碼的定位使用,對于每個QR碼來說,位置是固定的,大小規(guī)格有所差異
校正圖形:如果規(guī)格確定,則校正圖形的數(shù)量以及位置也確定
格式信息:用來表示該二維碼的糾錯級別,總共有L、M、Q、H四種,分別有不同的糾錯率
版本信息:共有40種規(guī)格的矩陣(一般為黑白色),從21x21(版本1)到177x177(版本40),每種版本符號比前版本 每邊增加4個模塊。
數(shù)據(jù)和糾錯碼字:實(shí)際的二維碼數(shù)據(jù)信息以及糾錯碼字(可以用于修正二維碼損壞所帶來的錯誤)。
簡要的編碼過程:
1.數(shù)據(jù)分析:確定編碼的字符類型,然后按對應(yīng)的字符集轉(zhuǎn)換成符號字符;
2.數(shù)據(jù)編碼:將數(shù)據(jù)字符轉(zhuǎn)換為位流,每8位一個碼字,整體構(gòu)成一個數(shù)據(jù)的碼字序列。

3.糾錯編碼:將碼字序列分塊,根據(jù)糾錯等級和分塊的碼字,產(chǎn)生糾錯碼字,并把糾錯碼字加入到數(shù)據(jù)碼字序列后面,成為一個新的序列。

4.構(gòu)造最終數(shù)據(jù)信息:在規(guī)格確定的條件下,將上面產(chǎn)生的序列按次序放到分塊中
5.構(gòu)造矩陣:將探測圖形、分隔符、定位圖形、校正圖形和碼字模塊放入矩陣中。

6. 掩摸:將掩摸圖形用于符號的編碼區(qū)域,使得二維碼圖形中的深色和淺色(黑色和白色)區(qū)域能夠比率最優(yōu)的分布。
7. 格式和版本信息:生成格式和版本信息放入相應(yīng)區(qū)域內(nèi)。
以上僅僅是最簡單的說明,真正的編碼還有很多的細(xì)節(jié),以及對應(yīng)的數(shù)學(xué)計算公式和規(guī)則,具體信息,做程序的時候再去搜索相關(guān)的信息吧。
能用二維碼做什么
其實(shí)應(yīng)該說,能用一段文本信息做什么,二維碼就能做什么。
關(guān)鍵不在于二維碼,而在于如何定義這段文本信息,約定好文本信息的用途,二維碼只是一種編碼方式,便于通過設(shè)備用程序識別而已。
下面就是一些常見用途:
信息獲?。⒌貓D、WIFI密碼、資料)
網(wǎng)站跳轉(zhuǎn)(跳轉(zhuǎn)到微博、手機(jī)網(wǎng)站、網(wǎng)站)
廣告推送(用戶掃碼,直接瀏覽商家推送的視頻、音頻廣告)
手機(jī)電商(用戶掃碼、手機(jī)直接購物下單)
防偽溯源(用戶掃碼、即可查看生產(chǎn)地;同時后臺可以獲取最終消費(fèi)地)
優(yōu)惠促銷(用戶掃碼,下載電子優(yōu)惠券,抽獎)
會員管理(用戶手機(jī)上獲取電子會員信息、VIP服務(wù))
手機(jī)支付(掃描商品二維碼,通過銀行或第三方支付提供的手機(jī)端通道完成支付)
如何創(chuàng)建一個二維碼圖片
如果掌握了二維碼的編碼方式,是可以通過紙和筆將二維碼圖片畫出來的,就是太麻煩了
一般是通過編寫計算機(jī)程序的方式將文本信息編碼為一個二維碼圖片
如果普通人不會編寫計算機(jī)程序,那么就只能利用別人編寫好的程序了
網(wǎng)上有很多網(wǎng)站,提供在線生成二維碼的功能
具體是哪些,這里就不說了,大家用關(guān)鍵字【二維碼生成】到某著名搜索引擎去搜索
一般在左側(cè)輸入一段文字,點(diǎn)擊生成按鈕,右側(cè)就會看到生成好的二維碼圖片了
如何使用一個二維碼圖片
生成一個二維碼圖片后,可以印刷出來,也可以用圖片文件傳輸給別人的方式來進(jìn)行使用
使用方最重要的是需要一個程序來掃描分析圖片,將里面的信息進(jìn)行解碼程序處理,翻譯出原始的文本信息
得到里面的文本信息之后,再看該信息是用于什么用途的
一般發(fā)布這個圖片的時候會附帶詳細(xì)說明該二維碼的的用途
那么根據(jù)要求,采用對應(yīng)的軟件進(jìn)行相應(yīng)的處理
例如,最常見的,掃描一個二維碼,顯示一個微信公眾號的主頁,可以關(guān)注這個微信公眾號
那么這個對應(yīng)的軟件就是微信App,它會進(jìn)行拍照掃描解碼,然后根據(jù)約定的規(guī)則,拿到一個微信公眾號的唯一ID,然后去服務(wù)器獲取這個微信公眾號的相關(guān)信息,顯示在App中,并提供關(guān)注等功能
所以,僅有二維碼圖片是遠(yuǎn)遠(yuǎn)不夠的,還需要相應(yīng)的約定用途說明,以及對應(yīng)的處理軟件。
如何判斷二維碼是否安全
經(jīng)常有聽到新聞?wù)f,某人掃了一個二維碼,然后銀行里的錢或者賬戶里的錢就被扣掉了,聽起來蠻嚇人的,要如何避免這種情況呢
一般來說,二維碼圖片本質(zhì)就是一段文本信息,從原理上說,一段文本信息是沒有能力進(jìn)行任何處理的
最大的可能就是這段文本信息可能是一個惡意網(wǎng)站的網(wǎng)址,或者是一個惡意軟件的下載網(wǎng)址
只有我們不去訪問這個網(wǎng)站,或者下載這個軟件,或者不安裝這個軟件,是不會受到傷害的
所以,在按照對方要求掃碼之前,建議去下載一個專門掃描二維碼的安全軟件,它只有掃碼功能,只能顯示出二維碼里面的信息給你看,即不能安裝程序,也不會去訪問網(wǎng)址,我們先看看里面是什么文本信息,然后再結(jié)合其它周邊信息來判斷是否足夠安全。這種掃碼軟件應(yīng)該還是有很多多,具體大家自己搜索一下。
最后說明一點(diǎn),安全是多方面,多重手段來保護(hù)的,二維碼僅僅只是一個工具。盡量注意以下一些原則:
1.不要泄漏驗(yàn)證碼。
2.保護(hù)好自己的手機(jī),如果手機(jī)遺失優(yōu)先到手機(jī)運(yùn)營商進(jìn)行掛失。然后掛失相關(guān)信用卡或者銀行卡。
3.不同網(wǎng)站或App的賬號使用不同的密碼,防止某一個系統(tǒng)被攻破之后,利用相同賬號密碼去撞庫攻擊其它系統(tǒng)。
4.收到不明信息,盡量先去網(wǎng)站搜索:關(guān)鍵字+騙子 試試看是否別人碰到同樣的騙局或情況。
往期教程
因?yàn)榻坛淌窍盗薪坛?,前后關(guān)聯(lián)性非常強(qiáng),如果有希望每天花半小時,零基礎(chǔ)學(xué)習(xí)編程的,請按照歷史消息發(fā)布時間先后次序進(jìn)行閱讀。