?
由于很多同學還沒有跟上前面系列課程的進度,因此,今天暫停課程,來講一篇技術科普文:二維碼里面到底是什么?
生活中,經常能夠看到二維碼,到處充斥著掃一掃,那么,究竟二維碼里面是什么?能用二維碼做什么?如何創建和使用?如何判斷二維碼是否安全?
二維碼的本質
二維碼就是根據某種約定的編碼方式將一段文本信息轉換為一個能夠被解碼識別的圖片。
其本質就是一段文本信息。
既然是文本信息,可能是如下一些信息用途類別:
人的姓名/一個數字/一段文字/一個網址/一個驗證碼/一個訂單ID/會員ID/優惠券編號/位置坐標/WiFi密碼......
也就是可能是任意文本信息,除了有長度限制,沒有其它限制。二維碼最大數據含量大約是1850個字符。
那么關鍵點就是編碼方式,到底什么是編碼方式?
年紀稍大的人應該知道,在電話沒有普及之前,都是用電報來傳遞信息。
電報就是將需要發送的文本信息,編碼,通過無線電波發射,接收方接收后進行解碼,翻譯回原來的文本信息。
這里的無線電波和二維碼是類似的。
密碼加密也是一種編碼方式
至于如何編碼,編碼之后變成了什么信息數據,這在不同的規則或約定方法下是不一樣的。
舉一個密碼加密的例子:
h e l l o w o r l d
將每個字母替換為該字母在字母表中向后順序移動5個位置的字母,碰到末尾則回到頭部
結果如下:
m j q q t b t w q i
這里的字母表和數字5就是關鍵的鑰匙,只有兩者皆知道的情況下才能解碼
但是這種加密方式有很大的弱點,因為字母的使用頻率通過大數據是可以統計出來的,比如元音字母的概率會更大,如果得到一定量的加密后的信息,通過統計加密后的字母的使用頻率,和原始使用頻率進行對比,就容易發現對照關系,從而推算出加密的方法。
二維碼的編碼方式是公開的,是為了使用二維碼的一方能夠按照公開的編碼方式進行逆向的解碼。
二維碼還有一個很好的特點,就是具有一定的容錯能力。二維條碼因穿孔、污損等引起局部損壞時,仍然可以正確得到識讀,損毀面積達50%仍可恢復信息。這同樣是根據編碼規則從數學原理上進行保證。
所以大家經??吹蕉S碼的正中間會放一個小圖標,盡管占據了二維碼的部分面積,但仍然可以正常識別出來。
二維碼圖片的編碼原理
這里大概介紹一下QR Code這種二維碼的編碼規則:
位置探測圖形,位置探測圖形分隔符,定位圖形:對二維碼的定位使用,對于每個QR碼來說,位置是固定的,大小規格有所差異
校正圖形:如果規格確定,則校正圖形的數量以及位置也確定
格式信息:用來表示該二維碼的糾錯級別,總共有L、M、Q、H四種,分別有不同的糾錯率
版本信息:共有40種規格的矩陣(一般為黑白色),從21x21(版本1)到177x177(版本40),每種版本符號比前版本 每邊增加4個模塊。
數據和糾錯碼字:實際的二維碼數據信息以及糾錯碼字(可以用于修正二維碼損壞所帶來的錯誤)。
簡要的編碼過程:
1.數據分析:確定編碼的字符類型,然后按對應的字符集轉換成符號字符;
2.數據編碼:將數據字符轉換為位流,每8位一個碼字,整體構成一個數據的碼字序列。
3.糾錯編碼:將碼字序列分塊,根據糾錯等級和分塊的碼字,產生糾錯碼字,并把糾錯碼字加入到數據碼字序列后面,成為一個新的序列。
4.構造最終數據信息:在規格確定的條件下,將上面產生的序列按次序放到分塊中
5.構造矩陣:將探測圖形、分隔符、定位圖形、校正圖形和碼字模塊放入矩陣中。
6. 掩摸:將掩摸圖形用于符號的編碼區域,使得二維碼圖形中的深色和淺色(黑色和白色)區域能夠比率最優的分布。
7. 格式和版本信息:生成格式和版本信息放入相應區域內。
以上僅僅是最簡單的說明,真正的編碼還有很多的細節,以及對應的數學計算公式和規則,具體信息,做程序的時候再去搜索相關的信息吧。
能用二維碼做什么
其實應該說,能用一段文本信息做什么,二維碼就能做什么。
關鍵不在于二維碼,而在于如何定義這段文本信息,約定好文本信息的用途,二維碼只是一種編碼方式,便于通過設備用程序識別而已。
下面就是一些常見用途:
信息獲取(名片、地圖、WIFI密碼、資料)
網站跳轉(跳轉到微博、手機網站、網站)
廣告推送(用戶掃碼,直接瀏覽商家推送的視頻、音頻廣告)
手機電商(用戶掃碼、手機直接購物下單)
防偽溯源(用戶掃碼、即可查看生產地;同時后臺可以獲取最終消費地)
優惠促銷(用戶掃碼,下載電子優惠券,抽獎)
會員管理(用戶手機上獲取電子會員信息、VIP服務)
手機支付(掃描商品二維碼,通過銀行或第三方支付提供的手機端通道完成支付)
如何創建一個二維碼圖片
如果掌握了二維碼的編碼方式,是可以通過紙和筆將二維碼圖片畫出來的,就是太麻煩了
一般是通過編寫計算機程序的方式將文本信息編碼為一個二維碼圖片
如果普通人不會編寫計算機程序,那么就只能利用別人編寫好的程序了
網上有很多網站,提供在線生成二維碼的功能
具體是哪些,這里就不說了,大家用關鍵字【二維碼生成】到某著名搜索引擎去搜索
一般在左側輸入一段文字,點擊生成按鈕,右側就會看到生成好的二維碼圖片了
如何使用一個二維碼圖片
生成一個二維碼圖片后,可以印刷出來,也可以用圖片文件傳輸給別人的方式來進行使用
使用方最重要的是需要一個程序來掃描分析圖片,將里面的信息進行解碼程序處理,翻譯出原始的文本信息
得到里面的文本信息之后,再看該信息是用于什么用途的
一般發布這個圖片的時候會附帶詳細說明該二維碼的的用途
那么根據要求,采用對應的軟件進行相應的處理
例如,最常見的,掃描一個二維碼,顯示一個微信公眾號的主頁,可以關注這個微信公眾號
那么這個對應的軟件就是微信App,它會進行拍照掃描解碼,然后根據約定的規則,拿到一個微信公眾號的唯一ID,然后去服務器獲取這個微信公眾號的相關信息,顯示在App中,并提供關注等功能
所以,僅有二維碼圖片是遠遠不夠的,還需要相應的約定用途說明,以及對應的處理軟件。
如何判斷二維碼是否安全
經常有聽到新聞說,某人掃了一個二維碼,然后銀行里的錢或者賬戶里的錢就被扣掉了,聽起來蠻嚇人的,要如何避免這種情況呢
一般來說,二維碼圖片本質就是一段文本信息,從原理上說,一段文本信息是沒有能力進行任何處理的
最大的可能就是這段文本信息可能是一個惡意網站的網址,或者是一個惡意軟件的下載網址
只有我們不去訪問這個網站,或者下載這個軟件,或者不安裝這個軟件,是不會受到傷害的
所以,在按照對方要求掃碼之前,建議去下載一個專門掃描二維碼的安全軟件,它只有掃碼功能,只能顯示出二維碼里面的信息給你看,即不能安裝程序,也不會去訪問網址,我們先看看里面是什么文本信息,然后再結合其它周邊信息來判斷是否足夠安全。這種掃碼軟件應該還是有很多多,具體大家自己搜索一下。
最后說明一點,安全是多方面,多重手段來保護的,二維碼僅僅只是一個工具。盡量注意以下一些原則:
1.不要泄漏驗證碼。
2.保護好自己的手機,如果手機遺失優先到手機運營商進行掛失。然后掛失相關信用卡或者銀行卡。
3.不同網站或App的賬號使用不同的密碼,防止某一個系統被攻破之后,利用相同賬號密碼去撞庫攻擊其它系統。
4.收到不明信息,盡量先去網站搜索:關鍵字+騙子 試試看是否別人碰到同樣的騙局或情況。
往期教程
因為教程是系列教程,前后關聯性非常強,如果有希望每天花半小時,零基礎學習編程的,請按照歷史消息發布時間先后次序進行閱讀。