银行将客户支付信息实时通知给商户时,使用的数字签名算法是MD5withRSA算法。
商户验证签名的公钥在商户在网银系统开户,获取数字证书后,登录到网银系统中,
通过下载公钥交易获取。(下载后需妥善管理并及时更新商户公钥,以防公私钥不
匹配造成验签不通过)。
商户获取的公钥用X.509格式表示,并且将其按照每4位(bit)转换为一个16进制数
的方式表示,产生16进制的字符串。
网上银行使用标准MD5withRSA算法对给商户的响应进行签名,产生1024位(bit)
的签名结果,并且将其按照每4位(bit)转换为一个16进制数的方式表示,形成
16进制的字符串,长度为256。
下面是对签名结果的表示方式的描述:
1、 对1024位的交易结果按4位为一个单位进行划分,共获得256段
2、 将每段看成一个16进制数,如0011为0X3,1101为0Xd。
3、 将这个数映射到ASCII码表,形成相应的字符,如0X2为“2”,0Xd为“d”。
4、 将这些字符连成一个字符串,长度为256。
例如:
待签名的字符串为:
POSID=000000000&BRANCHID=110000000&ORDERID=19991101234&
PAYMENT=500.00&CURCODE=01&REMARK1=19991101&
REMARK2=merchantname&SUCCESS=Y
签名结果为:
4b3ef029516193b7d969ac1840083635a3e0901b8cd526caa44c1a072f496d7f
0d4bca3942c0d9030bede37c7809b835cec787eb39e18b7596a724fba9805b24
714dfbb0f4a3fb430b32e075254a114d4c38a0ac52ef46a0ad33dec3fbfc1541
7402a1399e65e46996c0cf49fc7ffca9222f8cd693c8376b6f928828967bec42
当商户收到银行传来的CGI串后,从中获取签名(格式如上)和需签名的原文。
商户端程序(商户自行开发MD5withRSA签名校验程序)将签名和商户端的公钥转换
成二进制格式,与签名的原文一起对签名的正确性进行校验,校验步骤如下:
1) 使用公钥进行签名的逆运算
2) 使用标准MD5算法运算原文
3) 比较1)、2)结果。
9 个解决方案
#1
应该会提供一个COM的,我做银联的usb key签名,就有他们提供的dll,选择证书、签名、验证签名、封装数字信封解封等功能都有。不可能让你写RSA加解密算法的。
#2
呵呵,是有提供一个COM,但我想学习一下RSA公钥验证签名的具体代码。
#3
up
#4
帮顶
#5
不太明白你的意思 RSA验证签名的具体代码 是什么意思 一般的操作就是就是生明义个RSA对象导入公钥然后调用验证的方法就可里啦
#6
想学习RSA公钥验证签名的具体代码?没那必要。如果有那精神,去研究下RSA加解密吧,了解了加解密的过程,那代码写起来就很简单了,就是数学运算。
#7
声明一个RSA对象导入公钥?能不能写下代码?
建行给的公钥是一串和签名结果类似的16进制数的字符串。我不知要如何导入RSA对象。请教先!
建行给的公钥是一串和签名结果类似的16进制数的字符串。我不知要如何导入RSA对象。请教先!
#8
应该有相应的程序
#9
请问下,楼主那个建行公钥问题解决了吗?
#1
应该会提供一个COM的,我做银联的usb key签名,就有他们提供的dll,选择证书、签名、验证签名、封装数字信封解封等功能都有。不可能让你写RSA加解密算法的。
#2
呵呵,是有提供一个COM,但我想学习一下RSA公钥验证签名的具体代码。
#3
up
#4
帮顶
#5
不太明白你的意思 RSA验证签名的具体代码 是什么意思 一般的操作就是就是生明义个RSA对象导入公钥然后调用验证的方法就可里啦
#6
想学习RSA公钥验证签名的具体代码?没那必要。如果有那精神,去研究下RSA加解密吧,了解了加解密的过程,那代码写起来就很简单了,就是数学运算。
#7
声明一个RSA对象导入公钥?能不能写下代码?
建行给的公钥是一串和签名结果类似的16进制数的字符串。我不知要如何导入RSA对象。请教先!
建行给的公钥是一串和签名结果类似的16进制数的字符串。我不知要如何导入RSA对象。请教先!
#8
应该有相应的程序
#9
请问下,楼主那个建行公钥问题解决了吗?