您的位置:首页 > 其它

网上交易加密方式

2009-08-08 00:05 295 查看
随着网上电子商务发展,网上支付日益普及。各机构互相之间的接口也日益增多,如电子商务公司与银行之间的支付接口;电子商务公司与下级代理商之间的支付接口等等。下面我介绍几种常用的支付接口的加密方式。

一、最常用最简单的加密方式是支付url是经过md5(或Sha1)签名的,支付请求。

例如:调用某接口需要以下参数

id=123456

partner=2088006300000000

account=test@msn.com

电子商务公司与下级代理商之间约定一个key(安全校验码)=1234567890123

那么待签名数据就是:

id=123456&partner=2088006300000000&account=test@msn.com&key=1234567890123

将待签名数据进行md5(或Sha1)加密,假设加密后的数据是:

8d5835495b1d732a5216794ca52f59216daed8e41b34

那么支付的url就是:

http://url/xxx.aspx?id=123456&partner=2088006300000000&account=test@msn.com&sign=8d5835495b1d732a5216794ca52f59216daed8e41b34

下级代理商通过此url访问电子商务公司的支付接口,电子商务公司在 http://url/xxx.aspx文件检查数据的合法性:
将传递过来的

http://url/xxx.aspx?id=123456&partner=2088006300000000&account=test@msn.com参数加上约定安全校验码(key=1234567890123)进行md5(或Sha1)加密后生成一个加密串,再跟传递过来的sign参数对比,如果正确的话就接受请求,否则就视为非法请求。

由于每次请求都会产生不同的加密串,只要约定的key(安全校验码)不泄露,别人就很难破解其加密串。现在很多公司的都是采用这种方式加密的,如:阿里巴巴的支付宝、腾讯的财付通、快钱,还有很多游戏公司销售直通车等等。

二、使用 SHA1RSA算法加密,原理与第一相同只是加密方式不同。

Sha1Rsa 有一对公钥和私钥,私钥代理商自己保存,公钥上传到电子商务公司。下面是一段Sha1Rsa 加密的 vb.net 代码:

Imports System.Data.SqlClient
Imports System.Data
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography

ThisPrivateKey = "<RSAKeyValue><Modulus>zDDYKHQ2sxKDfsfdfdsfrefdsfsdg1mr3Ql4EOd113pX1+e18NNrKtm1kdNQRUdmIHZjewFe2Yyz4QBuKbQJN0nBdb3mf8w8jbZEVChaQiuBRQfb9I9GK0Y4K/wWg35Pm2Bbqp3GxNEsy8tyrANWwop3Om+hb5k=</Modulus><Exponent>AQAB</Exponent><P>++EGyw88d1Q2U+DMfEKVvio+l22tAMptfhraODpV74xOjGM5C6jD9ObusTMqk+zjuy44mvopsfw==</P><Q>z4gUcuwUte6aZbXtcNhieCN1wG42x4xJNHeiwLgAX1zJ+JhvwTcj54Y/i9OquyQw89g+yGZ5YKvy7D5YpHX35w==</Q><DP>hHG+HbZkSCb67j4tqEVm8fjKstuT9e97jM3oE6tghvZvGUD3NMJ6vhR6NiDESNG5dvm9Px/rgsJcJqMX0md9Rw==</DP><DQ>zYVP6veNExb2ZF+kgypnad6EEEuViEyPepw3227dP5NemQgtNEVtEy3J5Kl73NTcfb/bfQ6uiWP/sKGVm1kQZQ==</DQ><InverseQ>sXxj3ZgyhraODpV74xOjGM5C6jD9Obc9zjhs6cPRFtV2whM1DZjOhraODpV74xOjGM5C6jD9ObVGj1jad5e1pHXQ==</InverseQ><D>t45JIsSlz4CrgIPcBBgwte9tUTdV6HazBoFzcUd/pZBcwQ0cFAYelx/yC7LOiblko1amtHqDFSDTEFDsfsdfmfXN/IqqHd9PrBhkIqHKsTRKe31hCL7XJphLEKHjhwo0GNSGDqWokmxhmUmzz73P1jj7mRpSiLNOk=</D></RSAKeyValue>"

‘将 String 转换为 Byte()

Function Convert2ByteArray(ByVal strInput As String, ByRef flag As Boolean) As Byte()
Dim intCounter As Integer
Dim arrChar As Char()
arrChar = strInput.ToCharArray()
Dim arrByte(arrChar.Length - 1) As Byte
Try
For intCounter = 0 To arrByte.Length - 1
arrByte(intCounter) = Convert.ToByte(arrChar(intCounter))
Next
flag = True
Catch ex As Exception
flag = False
End Try
Return arrByte
End Function

Dim signature As String = “id=123456&partner=2088006300000000&account=test@msn.com”

Dim arrInput As Byte()
Dim flag_char As Boolean = True
arrInput = Convert2ByteArray(signature, flag_char)

If flag_char Then
Dim objRSA As RSACryptoServiceProvider
Dim strPrivateKey As String
Dim ByteConverter As New UnicodeEncoding()
objRSA = New RSACryptoServiceProvider
strPrivateKey = ThisPrivateKey
objRSA.FromXmlString(strPrivateKey)
signature = BitConverter.ToString(objRSA.SignData(arrInput, "SHA1"))
signature = System.Web.HttpUtility.UrlEncode(Replace(signature, "-", "").ToLower)
post = “id=123456&partner=2088006300000000&account=test@msn.com” & "&signature=" & signature
url = “http://url/xxx.aspx?” & post
…..
‘将加密后的数据发送到服务器端
End If

三、数字证书,一般银行给电子商务公司提供的都是数字证书型式的。

待续....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: