基于NET平台的安全网上支付系统设计与实现
2011-01-07陈卫民
陈卫民
(湖南城市学院网络信息中心,湖南益阳 413000)
0 引言
随着信息技术的不断发展和互联网运用的日益普及,电子商务正在各行各业得到越来越广泛的应用.受电子商务发展的有力拉动,我国个人网上支付的市场规模发展迅速.《2005年中国网上支付研究报告》数据显示,2001年中国网上支付的市场规模为9亿元,2004年该规模增长为75亿元,年均复合增长率(CAGR)为102.7%.
然而,作为电子商务最核心、最关键的环节——网上支付却存在不少问题.在中国互联网络信息中心(CNNIC)公布的一份报告中,用户对“目前网上购物最大的问题”的回答结果是:认为网上支付安全得不到保障的占36.5%,认为产品质量、售后服务及厂商信誉得不到保证的占27.6%,而认为付款不方便和送货不及时的分别占17.79%和9.39%,这说明,网上支付的安全性是人们最关心的问题.所以,构建安全的网上支付系统,是促进电子商务健康发展的一个重要课题.
1 网上支付及存在的安全问题
网上支付是指以计算机及网络为手段,将负载有特定信息的电子数据取代传统的支付工具用于资金流转,并具有实时支付效力的支付方式.网上支付作为新的网络交易支付方式,它的应用和发展给传统支付模式带来了很大的冲击和挑战.目前网上支付主要有两种基本模式,一种是银行办理的支付业务,即网上银行;另一种是由第三方支付平台办理的支付业务,如“支付宝”.[1]
对于网上支付,当前的主流方式是通过银行卡(包括信用卡、借记卡和支付卡等)这种支付工具,通过浏览器输入必要的支付认证信息,经发卡行认证授权后扣款完成在线支付.现阶段网上支付的安全问题主要存在以下方面:
①支付密码泄漏.目前记录键盘操作功能的木马比比皆是,通过记录下用户输入的密码口令,将它们发送给木马制作者,木马制作者就可以轻易地冒充持卡人通过互联网进行消费,给持卡人带来损失.
②支付数据被篡改.在缺乏必要的安全防范措施情况下,攻击者可以通过修改互联网传输中的支付数据,譬如,修改付款银行卡号、修改支付金额、修改收款人账号等,达到谋利的目的.
③平台系统安全性.来自互联网的各类攻击、病毒及入侵将对网上在线支付系统的可用性带来巨大威胁和侵害.同时,如何对大量的金融信息资产进行有效的管理,使不同程度的信息资产都能得到不同级别的安全保护,将是金融信息系统安全管理面临的巨大挑战.[2-3]
2 安全网上支付系统的设计与实现
2.1 网上支付系统流程
以中国工商银行为例,其网上支付系统流程如图1所示:
(1)客户在商户网站浏览商品信息,签订订单;商户按照银行提供的接口要求形成提交数据表单;客户确认支付后,提交此表单到银行.
(2)银行接收此笔订单,对订单信息和商户信息进行检查,并根据客户输入的交易卡号和其它相关信息,校验后进行支付处理.
(3)银行将处理结果提交到商户网站,或者直接显示交易结果给客户.
图1 中国工商银行网上支付处理流程
2.2 系统开发平台
目前,WEB开发平台有很多,如:ASP、ASP.NET、JSP、PHP等,这里我们选用ASP.NET.
ASP.NET是2002年由微软公司推出的新一代Web应用程序开发平台,它是一个已编译的、基于.NET的开发环境,提供了生成企业级应用程序所必需的全部服务,可以使用任何与公共语言运行库 (CLR)兼容的语言 (包括Visual Basic.NET、C#和JScript.NET)来创建应用程序.目前最高版本是ASP4.0,开发环境是Visual Studio 2010.
与其它的WEB开发技术相比,ASP.NET提供的WEB页面级状态管理功能、服务器控件触发事件的工作模式、代码和内容分离的编程方式等,在一定程度上改变了以往的WEB应用系统的架构模式.ASP.net的优势在于:执行效率的大幅提高、世界级的工具支持、强大性和适应性、简单性和易学性、高效可管理性、多处理器环境的可靠性、自定义性和可扩展性、安全性、开发的效率比较高.[4]
2.3 安全网上支付系统的实现
2.3.1 安全技术策略
(1)数据加密.数据加密通过一定的加密算法,利用密钥 (Secret keys)来对敏感信息进行加密,然后把加密好的数据和密钥通过安全方式发送给接收者,接收者可利用同样的算法和传递过来的密钥对数据进行解密,从而获取敏感信息并保证网络数据的机密性.
(2)数字签名.数字签名的主要方式是:报文的发送方从报文文本中生成一个散列值 (或报文摘要),发送方用自己的私钥对这个散列值进行加密来形成发送方的数据签名.然后,将这个数据签名作为报文的附件和报文一起发送给报文的接收方.报文的接收方首先从接收到的原始报文中计算出散列值 (或报文摘要),接着再用发送方的公钥来对报文附加的数字签名进行解密.如果两个散列值相同,那么接收方就能确认该数字签名是发送方的.通过数字签名能够实现对原始报文完整性的鉴别和不可抵赖性.
(3)安全协议.比较有代表性的电子支付安全协议有SSL(安全槽层)和SET(安全电子交易规范).其中,SSL协议只有商家对客户的认证,缺少客户对商家的认证,客户资料的安全性容易受到威胁.而SET协议在保留对客户信用卡认证的前提下,又增加了对商家身份的认证,已成为实际上的工业技术标准.[5-7]
2.3.2 具体实现代码
(1)提交银行数据
①原始订单数据
string src=“〈?xml version=‘1.0’encoding=‘G BK’standalone= ‘no’?〉〈B2CReq〉〈interfaceName〉”+interfaceName+ “〈/interfaceName〉〈interfaceVersion〉”+interfaceVersion+ “〈/interfaceVersion〉”;src=src+“〈orderInfo〉〈orderDate〉” +orderDate+ “〈/orderDate〉〈curType〉”+curType+ “〈/curType〉〈merID〉”+merID+“〈/merID〉 〈subOrderInfoList〉 〈subOrderInfo〉〈orderid〉” +orderid+ “〈/orderid〉〈amount〉” +amount+ “〈/amount〉〈installmentTimes〉1〈/installmentTimes〉〈merAcct〉” +merAcct+ “〈/merAcct〉 〈goodsID〉” +goodsID+“〈/goodsID〉 〈goodsName〉”+goodsName+“〈/goodsName〉 〈goodsNum〉” +goodsNum+“〈/goodsNum〉〈carriageAmt〉〈/carriageAmt〉〈/subOrderInfo〉〈/subOrderInfoList〉〈/orderInfo〉”;
src=src+“〈custom〉 〈verifyJoinFlag〉0〈/verifyJoinFlag〉〈Language〉ZH-CN〈/Language〉”+ “〈/custom〉 〈message〉 〈creditType〉2〈/creditType〉〈notifyType〉HS〈/notifyType〉 〈resultType〉1〈/resultType〉 〈merReference〉www.yy.cn〈/merReference〉〈merCustomIp〉 〈/merCustomIp〉 〈goodsType〉1〈/goodsType〉 〈merCustomID〉 〈/merCustomID〉〈merCustomPhone〉〈/merCustomPhone〉〈goodsAddress〉”+userAddress+ “〈/goodsAddress〉〈merOrderRemark〉〈/merOrderRemark〉〈merHint〉〈/merHint〉〈remark1〉〈/remark1〉 〈remark2〉 〈/remark2〉 〈merURL〉http://www.yy.cn/bank.aspx〈/merURL〉〈merVAR〉〈/merVAR〉〈/message〉〈/B2CReq〉”;
②数字签名
ICBCEBANKUTILLib.B2CUtilClass ICBC = new ICBCEBANKUTILLib.B2CUtilClass();
int a=ICBC.init(“E:/ebb2cpublic.crt”, “E:/klg0215cs.crt”,“E:/klg0215cs.key”,“12345678”);
string merSignMsg1=ICBC.signC(src,src.Length);
merSignMsg=merSignMsg1;
merCert=ICBC.getCert(1);
③数据加密
byte[]byte1=encoding.GetBytes(src);
tranData = Convert.ToBase64String (byte1, 0,byte1.Length);
④数据传输
https://b2c.icbc.com.cn/servlet/ICBCINBSEBusinessServlet
(2)银行处理结果
①获取返回数据
merVAR=Request.QueryString[“merVAR”];
notifyData=Request.QueryString[“notifyData”];
signMsg=Request.QueryString[“signMsg”];
②数据解密
byte[]c=Convert.FromBase64String(notifyData);
string str-BaseOut=Encoding.GetEncoding(936).GetString(c);
notifyData=str-BaseOut;
③数据验签
ICBCEBANKUTILLib.B2CUtilClass ICBC = new ICBCEBANKUTILLib.B2CUtilClass();int a=ICBC.init(“E:/ebb2cpublic.crt”, “E:/klg0215cs.crt”, “E:/klg0215cs.key”, “12345678”);int b=ICBC.verifySignC( str-BaseOut, str-BaseOut.Length, signMsg,signMsg.Length);
3 结束语
网上支付是电子商务活动中最核心、最复杂的环节,也是电子商务得以进行的基础条件.本文分析了目前网上支付存在的安全问题,并给出了工商银行网上支付系统的实现方案,希望能有助于网上支付系统的开发,进而促进电子商务的发展.
[1]李春燕.我国电子商务网上支付的探讨 [J].电子商务,2010,(01):50-52.
[2]彭银香,白贞武.电子商务安全问题及措施研究 [J].大众科技,2005,(11):162-163.
[3]李峰.电子商务中的安全技术浅析 [J].电子商务,2001,(2).
[4]NET简介 [EB/OL].http://wenku.baidu.com/view/2aa 595d5b14e852458fb577c.html.
[5]夏露.电子商务在线支付问题研究 [J].学术论坛,2001,(5):55-57.
[6]杨恩宁.第三方电子商务支付平台的构建 [EB/OL].http://imfo. feno. cn/2007/130204/c000094942. shtml.2007-11-26.
[7]徐敏.我国电子商务网上支付的现状分析 [J].潍坊高等职业教育,2009,(3):69-73.