DES加密算法在二維條碼數(shù)據(jù)加密中的應用

DES加密算法將整個算法的安全性寓于密鑰之中,具有算法簡單、成本低等特點,因此是實現(xiàn)條形碼加密的理想算法。

一、二維條碼簡介

二維條碼的誕生解決了一維條碼不能解決的問題,它能夠在橫向和縱向兩個方位同時表達信息,不僅能在很小的面積內(nèi)表達大量的信息,而且能夠表達漢字和存儲圖像。除此之外,二維條碼信息的保密性高,PDF417是基于文件的數(shù)據(jù),可以對整個文件進行加密處理,PDF417的加密過程是對整個信息的,如果一個二維條碼中包含了商品資料和客戶簽名,那么,經(jīng)加密處理后的PDF417條碼同時包括了數(shù)據(jù)內(nèi)容和圖像信息,修改之中的任何一項信息都將導致條碼識讀的失敗。二維條碼的出現(xiàn)拓展了條碼的應用領域,因此被許多不同的行業(yè)所采用。

PDF417條碼是一種多層、可變長度,具有高數(shù)據(jù)容量和強糾錯能力的連續(xù)型重疊式二維條碼。PDF417條碼符號是由空白區(qū)包圍的序列行組成。符號的頂部和底部為空白區(qū),左右分別為左空白區(qū)和右空白區(qū)。上下空白區(qū)之間為多行結構。每行數(shù)據(jù)符號字符數(shù)相同,行與行左右對齊直接銜接。其最小行數(shù)為3,最大行數(shù)為900每行構成如圖1所示。

DES加密算法在二維條碼數(shù)據(jù)加密中的應用

二、二維條碼的生成與識別流程

隨著網(wǎng)絡應用的不斷擴大,人們對網(wǎng)絡安全保護提出了更高要求。二維條碼防偽加密技術是在二維條碼的基礎上運用密碼學的原理,與二維條碼的編碼技術結合起來,從而克服了二維條碼所載信息在網(wǎng)上和其他物理空間傳輸時容易被破譯和復制的缺點。由于DES算法比較簡單,成本低,整個算法的安全性寓于密鑰之中,可適用于二維條碼的加密。因此,加密算法選擇DES算法,便可達到二維條碼加密的效果。

DES加密算法是通過循環(huán)和迭代,將簡單的運算和變換構成數(shù)據(jù)流的非線性變換,其算法設計的核心就是讓所有的秘密寓于密鑰之中,生成和識別條碼的過程如圖2所示。

DES加密算法在二維條碼數(shù)據(jù)加密中的應用

三、DES加密算法在二維條碼加密中的實現(xiàn)

一維條碼數(shù)據(jù)生成程序是利用二維條碼編碼規(guī)則與DES加密算法相結合的具體實現(xiàn)。在二維條碼中引入DES加密算法是主要的設計思想,使二維條碼具有更高的保密性和防偽性,它擴展了二維條碼的應用。

二維條碼PDF417數(shù)據(jù)生成與自動識別系統(tǒng)可以將文本、圖形等信息轉化成二維條碼并可依照所應用實物的大小選擇一定的放大系數(shù)并進行打印口在條碼的生成過程中可以依據(jù)實際需要對信息進行加密處理,密鑰采用目前最新的并且簡單而快速的加密算法。條碼的自動識別將采用專用的閱讀器對條碼進行掃描即可讀人條碼中的信息解碼并顯示信息,若信息經(jīng)過加密則要輸入密碼方可顯示。

1、系統(tǒng)軟件包及調用函數(shù)

二維條碼的生成與自動識別系統(tǒng)是利用底層基礎庫開發(fā)的一個應用程序,可以為具體應用進行二次開發(fā)。

本系統(tǒng)軟件部分包括:底層基礎庫;二維條碼的生成與自動識別系統(tǒng)口底層基礎庫包括以下函數(shù):

生成條碼函數(shù)

SinoPDFMakeStr(char fg, char}x dataStr,int datalen, char * bmpBarcode, int buflen, char xkeyword)

識別條碼函數(shù)

long SinoPDFRecogStr (char fg, char* bmp-Barcode, char *dataStr, int datalen, char * key-word)

DES加解密函數(shù)

long SinoDESencrypt(char*,char*dataStr,int datalen, char* buflen, char* keyword)

設置糾錯等級

long SinoPDFMakeErro(long Lev)

2、DES加解密函數(shù)的實現(xiàn)

(1)初始置換IP

初始置換在第一輪運算之前執(zhí)行,將64位明文的位置進行置換,得到一個亂序的64位明文組,而后分成左右兩段,每段為32位,以L和R表示。然后進行16輪迭代過程。

在這步的操作中生成子密鑰,給出部分程序:

INT32 DES ( ULONG8 * data,ULONG8 * key,ULONG32 n ,ULONG32 readlen)

{

ULONG32 i = 0 , j= O;

makefirstkey ((ULONG32 *)key) ; /* 產(chǎn)生密鑰*/

for (i = 0 i< n ; j ++)

{

for (i = 0 i<readlen; j ++8)

{ handle-data( ULONG32*) &data [j] ,DESENCRY ) ;

}

}

return O;

}

......

INT32 makekey(ULONG32*keyleft, ULONG32 * keyright,ULONG32 number)

/*輸入密鑰的地址,一個32位的*

/ { ULONG32 tmpkey[2]={O};

ULONG32*Ptmpkey=-(ULONG32*)tmpkey;

ULONG32*Poutkey;(UIONG32*)&g-outkey[number];

INT32 j; memset ((UIONG8 * ) tmpkey, O, sizeof(tmpkey)) ;

...... return 0;

;

(2)逆初始置換

IP 逆初始置換是初始置換的逆過程,將16輪迭代后給出的64位組進行置換,得到輸出的密文組。 應注意的是DES在最后一輪后,左、右半部分并沒有交換,而是將R16與L16并在一起形成一個分組做為逆初始置換的輸入。

(3)糾錯函數(shù)的實現(xiàn)

先將錯誤糾正碼字集c[i]及臨時變量v1、v2、v3的值初始化為0。生成錯誤糾正碼字集c[i]程序如下: for(i= BarLen一1;i>=0;i- -)//BarLen為碼字集的長度。

{

vl=( BarBuf[il+ c[ErrorCode一1])%929;//ErrorCode為錯誤碼字的個數(shù)

for(j = ErrorCode - 1;j>O;j - - ) {

v2=(vl * a[j]l) % 929;

v3=929 - v2;

c[j] = (c[j - 1] + v3 ) %929;

{

v2=(vl *a[0l) % 929;

v3 =929-v2;

c[0]= v3 % 929;

for(i- O;i< ErrorCode;i++ )

c[i] =929 - c[i];

}

將這些具體的程序實現(xiàn)過程封裝在了一個DLL中,在實際應用中可以通過調用DES的加解密函數(shù)使二維條碼與加密技術相結合設計和開發(fā)的二維條碼自動識別系統(tǒng)成功的實現(xiàn)了二維條碼的生成與自動識別,來節(jié)省二次開發(fā)的周期。

小知識之PDF417條碼

PDF417條碼是一種高密度、高信息含量的便攜式數(shù)據(jù)文件,是實現(xiàn)證件及卡片等大容量、高可靠性信息自動存儲、攜帶并可用機器自動識讀的理想手段。