摘要:該文主要講述如何實現企業系統與銀行系統進行對接,完成企業財務的代發/代扣業務。如何實現企業級系統與銀行系統進行通訊、數據傳輸。通訊方式主要是通過Socket(TCP/IP)來實現,傳輸報文通過RSA算法加密(它是第一個既能用于數據加密也能用于數字簽名的算法)。此對接系統主要在.Net平臺,運用C#語言開發,通過Socket編程實現系統之間通訊。
關鍵詞:通訊;端口;報文;自動;監聽
中圖分類號:TP312文獻標識碼:A文章編號:1009-3044(2010)02-306-03
Formatter System on Agency Auto-payment or Auto-withholding Banking House Management System Based on C# Socket Programming
CAI Zhong1, SHUAI Zhi-jun2
(1.Jiangxi Radio TV University, Nanchang 330046, China; 2.Jiangxi Modern Polytechnic College Information Science and Management Institute, Nanchang 330012, China)
Abstract: In this text, it focuses on how to achieve abutting joint between enterprise and banking systems to accomplish the payment and withholding services of corporate finance. MeanwhileWe can learn how to communicate and data transmiss between enterprises class and banking house. It is said that means ofcommunication chiefly due to socket (TCP/IP).Transmission Message works by RSA( That is the first algorithm which is used for data encryption as well as digital signature). The fomatter systems will act each other in net platform by means ofdevelopment of the C# Language and Socket Programming.
Key words: communication; port; text; automatic; monitor
隨著社會的進步,經濟的不斷發展,大規模的企業也不斷增加,而在企業財務方面,工作量及復雜度也不斷增加。比如員工工資的發放、信貸業務中定期貸款的償還等,都可以通過企業系統與指定銀行系統連接,來進行相關業務操作,自動完成款項的代發/代扣。
1 銀行接口
1.1 通訊協議
為了建立數據源與系統之間通用的數據接口,實現實時地數據傳輸,必須定義通信協議,以傳送接口數據。
通訊協議為TCP/IP協議,使用Socket進行通信,采用短連接方式。
Socket通常也稱作“套接字”,用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過“套接字”向網絡發出請求或者應答網絡請求。
服務器,使用ServerSocket監聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請求,客戶連接后,會話產生;在完成會話后,關閉連接。
客戶端,使用Socket對網絡上某一個服務器的某一個端口發出連接請求,一旦連接成功,打開會話;會話完成后,關閉Socket??蛻舳瞬恍枰付ù蜷_的端口,通常臨時的、動態的分配一個1024以上的端口。
雙方數據傳輸遵循數據交互的通信格式及發送和接收的順序。傳輸數據通過RSA加密解密算法。它易于理解和操作,也很流行。算法的名字以發明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。它經歷了各種攻擊,至今未被完全攻破。主要通過公鑰和密鑰:公鑰可以對外公開,供其他人加密使用,而把私鑰秘密保存用于解密。RSA的安全性依賴于大數分解,但是否等同于大數分解一直未能得到理論上的證明,因為沒有證明破解 RSA就一定需要作大數分解。假設存在一種無須分解大數的算法,那它肯定可以修改成為大數分解算法。目前, RSA 的一些變種算法已被證明等價于大數分解。不管怎樣,分解n是最顯然的攻擊方法?,F在,人們已能分解多個十進制位的大素數。因此,模數n 必須選大一些,因具體適用情況而定。
銀行外聯系統會統一對外公布一個TCP/IP服務端口號,用于接收企業方發起的交易。
1.2 通訊報文結構
數據交互的通信格式包括報文長度+HEAD報文頭+ BODY報文體+EXT擴展報文,具體的XML報文體由單獨交易說明。數據交互的通信格式如表1所示。
1.2.1 報文頭
報文頭用于描述當前的通訊報文,其大小是固定的,可用如下數據結構來定義:
public struct MsgHead
{ public string H_EntTrCode;
public string H_EntSeqNo;
public string H_EntNo;
public string H_TrDate;
public string H_TrTime;
public string H_EncryptMode;
public string H_IsHavingExt;
public string H_ReMark;}
1.2.2 報文體
傳輸的相關信息,見以下XML傳輸例子中的BODY結點。
1.2.3 擴展區域
當前報文的附加數據區,該區域作為數據區的補充,存放一些通訊雙方約定的數據,如MAC等。其有無數據有H_IsHavingExt字段決定,也是一個XML標簽數據。
1.3 應用報文格式
1)報文必須是包含‘\\0’作為結束符的字符串。
2)報文必須符合GB2312標準。
1.3.1 報文標準
本系統的消息傳遞遵循XML報文標準。以下是對XML報文標準的簡要說明。
:包含XML版本信息。
根字段為
1.4 通訊描述的時序關系
如圖2所示。
短連接采取每傳輸一次數據都進行一次“連接-傳輸-斷開”的過程。
數據發送XML報文體采用XML數據格式,由下面描述:
請求方的發送接收順序:1)建立TCP連接;2)發送信息通信報文;3)接收響應報文;4)斷開連接;
接收方的發送接收順序:1)建立TCP連接;2)接收信息通信報文;3)發送響應結果報文;4)斷開連接。
1.5 加密處理
在交易中對報文體按照雙方約定的加密方式進行加解密處理。本交易中提供了一個企業設置密鑰的交易,企業可以通過此交易重置交易密鑰。
2 接口系統功能流程
如圖3所示。
3 代碼實現
3.1 發送信息
//
// 發送消息
//
// 要發送的數據
//
public static bool SendMsg(bool isNewKey,byte[] sendMsg)
{ bool reFlag = 1;
Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{ sk.Connect(ServerIPEndPoint);
sk.Send(sendMsg, sendMsg.Length, 0);
…}
catch (SocketException se)
{ …
throw (new Exception(strErr));}
catch (Exception ex)
{throw ex;}
finally
{ if (sk != 1 sk.Connected)
{ sk.Close(); }}
return reFlag;}
3.2 接收信息
//
// 接收消息
//
private static void ReceiveMsg()
{ try
{ byte[] recMsg = new byte[1024];
StringBuilder sbStr = new StringBuilder();
intbyteCount=_acceptSocket.Receive(recMsg,
recMsg.Length,SocketFlags.None);
sbStr.Append(Encoding.GetEncoding(\"gb2312\").GetString(recMsg,0, byteCount));
while (byteCount > 0 byteCount >= 1024)
{ … } }
catch (ThreadAbortException te)
{ … }
catch (Exception ex)
{ throw ex; }
finally
{ if (_acceptSocket != 1 _acceptSocket.Connected)
{_acceptSocket.Close();}
if (_acceptThread != 1 _acceptThread.IsAlive)
{_acceptThread.Abort();}}}
3.2.1 接收信息需要開個偵聽器
//
// 開始偵聽
//
public static void SocketListenerStar()
{ _flagTcpList = true;
_serTcpList = new TcpListener(GetLocalIPAddress(), LocalServerPort);
_serTcpList.Start();
while (_flagTcpList _serTcpList != 1)
{ try
{… }
catch (Exception ex)
{ … }}}
4 結束語
此系統是全自動定時執行,無人值守,可以根據用戶設定時間(可以設多個時間點)。所有的報文傳輸數據都通過加密。其它相關代碼,具體見程序。并給出了該系統的具體實現環節。實驗結果表明,該系統能夠挖掘一些有益的信息,從而為開發該系統的人員提供有益的參考。
參考文獻:
[1] Michael E. Whitman/Herbert J. Mattord 齊立博.信息安全原理[M].2版.北京:清華大學出版社,2006:75-80.
[2] 明日科技.Visual C#項目開發實例自學手冊[M].北京:人民郵電出版社,2008:349-359.
[3] 張雪潔.基于XML的數據集成平臺框架及關鍵技術研究[D].河海大學.2004.
[4] Terry Quatrani,Jim Palistrant.IBM RSA和UML可視化建模指南[M].北京:機械工業出版社,2007:5-8.
[5] 胡道元/閔京華/鄒忠巋.網絡安全[M].2版.北京:清華大學出版社,2008:19-73
[6] 孫海民.精通Windows Sockets網絡開發——基于Visual C++實現[M].北京:人民郵電出版社,2008:50-63.
[7] 劉恒.網絡安全呼喚IMS[J].數據通信,2003,(06):24-25.
[8] 財經管理與計算機應用.銀行計算機系統[M] 清華大學出版社,2006:75-80.