支付接口对接
支付接口对接
一、 对接接口一览
1、通过看微信和支付宝接口对接,发现他们的共性:
① 商户号、账号
② 订单信息
③ 金额
④ 回调地址
⑤ 签名类型和签名(比较重要)
发请求时生成签名,接收请求时验证签名。
2、支付接口的安全相关技术
① Base64
加密就是二进制,实际使用中是一个字符串,如何把二进制变为字符串。一种是16进制的hex,另外一种就是base64,是一种编码,是将二进制转换为可打印字符。
Hex 是A-F
Base64: A –Z a-z 0-9+=
注意它的编码和解码的类型一致
小技巧:如果看见一串字符串有+=,为什么会出现=?是因为base64位是三位一组,不可能正好是三位,用=补位。
Base 64 和hex比较。
Hex 两个字节为一组,base64是三个字节一组,base64压缩率会更高。
3、MD5
消息摘要
SHA和MD5类似
也是HASh的一种算法
作用是:验证原消息是否有改变。
优点:简单;摘要长度固定;碰撞率低;单向;不同的输入不同的输出,且差别很大;相同的输入相同的输出。
缺点:攻击者可猜测使用的摘要算法进行撞库攻击。
所以业界一般都需要加盐(salt)
MD5和SHA 都属于消息摘要,在java中的写法:
MD5 32位
SHA
SHA-256最长
4、RSA
真正的加密算法,非对称的加密算法。
是keypair
一部分是private key 一部分是public key 一部分是私钥一部分是公钥。
第一步是生成private key 和public key
用命令生成一个和private 配对的公钥:
Openssl 命令 genrsa –out private 1024 生成private key private 名字,
Rsa –in private –pubout –out public
Pkcs1 和pkcs8的区别?
Pkcs1 Begin RSA private key
Pkcs8 不光RSA还有其它一些非对称加密也可以传,多了一些源信息。
再用ssl命令生成pks8
Pkcs8 –topk8 in private –nocrypt –out private pkcs8
第二部 key的公共方法
Cipher 对象用于加密
5、数字签名
数字签名=消息摘要(MD5或SHA)+非对称加密(RSA)
能够验证身份
用自己的私钥加密,别人用自己的公钥解密。
数字签名无法抵赖。因为是用自己的私钥加密。
RSA1(SHA1WithRSA) RSA2(SHA256WITHRSA)
RSA encrypt/decrypt RSA sign/verfy sign
非对称性加密运算速度很慢,我们是对消息摘要加密
数字签名的步骤
1)Data MD5 后+ private key 进行RSA 生成sign 签名
2) sign+Date(参数明文) 打包请求
3) 收的人,date MD5 形成digist ; sign 用public解密生成digist2
判断digist = digist2?
①能解密;② 传的参数没有被改变
6、https
设计了两层东西,握手的时候就是非对称加密,一旦他们握手好了就商量一个密码,使用对称加密,因为对称加密速度比较快。
交换公钥时,需要数字证书+公钥 一起给,数字证书就是一个签名验证。https 握手后也是加密的。