胡忠旭,徐小華
(昭通師范高等??茖W校 網(wǎng)絡(luò)信息中心,云南 昭通 657000)
基于數(shù)字串加密算法的研究與實現(xiàn)
胡忠旭,徐小華
(昭通師范高等??茖W校 網(wǎng)絡(luò)信息中心,云南 昭通 657000)
針對數(shù)字串在信息管理中的安全問題,提出了一種實用的數(shù)字串加密算法.將此算法應(yīng)用于磁卡加密,由此證明該算法具有一定的實用價值.
數(shù)字串;加密算法;磁卡
數(shù)字串被廣泛應(yīng)用到管理信息系統(tǒng)中,特別常見的有各種卡的卡號.以磁卡為例,磁卡在使用中一般會印上卡號,如銀行卡卡號、會員卡卡號等.為了便于使用和方便讀卡設(shè)備直接讀出卡號而完成在各種卡管理的系統(tǒng)中的輸入操作,很多磁卡上直接寫入了明文卡號.由此導致磁卡很容易就被復(fù)制、克隆,引出了磁卡的安全問題,所以在制卡時,應(yīng)該考慮如何對卡號(寫入卡中的數(shù)字串)進行加密處理,確保磁卡安全,便于磁卡推廣使用.關(guān)于磁卡安全問題,最大困難是磁卡中的數(shù)據(jù)只能用數(shù)字表示時如何對其進行加密;對此一直缺乏一種行之有效的算法對磁卡數(shù)字串進行加密.于是,本文在數(shù)字串安全問題進行探討基礎(chǔ)上,提出了一套實用的數(shù)字串加密算法,并將其應(yīng)用到磁卡的制卡加密中.
要確保使用數(shù)字串進行信息表示的應(yīng)用的安全,需要對數(shù)字串進行加密處理,鑒于很多系統(tǒng)中只能用數(shù)字進行特定信息的表示,所以加密后的數(shù)據(jù)仍然只能是數(shù)字串,對此,可以采用如下的加密算法.
加密算法及步驟描述:設(shè)有數(shù)字串S由0至9的數(shù)字構(gòu)成,其中的每位數(shù)字用S(i)表示.
1、S(i): 表示需要加密的數(shù)字;
2、設(shè)定加密因子N: 1至9九個數(shù)中的任意數(shù)字;
3、E(i):被加密的數(shù)字.E=(S(i)+N)mod 10;
解密算法描述:
1、解密因子M: M=10-N;M的值可以在運行時生成即可;
2、S(i)=(E(i)+M)mod 10;逐位還原原數(shù)字串.
以上是基本的加密、解密算法,對于加密后的數(shù)字串,可以直接將其寫入磁卡,亦可以在其間插入定長隨機數(shù),或交換其中的某些位置的數(shù)字以加大破解的難度.對于數(shù)字串的加密,可以采用這些算法簡單、但行之有效的方法進行.下面以磁卡數(shù)字串加密做應(yīng)用說明.
一般磁卡讀寫設(shè)備廠家都會提供Delphi[1]的寫卡接口,方便開發(fā)各種信息管理系統(tǒng)中使用該接口進行磁卡數(shù)據(jù)的讀寫.所以這里提供一個Delphi的加密、解密算法供應(yīng)用參考.
通過加密因子(EncryptCode)對數(shù)字串進行加密處理,返回結(jié)果可供程序使用.返回的數(shù)據(jù)格式為字符數(shù)組,即把數(shù)字串當成字符進行處理.
function EncryptStr(InitContent: String;EncryptCode:Integer):String;
var
i, T,StrLength: Integer;
//定義兩個字符串以保存加密過程數(shù)據(jù)和結(jié)果.
StrEncrypted,Tstr: String;
Tchar: string;
//定義字符數(shù)組,方便對數(shù)字串中的每個元素進行處理.
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;
//交換第一位與第三位的位置;可以根據(jù)實際情況自行設(shè)定,亦可采取其他方法對數(shù)字串進行再加工處理.
Tchar:= StrArray[0];
StrArray[0]:= StrArray[2];
StrArray[2]:= Tchar[1];
//處理完畢,數(shù)組轉(zhuǎn)字符串
StrEncrypted:=StrPas(StrArray);
Result:= StrEncrypted;
end;
根據(jù)2.1的加密算法,解密算法是加密過程的逆運算,依據(jù)1中的解密算法描述,可以采用加密因子作為解密函數(shù)的參數(shù)進行解密處理.
function DecryptStr(EncryptedStr: String;EncryptCode: Integer):String;
var
i, T,StrLength: Integer;
//定義兩個字符串以保存解密過程數(shù)據(jù)和結(jié)果.
StrDecrypted,Tstr: String;
Tchar: string;
//定義字符數(shù)組,方便對數(shù)字串中的每個元素進行處理.
StrArray: array [0..40] of Char;
Begin
//根據(jù)加密因子生成解密因子
M:= 10 - EncryptCode;
StrLength:= Length(EncryptedStr);
一方面,培養(yǎng)一支理論基礎(chǔ)扎實、制度研究深入、具備創(chuàng)新能力的研究創(chuàng)新人才隊伍。研究創(chuàng)新團隊應(yīng)當率先深入學習最新的財務(wù)政策、制度,針對政府會計制度改革、管理會計應(yīng)用等相關(guān)文件認真研究,出臺具體的操作規(guī)范、實施細則等,推動新制度下核算工作的順利開展。同時,作為財務(wù)前臺人員,研創(chuàng)隊伍能夠獲取第一手的資金收支數(shù)據(jù),實時監(jiān)控各類資金收支的運行情況,通過對會計基礎(chǔ)信息進行歸集、分類,分析,及時發(fā)現(xiàn)問題、采取深入研究和集體探討方式,找出問題原因并提出解決措施。
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;
//交換第一位與第三位的位置;與加密算法對應(yīng);
Tchar:= StrArray[0];
StrArray[0]:= StrArray[2];
StrArray[2]:= Tchar[1];
//處理完畢,數(shù)組轉(zhuǎn)字符串
StrDecrypted:=StrPas(StrArray);
Result:= StrDecrypted;
end;
如果需要更安全的加密效果,可以采用在加密串中添加隨機干擾數(shù)的方法實現(xiàn).如對8位數(shù)字串,可以在其前、后,或者規(guī)定第幾位之后加入一個或多個干擾串.當然加密之后還要能確保解密算法容易執(zhí)行,所以插入的隨機干擾串最好是定長的.下面提供一個Delphi實現(xiàn)的生成定長隨機數(shù)串的函數(shù)供參考:
//該函數(shù)產(chǎn)生8為數(shù)字的隨機數(shù).
function RandNumber():Longint;
var
RandNum: Longint;
begin
Randomize;
RandNum:= Random(99999999);
//確保取到定長的隨機數(shù)字串
while (RandNum < 1000000) or (RandNum >90000000) do
RandNum:= Random(99999999);
Result:= 9999999+ RandNum;
end;
在不加入隨機數(shù)干擾的情況下,執(zhí)行程序(2.1所提供的加密算法)可以實現(xiàn)對卡號加密如下:
表1 加密情況說明
磁卡的最早應(yīng)用是作為信用卡出現(xiàn)在金融領(lǐng)域.[2]隨著計算機技術(shù),信息管理水平的提高,磁卡的應(yīng)用愈來愈廣泛,銀行卡、會員卡、禮品卡等無處不有其身影.
圖1 磁卡的物理結(jié)構(gòu)
磁卡將信息保存到磁道(Track1,Track2,Track3)上;允許使用的數(shù)字和字符,以下是3個磁道的不同特性說明.
◆Track1(IATA):記錄密度為210BPI;可以記錄0~9 數(shù)字及A~Z 字母等;總共可以記錄多達79個數(shù)字或字符(包含起始結(jié)束符和校驗符);由于Track1 上的信息不僅可以用數(shù)字0~9 來表示,還能用字母A~Z 來表示信息,因此Track1 上信息一般記錄了磁卡的使用類型、范圍等一些“標記”性、“說明”性的信息.例如銀行卡中,Track1 記錄了用戶的姓名,卡的有效使用期限以及其他的一些“標記”信息.
◆Track2(ABA):記錄密度為75BPI;可以記錄0~9 數(shù)字,不能記錄A~Z 字符;總共可以記錄多達40個數(shù)字(包含起始結(jié)束符和校驗符).
◆Track3(THRIFT):記錄密度為210BPI;可以記錄0~9 數(shù)字,不能記錄A~Z 字母;總共可以記錄多達107 個數(shù)字或字符(包含起始結(jié)束符和校驗符).
除銀行及個別有特殊用途的行業(yè)外,一般采用單二軌磁卡(只有Track2可以記錄數(shù)據(jù))作為會員卡、打折卡等.該類磁卡成本低廉,讀寫設(shè)備使用方便.
該程序通過寫卡設(shè)備廠家提供的程序接口進行開發(fā),在寫卡之前可以對寫卡數(shù)據(jù)進行處理,用戶可選是否加密,是否采用隨機數(shù)字串對寫卡數(shù)據(jù)進行干擾.對于解密,只需在運行DecryptStr函數(shù)前將隨機數(shù)字串去除即可.
圖2 寫卡程序
除了將該算法用于磁卡加密外,還可以將其用到任何需要對數(shù)字串進行安全保護的應(yīng)用系統(tǒng)中.
[1] 明日科技,梁水等.Delphi開發(fā)技術(shù)大全[M].人民郵電出版社,2007.
[2] 朱玉存,劉義欣.磁卡及磁卡技術(shù)[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-)男,云南鎮(zhèn)雄人,碩士,講師.研究方向:軟件工程.
[責任編輯 張燦邦]