APP下载

基于数字串加密算法的研究与实现

2011-12-27胡忠旭徐小华

红河学院学报 2011年4期
关键词:卡号加密算法字符

胡忠旭,徐小华

(昭通师范高等专科学校 网络信息中心,云南 昭通 657000)

基于数字串加密算法的研究与实现

胡忠旭,徐小华

(昭通师范高等专科学校 网络信息中心,云南 昭通 657000)

针对数字串在信息管理中的安全问题,提出了一种实用的数字串加密算法.将此算法应用于磁卡加密,由此证明该算法具有一定的实用价值.

数字串;加密算法;磁卡

数字串被广泛应用到管理信息系统中,特别常见的有各种卡的卡号.以磁卡为例,磁卡在使用中一般会印上卡号,如银行卡卡号、会员卡卡号等.为了便于使用和方便读卡设备直接读出卡号而完成在各种卡管理的系统中的输入操作,很多磁卡上直接写入了明文卡号.由此导致磁卡很容易就被复制、克隆,引出了磁卡的安全问题,所以在制卡时,应该考虑如何对卡号(写入卡中的数字串)进行加密处理,确保磁卡安全,便于磁卡推广使用.关于磁卡安全问题,最大困难是磁卡中的数据只能用数字表示时如何对其进行加密;对此一直缺乏一种行之有效的算法对磁卡数字串进行加密.于是,本文在数字串安全问题进行探讨基础上,提出了一套实用的数字串加密算法,并将其应用到磁卡的制卡加密中.

1 数字串加密、解密算法

要确保使用数字串进行信息表示的应用的安全,需要对数字串进行加密处理,鉴于很多系统中只能用数字进行特定信息的表示,所以加密后的数据仍然只能是数字串,对此,可以采用如下的加密算法.

加密算法及步骤描述:设有数字串S由0至9的数字构成,其中的每位数字用S(i)表示.

1、S(i): 表示需要加密的数字;

2、设定加密因子N: 1至9九个数中的任意数字;

3、E(i):被加密的数字.E=(S(i)+N)mod 10;

解密算法描述:

1、解密因子M: M=10-N;M的值可以在运行时生成即可;

2、S(i)=(E(i)+M)mod 10;逐位还原原数字串.

以上是基本的加密、解密算法,对于加密后的数字串,可以直接将其写入磁卡,亦可以在其间插入定长随机数,或交换其中的某些位置的数字以加大破解的难度.对于数字串的加密,可以采用这些算法简单、但行之有效的方法进行.下面以磁卡数字串加密做应用说明.

2 加密、解密算法的实现

一般磁卡读写设备厂家都会提供Delphi[1]的写卡接口,方便开发各种信息管理系统中使用该接口进行磁卡数据的读写.所以这里提供一个Delphi的加密、解密算法供应用参考.

2.1 用Delphi实现的加密算法

通过加密因子(EncryptCode)对数字串进行加密处理,返回结果可供程序使用.返回的数据格式为字符数组,即把数字串当成字符进行处理.

function EncryptStr(InitContent: String;EncryptCode:Integer):String;

var

i, T,StrLength: Integer;

//定义两个字符串以保存加密过程数据和结果.

StrEncrypted,Tstr: String;

Tchar: string;

//定义字符数组,方便对数字串中的每个元素进行处理.

StrArray: array [0..40] of Char; begin

StrLength:= Length(InitContent);

StrPCopy(StrArray,InitContent);

for i:=0 to StrLength-1 do

begin

T:= StrToInt(StrArray[i])+EncryptCode;

T:= T mod 10;

Tstr := IntToStr(T);

StrArray[i]:= Tstr[1];

end;

//交换第一位与第三位的位置;可以根据实际情况自行设定,亦可采取其他方法对数字串进行再加工处理.

Tchar:= StrArray[0];

StrArray[0]:= StrArray[2];

StrArray[2]:= Tchar[1];

//处理完毕,数组转字符串

StrEncrypted:=StrPas(StrArray);

Result:= StrEncrypted;

end;

2.2 解密算法

根据2.1的加密算法,解密算法是加密过程的逆运算,依据1中的解密算法描述,可以采用加密因子作为解密函数的参数进行解密处理.

function DecryptStr(EncryptedStr: String;EncryptCode: Integer):String;

var

i, T,StrLength: Integer;

//定义两个字符串以保存解密过程数据和结果.

StrDecrypted,Tstr: String;

Tchar: string;

//定义字符数组,方便对数字串中的每个元素进行处理.

StrArray: array [0..40] of Char;

Begin

//根据加密因子生成解密因子

M:= 10 - EncryptCode;

StrLength:= Length(EncryptedStr);

一方面,培养一支理论基础扎实、制度研究深入、具备创新能力的研究创新人才队伍。研究创新团队应当率先深入学习最新的财务政策、制度,针对政府会计制度改革、管理会计应用等相关文件认真研究,出台具体的操作规范、实施细则等,推动新制度下核算工作的顺利开展。同时,作为财务前台人员,研创队伍能够获取第一手的资金收支数据,实时监控各类资金收支的运行情况,通过对会计基础信息进行归集、分类,分析,及时发现问题、采取深入研究和集体探讨方式,找出问题原因并提出解决措施。

