一種自加密自校驗的二維碼編碼解碼方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全及自動識別領(lǐng)域,具體涉及一種自加密自校驗的二維碼編碼解碼方法。
【背景技術(shù)】
[0002]由于二維碼可表示豐富的信息,且簡便易用,特別是隨著移動智能終端的普及,二維碼掃碼已經(jīng)成了當(dāng)前應(yīng)用廣泛的方式。一些企業(yè)在產(chǎn)品上印制每件產(chǎn)品唯一的二維碼,用來實現(xiàn)產(chǎn)品真?zhèn)巫R別、產(chǎn)品追蹤、營銷活動等目的。二維碼技術(shù)是對由字符串表示的二維碼信息進(jìn)行圖案編碼而生成可供掃描的二維碼,一般采用QR碼等公開技術(shù),本身并不具有加密特性,可被任意掃碼軟件輕易識讀,從而使得產(chǎn)品上的二維碼易被偽造。
[0003]一般用于標(biāo)識唯一產(chǎn)品的二維碼信息為一個帶參數(shù)的URL,其中最主要的參數(shù)是根據(jù)一個內(nèi)部流水號生成的,偽造者易于通過識讀真品二維碼,獲取流水號模型,從而生成新的流水號,然后使用QR編碼工具生成新的二維碼。這種偽造的二維碼會對企業(yè)的二維碼應(yīng)用的開展帶來嚴(yán)重影響。還有一種常見的二維碼信息編碼方式,是對流水號使用對稱密鑰算法進(jìn)行加密,然后編入二維碼信息。這種方式可以使二維碼信息不易被識讀出流水號的生成規(guī)則,然而也有缺點:一是字典式攻擊使對稱密鑰算法可能在有限的時間內(nèi)被破解;二是即使攻擊者未能破解出密鑰,也可以使用假的二維碼信息進(jìn)行攻擊,由于這種二維碼沒有自校驗功能,系統(tǒng)不能即刻識別出其為偽造碼,仍會使用被偽造的信息向數(shù)據(jù)庫查詢,導(dǎo)致系統(tǒng)易遭受拒絕服務(wù)攻擊,影響系統(tǒng)的正常服務(wù)。
【發(fā)明內(nèi)容】
[0004]為了解決產(chǎn)品上印制的二維碼易被偽造的問題,提出一種能夠自加密解密的二維碼編碼解碼方法,可以實現(xiàn)對二維碼信息進(jìn)行自加密自校驗編碼,使二維碼信息難以偽造,同時也可以直接根據(jù)二維碼信息判斷是否偽造的二維碼。
[0005]本發(fā)明公開一種自加密自校驗的二維碼編碼方法,包括以下步驟:
[0006]SI,從當(dāng)前使用的密鑰批號對應(yīng)的數(shù)據(jù)記錄表中,隨機(jī)選擇一條記錄,該記錄中有salt和密鑰;
[0007]S2,把salt與產(chǎn)品流水號連接成一個字符串,用密鑰通過對稱密鑰算法進(jìn)行加密,得到密文;
[0008]S3,將密鑰批號、salt和密文連接成一個字符串,作為參數(shù);
[0009]S4,將給定的地址和參數(shù)結(jié)合起來,得到一個Url,作為所需的二維碼信息編碼。
[0010]所述是密鑰通過以下步驟生成的,
[0011]S11,流水遞增、查表、規(guī)則遞增等方式產(chǎn)生指定長度的新的密鑰批號;
[0012]S12,隨機(jī)產(chǎn)生一個指定長度的字符串作為salt ;
[0013]S13,根據(jù)選定的對稱密鑰算法,隨機(jī)產(chǎn)生一個密鑰;
[0014]S14,將密鑰批號、salt和密鑰存入數(shù)據(jù)記錄表;
[0015]S15,密鑰計數(shù)加I;
[0016]S16,判斷密鑰計數(shù)是否已達(dá)到指定數(shù)量,未到達(dá)返回步驟S12繼續(xù),否則結(jié)束本批密鑰的生成過程。
[0017]該二維碼編碼的結(jié)構(gòu)是:通過將隨機(jī)salt與產(chǎn)品流水號結(jié)合,使用隨機(jī)密鑰加密,將密鑰批號、salt和加密后的密文連接在一起的字符串作為二維碼信息的參數(shù),同時后臺存儲密鑰批號、salt與密鑰的對應(yīng)關(guān)系,每個密鑰批號對應(yīng)于一批salt和密鑰,每個salt唯一對應(yīng)一個密鑰。
[0018]本發(fā)明還公開一種自加密自校驗的二維碼解碼方法,包括以下步驟:
[0019]S21,對需解碼的二維碼信息編碼0,解析Url得到參數(shù);
[0020]S22,將參數(shù)中的字符串,按照指定長度分割,得到密鑰批號、salt和密文;
[0021]S23,查詢密鑰批號對應(yīng)的數(shù)據(jù)記錄表,找出其中salt對應(yīng)的密鑰;
[0022]S24,使用密鑰對密文進(jìn)行解密,得到解密后的字符串;
[0023]S25,對解密后的字符串按指定長度進(jìn)行分割,得到解碼后的salt和解碼后的產(chǎn)品流水號;
[0024]S26,檢查步驟S25解碼后的salt是否等于步驟2中分割出的salt,若相等則該編碼為真,輸出步驟S25解碼后的產(chǎn)品流水號;否則判定該碼是偽造碼,輸出判定結(jié)果。
[0025]該二維碼由于在編碼中使用了隨機(jī)salt和隨機(jī)密鑰進(jìn)行加密,使得破解的難度大大增加,以現(xiàn)有的計算機(jī)的計算能力難以在可以接受的時間內(nèi)進(jìn)行破解;由于密鑰批號的使用,可以在一段時間后全部更換密鑰,則即使之前的密鑰遭到了破解,也可以保障其他密鑰的安全,進(jìn)一步保障了編碼的安全可靠性,同時也可以提供支持分庫分表的主鍵,來實現(xiàn)系統(tǒng)對高并發(fā)服務(wù)的支持。該編碼方法可以在解碼過程中直接實現(xiàn)編碼真?zhèn)涡r?,剔除偽造的二維碼,保護(hù)系統(tǒng)服務(wù)的正常運轉(zhuǎn)。
【附圖說明】
[0026]圖1為本發(fā)明一種自加密自校驗的二維碼編碼結(jié)構(gòu)圖
[0027]圖2為本發(fā)明一種自加密自校驗的二維碼密鑰生成流程圖
[0028]圖3為本發(fā)明一種自加密自校驗的二維碼編碼和自加密的流程圖
[0029]圖4為本發(fā)明一種自加密自校驗的二維碼解碼和自加密的流程圖
【具體實施方式】
[0030]參見圖1,為本發(fā)明的二維碼的編碼結(jié)構(gòu)O包括地址I和參數(shù)2,參數(shù)2包括密鑰批號24,隨機(jī)salt22和密文23,密文23由密鑰231、salt22和產(chǎn)品流水號231組成,通過將隨機(jī)salt與產(chǎn)品流水號結(jié)合,使用隨機(jī)密鑰加密,將密鑰批號、salt和加密后的密文連接在一起的字符串作為二維碼信息的參數(shù),同時后臺存儲密鑰批號、salt與密鑰的對應(yīng)關(guān)系,每個密鑰批號對應(yīng)于一批salt和密鑰,每個salt唯一對應(yīng)一個密鑰。
[0031]該密鑰通過以下步驟生成,參見圖2
[0032]步驟S11,流水遞增、查表、規(guī)則遞增等方式產(chǎn)生指定長度的新的密鑰批號;如長度為4的1001作為密鑰批號,指定生成100個密鑰,
[0033]步驟S12,隨機(jī)產(chǎn)生一個指定長度的字符串作為salt ;如產(chǎn)生一個長度為12的字符串 WXXPFD79G2FP 作為 saltl,
[0034]步驟S13,根據(jù)選定的對稱密鑰算法,隨機(jī)產(chǎn)生一個密鑰