网上交易加密方式

来源:互联网 发布:天天炫舞代购充值端口 编辑:程序博客网 时间:2024/06/09 18:11

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

 

一、最常用最简单的加密方式是支付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

 

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

 

待续....