最近碰到建行的数字签名验证的问题,不知哪位做过RSA公钥验证签名的呀?

时间:2022-12-06 20:17:02
数字签名算法说明
银行将客户支付信息实时通知给商户时,使用的数字签名算法是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


引用 2 楼 cnxiaoqiao 的回复:
呵呵,是有提供一个COM,但我想学习一下RSA公钥验证签名的具体代码。


不太明白你的意思  RSA验证签名的具体代码 是什么意思   一般的操作就是就是生明义个RSA对象导入公钥然后调用验证的方法就可里啦

#6


想学习RSA公钥验证签名的具体代码?没那必要。如果有那精神,去研究下RSA加解密吧,了解了加解密的过程,那代码写起来就很简单了,就是数学运算。

#7


声明一个RSA对象导入公钥?能不能写下代码?
建行给的公钥是一串和签名结果类似的16进制数的字符串。我不知要如何导入RSA对象。请教先!

#8


应该有相应的程序

#9


请问下,楼主那个建行公钥问题解决了吗?

#1


应该会提供一个COM的,我做银联的usb key签名,就有他们提供的dll,选择证书、签名、验证签名、封装数字信封解封等功能都有。不可能让你写RSA加解密算法的。

#2


呵呵,是有提供一个COM,但我想学习一下RSA公钥验证签名的具体代码。

#3


up

#4


帮顶

#5


引用 2 楼 cnxiaoqiao 的回复:
呵呵,是有提供一个COM,但我想学习一下RSA公钥验证签名的具体代码。


不太明白你的意思  RSA验证签名的具体代码 是什么意思   一般的操作就是就是生明义个RSA对象导入公钥然后调用验证的方法就可里啦

#6


想学习RSA公钥验证签名的具体代码?没那必要。如果有那精神,去研究下RSA加解密吧,了解了加解密的过程,那代码写起来就很简单了,就是数学运算。

#7


声明一个RSA对象导入公钥?能不能写下代码?
建行给的公钥是一串和签名结果类似的16进制数的字符串。我不知要如何导入RSA对象。请教先!

#8


应该有相应的程序

#9


请问下,楼主那个建行公钥问题解决了吗?