StrPCopy(StrArray,EncryptedStr);

for i:=0 to StrLength-1 do

begin

T:= StrToInt(StrArray[i])+M;

T:= T mod 10;

Tstr := IntToStr(T);

StrArray[i]:= Tstr[1];

end;

//交换第一位与第三位的位置;与加密算法对应;

Tchar:= StrArray[0];

StrArray[0]:= StrArray[2];

StrArray[2]:= Tchar[1];

//处理完毕,数组转字符串

StrDecrypted:=StrPas(StrArray);

Result:= StrDecrypted;

end;

2.3 生成定长的随机数,以8位数为例

如果需要更安全的加密效果,可以采用在加密串中添加随机干扰数的方法实现.如对8位数字串,可以在其前、后,或者规定第几位之后加入一个或多个干扰串.当然加密之后还要能确保解密算法容易执行,所以插入的随机干扰串最好是定长的.下面提供一个Delphi实现的生成定长随机数串的函数供参考:

//该函数产生8为数字的随机数.

function RandNumber():Longint;

var

RandNum: Longint;

begin

Randomize;

RandNum:= Random(99999999);

//确保取到定长的随机数字串

while (RandNum < 1000000) or (RandNum >90000000) do

RandNum:= Random(99999999);

Result:= 9999999+ RandNum;

end;

2.4 加密算执行情况

在不加入随机数干扰的情况下,执行程序(2.1所提供的加密算法)可以实现对卡号加密如下:

表1 加密情况说明

3 数字串加密算法的应用——磁卡加密

3.1 磁卡

磁卡的最早应用是作为信用卡出现在金融领域.[2]随着计算机技术,信息管理水平的提高,磁卡的应用愈来愈广泛,银行卡、会员卡、礼品卡等无处不有其身影.

图1 磁卡的物理结构

磁卡将信息保存到磁道(Track1,Track2,Track3)上;允许使用的数字和字符,以下是3个磁道的不同特性说明.

◆Track1(IATA):记录密度为210BPI;可以记录0~9 数字及A~Z 字母等;总共可以记录多达79个数字或字符(包含起始结束符和校验符);由于Track1 上的信息不仅可以用数字0~9 来表示,还能用字母A~Z 来表示信息,因此Track1 上信息一般记录了磁卡的使用类型、范围等一些“标记”性、“说明”性的信息.例如银行卡中,Track1 记录了用户的姓名,卡的有效使用期限以及其他的一些“标记”信息.

◆Track2(ABA):记录密度为75BPI;可以记录0~9 数字,不能记录A~Z 字符;总共可以记录多达40个数字(包含起始结束符和校验符).

◆Track3(THRIFT):记录密度为210BPI;可以记录0~9 数字,不能记录A~Z 字母;总共可以记录多达107 个数字或字符(包含起始结束符和校验符).

除银行及个别有特殊用途的行业外,一般采用单二轨磁卡(只有Track2可以记录数据)作为会员卡、打折卡等.该类磁卡成本低廉,读写设备使用方便.

3.2 用Delphi实现的磁卡数字串加密写卡程序

该程序通过写卡设备厂家提供的程序接口进行开发,在写卡之前可以对写卡数据进行处理,用户可选是否加密,是否采用随机数字串对写卡数据进行干扰.对于解密,只需在运行DecryptStr函数前将随机数字串去除即可.

图2 写卡程序

结束语

除了将该算法用于磁卡加密外,还可以将其用到任何需要对数字串进行安全保护的应用系统中.

[1] 明日科技,梁水等.Delphi开发技术大全[M].人民邮电出版社,2007.

[2] 朱玉存,刘义欣.磁卡及磁卡技术[J].科技广角,1995,(6).

Based on Numerical Strings The Encrgption Algorithm Research and Realice

HU Zhong-xu ,XU Xiao-hua
(Zhaotong Teachers’ College,Network&Information Center,ZhaoTong 657000,China)

According to the numerical strings, security issues in the information management, put forward to a practical numerical strings, encryption algorithm.Apply this algorithm to magcard encryption, which proved that the algorithm had some practical value.

numerical strings; encryption algorithm; magcard

TP3

A

1008-9128(2011)04-0034-03

2011-06-20

胡忠旭(1983-)男,云南镇雄人,硕士,讲师.研究方向:软件工程.

[责任编辑 张灿邦]

猜你喜欢

卡号加密算法字符
河南省长葛市彩红蜂衣蜂帽加工厂
河南省长葛市彩红蜂衣蜂帽加工厂
字符代表几
一种USB接口字符液晶控制器设计
HBM电子称与西门子S7-200系列PLC自由口通讯
消失的殖民村庄和神秘字符
好老板
基于小波变换和混沌映射的图像加密算法
Hill加密算法的改进
对称加密算法RC5的架构设计与电路实现