胡忠旭,徐小華
(昭通師范高等專科學校 網絡信息中心,云南 昭通 657000)
基于數字串加密算法的研究與實現
胡忠旭,徐小華
(昭通師范高等專科學校 網絡信息中心,云南 昭通 657000)
針對數字串在信息管理中的安全問題,提出了一種實用的數字串加密算法.將此算法應用于磁卡加密,由此證明該算法具有一定的實用價值.
數字串;加密算法;磁卡
數字串被廣泛應用到管理信息系統中,特別常見的有各種卡的卡號.以磁卡為例,磁卡在使用中一般會印上卡號,如銀行卡卡號、會員卡卡號等.為了便于使用和方便讀卡設備直接讀出卡號而完成在各種卡管理的系統中的輸入操作,很多磁卡上直接寫入了明文卡號.由此導致磁卡很容易就被復制、克隆,引出了磁卡的安全問題,所以在制卡時,應該考慮如何對卡號(寫入卡中的數字串)進行加密處理,確保磁卡安全,便于磁卡推廣使用.關于磁卡安全問題,最大困難是磁卡中的數據只能用數字表示時如何對其進行加密;對此一直缺乏一種行之有效的算法對磁卡數字串進行加密.于是,本文在數字串安全問題進行探討基礎上,提出了一套實用的數字串加密算法,并將其應用到磁卡的制卡加密中.
要確保使用數字串進行信息表示的應用的安全,需要對數字串進行加密處理,鑒于很多系統中只能用數字進行特定信息的表示,所以加密后的數據仍然只能是數字串,對此,可以采用如下的加密算法.
加密算法及步驟描述:設有數字串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;逐位還原原數字串.
以上是基本的加密、解密算法,對于加密后的數字串,可以直接將其寫入磁卡,亦可以在其間插入定長隨機數,或交換其中的某些位置的數字以加大破解的難度.對于數字串的加密,可以采用這些算法簡單、但行之有效的方法進行.下面以磁卡數字串加密做應用說明.
一般磁卡讀寫設備廠家都會提供Delphi[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.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;
如果需要更安全的加密效果,可以采用在加密串中添加隨機干擾數的方法實現.如對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.1所提供的加密算法)可以實現對卡號加密如下:

表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可以記錄數據)作為會員卡、打折卡等.該類磁卡成本低廉,讀寫設備使用方便.
該程序通過寫卡設備廠家提供的程序接口進行開發,在寫卡之前可以對寫卡數據進行處理,用戶可選是否加密,是否采用隨機數字串對寫卡數據進行干擾.對于解密,只需在運行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-)男,云南鎮雄人,碩士,講師.研究方向:軟件工程.
[責任編輯 張燦邦]