二維條形碼信息加密

近年來,有關(guān)不法分子通過私刻假公章偽造、篡改政府部門公文、法律文書進行詐騙的事情層出不窮,為此我們提出利用二維條形碼技術(shù)對相關(guān)法律文書進行數(shù)字簽名,通過智能手機等智能設(shè)備簡單互操作從而實現(xiàn)查驗相關(guān)具有法律效力文書真實性、完整性與不可抵賴性的作用,還可滿足數(shù)據(jù)加密傳送的需求。

一、方案二維碼應用

二維碼是用某種特定的幾何圖形,按一定規(guī)律在平面分布的黑白相間的小方格,以圖形來記錄數(shù)據(jù)信息。

(1)存儲容量大,可存儲4000多個字母或1800多個漢字信息,可滿足大多數(shù)的文書信息化應用;

(2)制作成本低,實現(xiàn)簡單;

(3)識別率高,具有糾錯功能,即使些許破損仍能識讀;

(4)普及速度快,得益于智能手機高普及率,二維碼已經(jīng)慢慢走進人民群眾的生活。

二、設(shè)計與實現(xiàn)

1、總體設(shè)計

通過在有關(guān)部門的文書流程化系統(tǒng)中集成數(shù)字簽名、二維碼生成打印、短信或彩信、WAP(無線應用協(xié)議)交互程序、數(shù)字簽名校驗功能,即可滿足本方案所需功能,還可按需加入IVR(交互式語音應答系統(tǒng))與TTS(文本轉(zhuǎn)語音)語音自助服務,提供更為人性化的服務。

2、普通公文二維碼生成

具體流程如下:

(1)文書查驗系統(tǒng)為提取文書內(nèi)容(全文或關(guān)鍵信息),如某傳票文書內(nèi)容簡化為:案號:(2013)龍民一初字第XXX號;案由:合同糾紛;開庭時間:2013年5月21日;開庭地點:第二法庭。

(2)加入時間戳,形成原碼。

(3)將原碼經(jīng)MD5摘要算法生成系統(tǒng)惟一查驗碼。

(4)將查驗碼、原碼信息、文書查驗提示說明合并生成二維碼內(nèi)容。

(5)進而通過二維碼生成程序生成最終的二維碼。二維碼生成方案都較為實用與成熟。可根據(jù)自身部署環(huán)境進行選擇。

(6)將二維碼連同文書一起打印,或是附加在文書上,二維碼生成步驟結(jié)束。

采用Google 2xing類庫創(chuàng)建二維碼圖片方法代碼如下:

/**
*@Description:根據(jù)傳人的字符串生成對應二維碼圖像
*@param qrStnng 二維碼字符串信息
*@param width 生成的圖像位寬
*@param height 生成的圖像位高
*@param path 二維碼圖像存放目錄
*@throws Exception
*@return String 二維碼圖像名稱
*/

public void generate(String qrString, String path,int width,int height) throws Exception{

log.info( "GenerateQRCode->start to generate qrcode.");

File file=new File(path);

//創(chuàng)建二維碼圖片數(shù)據(jù)數(shù)組對象

BitMatnx bitMatrix=new MultiFormatWriter-().encode(qrString, BarcodeF-ormat.QR_CODE, width, height);

//圖片采用32位十六進制數(shù)的ARGB色彩模式進行存儲

Bufferedlmage image=new Bufferedlmage (width, height,Bufferedlmage.TYPE_INT_ARGB);

用二維碼數(shù)據(jù)創(chuàng)建圖片像素,根據(jù)數(shù)組元素分別設(shè)為黑白兩色

for (int x=0;x<width; x++)(

for (int y=0;y<height; y++)( image.setRGB (x,y,bitMatrix.get(x,y)== true?BLACK:WHITE); } } ImagelO.write(image, PNG_TYPE, file); log.info(’’GenerateQRCode->end to generate qrcode");

)

3、加密文書二維碼生成

加密文書二維碼生成是在普通文書二維碼生成基礎(chǔ)上深化而來,下面以法院案件移送函為例將具體流程分解如下所述(見圖1)。

二維條形碼信息加密

按照第普通文書二維碼生成第(4)步驟合并生成如下二維碼內(nèi)容:

查驗碼:……[關(guān)于……一案,因……。根據(jù)……,現(xiàn)將該案移送你處,請查收。時間戳:…]

(1)將查驗碼經(jīng)RSA算法與對應私鑰進行加密,生成文書的數(shù)字簽名。

(2)對于需要加密傳送數(shù)據(jù)的文書,可將待加密的敏感信息通過RSA算法與接收方的公鑰進行加密,形成密文。待加密數(shù)據(jù)如下:

被告銀行賬戶:中國…銀行,6226-,余額:…

經(jīng)RSA算法與接收方的公鑰進行加密,獲得密文。考慮到加密算法計算量較大,加密大數(shù)據(jù)量的信息會不切實際,因此有必要限制需加密的信息量,從而保障加密功能的時效性。

(3)將查驗碼、原碼信息、數(shù)字簽名與密文合并生成二維碼內(nèi)容:

查驗碼:……[關(guān)于……一案,因……。根據(jù)……,現(xiàn)將該案移送你處,請查收。時間戳:…]數(shù)字簽名:…。密文:…。

隨后將二維碼打印或是附加在文書上,生成步驟結(jié)束。

相應的核心代碼簡述如下:

String content=¨”;

String beEncrypt=””;

//在信息內(nèi)容后面加入時間戳

Timestamp timeStamp = new Time-stamp( System.currentTimeMillis());

content+=timeStamp;

//使用MD5加密算法生成信息摘要,即查驗碼

String md5Code=MD5UtiI.MD5(con-tent)

查驗碼經(jīng)RSA算法與對應私鑰進行加密,生成數(shù)字簽名= RSAUtil.encrypt-ByPrivateKey(md5Code, privateKey);

刪等需加密的內(nèi)容經(jīng)RSA算法與接收方的公鑰進行加密,獲得密文

String encryptContent=RSAUtil.encrypt-ByPublicKey( beEncrypt, targetPublicKey);

//將各部分組合形成最終二維碼內(nèi)容

String endContent=’’查驗碼:”+md5Code+ content+”數(shù)字簽名:"+ signCode+”密文:”+encryptContent;

根據(jù)內(nèi)容生成二維碼圖像

QRUtil.generate(endContent, path,width, height);

//加密文書二維碼生成過程結(jié)束

4、文書交互查驗

如圖2所示。文書真實性與完整性查驗流程如下:

二維條形碼信息加密

(1)當事人收到文書后,通過普通智能設(shè)備二維碼掃描應用,對準查驗二維碼進行掃描;掃描結(jié)果包含查驗碼、文書原始碼信息、文書查驗提示說明、數(shù)字簽名與密文;

(2)根據(jù)文書查驗說明,當事人可將文書查驗碼以短信、WAP或撥打語音服務等方式發(fā)送至有關(guān)部門的文書查驗系統(tǒng);

(3)文書查驗系統(tǒng)接收文書查驗碼。通過將查驗碼與數(shù)據(jù)庫中的記錄進行比對,由于是系統(tǒng)惟一標識,從而實現(xiàn)文書真實性查驗的目的;

(4)文書查驗系統(tǒng)發(fā)送真實性查驗結(jié)果反饋給當事人,如果查驗通過則在查驗結(jié)果中告知進行完整性查驗的相關(guān)說明與方式;

(5)當事人根據(jù)真實性查驗結(jié)果進行校驗;若文書為真,當事人可選進行文書完整性查驗。在文書真實性查驗結(jié)果中,包含文書完整性臨時查驗碼,當事人進行完整性查驗時需附加該臨時查驗碼;

(6)文書查驗系統(tǒng)接收完整性臨時查驗碼;根據(jù)該臨時查驗碼調(diào)取系統(tǒng)相關(guān)文書完整性數(shù)據(jù);根據(jù)當事人請求方式將文書的完整性數(shù)據(jù)進行反饋;

(7)當事人通過智能設(shè)備獲取到文書完整性數(shù)據(jù);將文書完整性數(shù)據(jù)與紙面文書進行比對;若比對結(jié)果為通過,則說明文書完整性未被破壞,驗證通過。

5、加密數(shù)據(jù)提取

包含文書查驗方案二——文書本地一次性查驗所與密文解密流程,具體步驟如下:

(1)接收方從二維碼掃描結(jié)果中提取文原始碼;對文書原始碼使用MD5摘要算法進行計算:獲取文書信息摘要;接收方從二維碼掃描結(jié)果中提取數(shù)字簽名。

(2)對數(shù)字簽名通過RSA算法與發(fā)送方公鑰進行計算,獲取原始文書摘要信息;將摘要信息進行比對。

(3)若結(jié)果為不通過,則說明文書原始碼內(nèi)容或二維碼信息在傳送過程中已被篡改。

(4)接收方需與發(fā)送方聯(lián)系進行二次確認,以保護雙方的利益。

(5)若比對結(jié)果為通過,則可對二維碼中密文解密,可先提取二維碼中的密文信息;對密文通過RSA算法與接收方的密鑰進行計算,獲取其中的原始信息,從而達到使用二維碼傳送加密信息的目的。

相應的核心代碼簡述如下:

//將提取的正文實施摘要算法

String md5Code=MD5UtiI.MD5(content);

//將提取的數(shù)字簽名經(jīng)RSA算法與發(fā)送方公鑰進行解密

String otherMd5Code=RSAUtil.decryptByPublicKey (sign-Code, sourcePublicKey);

//將摘要信息進行比對

if( !md5Code.equals( OtherMd5Code)){

alert(”文書信息已被篡改,請聯(lián)系發(fā)送方進行二次確認”);

return;

}

//比對通過

密文經(jīng)RSA算法與接收方的私鑰進行解密,獲取原加密信息

String sourceContent= RSAUtil.decryptByPrivateKey (beEn-crypt, targetPrivateKey);

//加密數(shù)據(jù)提取過程結(jié)束

小知識之二維條碼

二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的。