android 支付宝
16lz
2021-01-26
公司项目接入支付宝历来就有但是一直客户端签名现如今他们要使用服务器签名。其它他们遇到了一些问题,我也了解了一些。现在记录一下,首先:
支付宝流程如下
1. 自己会生成一个RSA密钥(公钥,私钥)私钥用于订单签名(开发者使用客户端或者服务器都可能,取决于签名信息由哪端生成)。公钥需要通过后台上传到支付宝,支付定会用来验证订单的合法性。生成方式为:
a.生成密钥
openssl genrsa -out rsa_private_key.pem 1024
b. pkcs8对私钥加密
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
这没有测试,使用时还是按支付宝文档
c. 生成公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
这里要注意ruby php不支持pkcs8加密后的私钥,所以要用第一步生成的私钥。
2. 客户端生成订单信息,订单信息中会有一个sign参数用来传递签名信息。
3. 支付宝服务器通过后台上传的公钥验证订单 成功则继续完成支付流程
这里有个问题就是ruby php不支持pkcs8要使用未pkcs8之前的私钥,而项目组之前未保留未pkcs8的私钥,所以这里需要一个pkcs8到未pkcs8密码的转换。
转换方式如下:
未pkcs8到pkcs8
openssl pkcs8 -topk8 -in /Users/spring/no_pkcs8.pem -out /Users/spring/pkcs8_rsa_private_key.pem -nocrypt
pkcs8到未pkcs8
openssl pkcs8 -in /Users/spring/pkcs8_rsa_private_key.pem -out /Users/spring/no_pkcs8_rsa_private_key.pem -nocrypt
这个有测试。
这里的pem文件是这样的:
-----BEGIN RSA PRIVATE KEY-----
MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBANJuqLJ/MhUpDor0
dl3eX5Q7c/9UO/i1xS2D8wUCDSSp4VMlfJvnpRx3U/BHkhJlxSKROxBuIiQw7u0u
+/v3g5jMrxVC2lMuHGACgxcCEz+WODfpQ0jHipRb72Dk1S8t93jk1aYsELY5bT3N
+7OXfitHrya6q/T5hOEt/BoEcXYXAgMBAAECfxBwlL1dMox0qK4yawzqUo1CF83a
xtSnXsAvjszVXDGBFBlq1FFZx4xxxhz/emn1iXEp53NhJ0msiP3+rbEBpUYmbSWb
Xy91C+znQ3s90QQZJnT3lNIcFGLxW0P4E9v5P9ETB+PEdJPasoUqmSKtuT32G+Eg
CHfneulRln63JyECQQDw2iMJdOxAt3C+aTO0caGi0JXm3DdKixZ7d8dkFA0J0ilZ
oIWHW0z7si+YcubMmgQAnls/b1J1qVxSSifwc+xFAkEA36q+mSgPhAZv6BT2cDfr
161TtRz719+KY8G7vFzuSSf+mfWWbRdlRwMP9ATvpkuRtcYIfFtwHh3hCIEhZUxU
qwJAbJNpyBGVj3citDPowyeWnjc53GDZ7BjXgcF1eYAwgITlbyoWB/b4tV6WZjsm
IIYt17mLmQUuPyyiGdakOpmHoQJBAKzSkulmwe5ixu9N20nEe/Av1mE4XwRjjtwb
4wLdz6UpSRoPYEc076WaISaM9dvJwnHw7behM5WhwrK+jF5oR3cCQGbexS+rL9s8
k8xiQYomIU7EBuWALDmRP4EekMoBkQUbeaBRMNWV4T6Lt8QPdYshgpjDaTNC7Vmi
jjYaFa1Atqs=
-----END RSA PRIVATE KEY-----
注意
1.以-----BEGIN RSA PRIVATE KEY-----开始
2. 以-----END RSA PRIVATE KEY-----
结束最后有一空行。
3. 每行的文字数是固定的
这里因为文字不等宽所以看起来长度不同。
支付宝流程如下
1. 自己会生成一个RSA密钥(公钥,私钥)私钥用于订单签名(开发者使用客户端或者服务器都可能,取决于签名信息由哪端生成)。公钥需要通过后台上传到支付宝,支付定会用来验证订单的合法性。生成方式为:
a.生成密钥
openssl genrsa -out rsa_private_key.pem 1024
b. pkcs8对私钥加密
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
这没有测试,使用时还是按支付宝文档
c. 生成公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
这里要注意ruby php不支持pkcs8加密后的私钥,所以要用第一步生成的私钥。
2. 客户端生成订单信息,订单信息中会有一个sign参数用来传递签名信息。
3. 支付宝服务器通过后台上传的公钥验证订单 成功则继续完成支付流程
这里有个问题就是ruby php不支持pkcs8要使用未pkcs8之前的私钥,而项目组之前未保留未pkcs8的私钥,所以这里需要一个pkcs8到未pkcs8密码的转换。
转换方式如下:
未pkcs8到pkcs8
openssl pkcs8 -topk8 -in /Users/spring/no_pkcs8.pem -out /Users/spring/pkcs8_rsa_private_key.pem -nocrypt
pkcs8到未pkcs8
openssl pkcs8 -in /Users/spring/pkcs8_rsa_private_key.pem -out /Users/spring/no_pkcs8_rsa_private_key.pem -nocrypt
这个有测试。
这里的pem文件是这样的:
-----BEGIN RSA PRIVATE KEY-----
MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBANJuqLJ/MhUpDor0
dl3eX5Q7c/9UO/i1xS2D8wUCDSSp4VMlfJvnpRx3U/BHkhJlxSKROxBuIiQw7u0u
+/v3g5jMrxVC2lMuHGACgxcCEz+WODfpQ0jHipRb72Dk1S8t93jk1aYsELY5bT3N
+7OXfitHrya6q/T5hOEt/BoEcXYXAgMBAAECfxBwlL1dMox0qK4yawzqUo1CF83a
xtSnXsAvjszVXDGBFBlq1FFZx4xxxhz/emn1iXEp53NhJ0msiP3+rbEBpUYmbSWb
Xy91C+znQ3s90QQZJnT3lNIcFGLxW0P4E9v5P9ETB+PEdJPasoUqmSKtuT32G+Eg
CHfneulRln63JyECQQDw2iMJdOxAt3C+aTO0caGi0JXm3DdKixZ7d8dkFA0J0ilZ
oIWHW0z7si+YcubMmgQAnls/b1J1qVxSSifwc+xFAkEA36q+mSgPhAZv6BT2cDfr
161TtRz719+KY8G7vFzuSSf+mfWWbRdlRwMP9ATvpkuRtcYIfFtwHh3hCIEhZUxU
qwJAbJNpyBGVj3citDPowyeWnjc53GDZ7BjXgcF1eYAwgITlbyoWB/b4tV6WZjsm
IIYt17mLmQUuPyyiGdakOpmHoQJBAKzSkulmwe5ixu9N20nEe/Av1mE4XwRjjtwb
4wLdz6UpSRoPYEc076WaISaM9dvJwnHw7behM5WhwrK+jF5oR3cCQGbexS+rL9s8
k8xiQYomIU7EBuWALDmRP4EekMoBkQUbeaBRMNWV4T6Lt8QPdYshgpjDaTNC7Vmi
jjYaFa1Atqs=
-----END RSA PRIVATE KEY-----
注意
1.以-----BEGIN RSA PRIVATE KEY-----开始
2. 以-----END RSA PRIVATE KEY-----
结束最后有一空行。
3. 每行的文字数是固定的
这里因为文字不等宽所以看起来长度不同。
更多相关文章
- android ndk生成第三方库的so方法(ndk-build,Application.mk,Andro
- Android(安卓)Studio 下debug情况下直接使用release的签名
- 下面就介绍下Android(安卓)NDK的入门学习过程
- [造轮子]Android动态加载框架总结
- Android(安卓)apk系列2-------系统签名(生成release版本的系统)
- Android新建项目后src下没有自动生成文件
- Android(安卓)打包及引用 aar 文件的方法
- Android(安卓)“退一步”的布局加载优化
- android 无法生成R文件的原因剖析