使用ruby做支付宝的MD5、RSA签名和验签
md5签名验签
支付宝的md5签名比较简单,就是拿到支付宝生成的key,加在原始字符串后面,然后一起做个md5运算就生成了需要的sign了,然后支付宝接收到请求,按照文档中同样的规则组装成一个字符串,末尾加上密钥作md5运算,与提交的sign一致,则验签通过。
示例ruby代码:1
2
3
4
5
6
7
8
9
10
11
# md5签名
def md5_sign(data,key)
return OpenSSL::Digest::MD5.hexdigest(data+key)
end
# md5验签
def md5_verify(data,sign,key)
return true if sign.eql?OpenSSL::Digest::MD5.hexdigest(data+key)
return false
end
RSA签名验签
rsa签名要复杂一些,属于非对称的摘要,有公钥和私钥之分。
rsa规则
私钥签名,公钥验签,私钥自己保存,公钥给对方保存。
公钥和私钥是一对,支付宝生成一对,商户生成一对。然后交换密钥(商户把支付宝公钥配置进商户系统,商户将商户公钥上传到支付宝网站)
支付宝使用的1024位的公私钥,具体私钥生成,可以参考OpenSSL的生成命令。
ruby使用的是原始私钥,java使用的是pkcs8格式的私钥
1 | # rsa签名,文本内容和私钥路径 |