DES加密算法将整个算法的安全性寓于密钥之中,具有算法简单、成本低等特点,因此是实现条形码加密的理想算法。

一、二维条码简介

二维条码的诞生解决了一维条码不能解决的问题,它能够在横向和纵向两个方位同时表达信息,不仅能在很小的面积内表达大量的信息,而且能够表达汉字和存储图像。除此之外,二维条码信息的保密性高,PDF417是基于文件的数据,可以对整个文件进行加密处理,PDF417的加密过程是对整个信息的,如果一个二维条码中包含了商品资料和客户签名,那么,经加密处理后的PDF417条码同时包括了数据内容和图像信息,修改之中的任何一项信息都将导致条码识读的失败。二维条码的出现拓展了条码的应用领域,因此被许多不同的行业所采用。

PDF417条码是一种多层、可变长度,具有高数据容量和强纠错能力的连续型重叠式二维条码。PDF417条码符号是由空白区包围的序列行组成。符号的顶部和底部为空白区,左右分别为左空白区和右空白区。上下空白区之间为多行结构。每行数据符号字符数相同,行与行左右对齐直接衔接。其最小行数为3,最大行数为900每行构成如图1所示。

DES加密算法在二维条码数据加密中的应用

二、二维条码的生成与识别流程

随着网络应用的不断扩大,人们对网络安全保护提出了更高要求。二维条码防伪加密技术是在二维条码的基础上运用密码学的原理,与二维条码的编码技术结合起来,从而克服了二维条码所载信息在网上和其他物理空间传输时容易被破译和复制的缺点。由于DES算法比较简单,成本低,整个算法的安全性寓于密钥之中,可适用于二维条码的加密。因此,加密算法选择DES算法,便可达到二维条码加密的效果。

DES加密算法是通过循环和迭代,将简单的运算和变换构成数据流的非线性变换,其算法设计的核心就是让所有的秘密寓于密钥之中,生成和识别条码的过程如图2所示。

DES加密算法在二维条码数据加密中的应用

三、DES加密算法在二维条码加密中的实现

一维条码数据生成程序是利用二维条码编码规则与DES加密算法相结合的具体实现。在二维条码中引入DES加密算法是主要的设计思想,使二维条码具有更高的保密性和防伪性,它扩展了二维条码的应用。

二维条码PDF417数据生成与自动识别系统可以将文本、图形等信息转化成二维条码并可依照所应用实物的大小选择一定的放大系数并进行打印口在条码的生成过程中可以依据实际需要对信息进行加密处理,密钥采用目前最新的并且简单而快速的加密算法。条码的自动识别将采用专用的阅读器对条码进行扫描即可读人条码中的信息解码并显示信息,若信息经过加密则要输入密码方可显示。

1、系统软件包及调用函数

二维条码的生成与自动识别系统是利用底层基础库开发的一个应用程序,可以为具体应用进行二次开发。

本系统软件部分包括:底层基础库;二维条码的生成与自动识别系统口底层基础库包括以下函数:

生成条码函数

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

识别条码函数

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

DES加解密函数

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

设置纠错等级

long SinoPDFMakeErro(long Lev)

2、DES加解密函数的实现

(1)初始置换IP

初始置换在第一轮运算之前执行,将64位明文的位置进行置换,得到一个乱序的64位明文组,而后分成左右两段,每段为32位,以L和R表示。然后进行16轮迭代过程。

在这步的操作中生成子密钥,给出部分程序:

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

{

ULONG32 i = 0 , j= O;

makefirstkey ((ULONG32 *)key) ; /* 产生密钥*/

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)纠错函数的实现

先将错误纠正码字集c[i]及临时变量v1、v2、v3的值初始化为0。生成错误纠正码字集c[i]程序如下: for(i= BarLen一1;i>=0;i- -)//BarLen为码字集的长度。

{

vl=( BarBuf[il+ c[ErrorCode一1])%929;//ErrorCode为错误码字的个数

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];

}

将这些具体的程序实现过程封装在了一个DLL中,在实际应用中可以通过调用DES的加解密函数使二维条码与加密技术相结合设计和开发的二维条码自动识别系统成功的实现了二维条码的生成与自动识别,来节省二次开发的周期。

小知识之PDF417条码

PDF417条码是一种高密度、高信息含量的便携式数据文件,是实现证件及卡片等大容量、高可靠性信息自动存储、携带并可用机器自动识读的理想手段。