支付功能开发

下载的微信demo居然没有支付,后来在另外的地方才找到了有支付的demo。
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1

GitHub上面有很多开源的工具,搜索关键词“android pay”
https://github.com/search?utf8=%E2%9C%93&q=android+pay&type=

比如:
Android-Pay

数字签名

这里面涉及到数字签名的概念:

公钥加密然后私钥解密,可以用于通信中拥有公钥的一方向拥有私钥的另一方传递机密信息,不被第三方窃听。

那么私钥加密然后公钥解密是用在什么场合呢?就是数字签名。

用私钥加密,公钥解密,就是数字签名。

比如说,我有公钥和私钥,我又复制了公钥给小明。一天小明告诉我一个秘密,用公钥加密了,我用私钥解密,看到了这句话。别人即使知道了公钥,也解密不了,因为这句话只能用私钥解密。这是普通的加解密。

而我要告诉小明一个秘密,如果我用公钥加密,小明没有私钥,怎么看啊?那我就用私钥加密,小明用公钥就能看到了,而任何其他有公钥的人也能看到。如何别人能解密出来,说明这个秘密是你的,而不是其他人的,你也不能抵赖说这不是你的。这就是数字签名。

应用场合:比如说公司立了一份合同,想发给所有的同事。公司生成一个秘钥,把公钥给了每个同事一份。内容用秘钥加密,同事们用公钥就可以解密查看内容了。

但是,万一公钥被别人改了,而且私钥和内容也被改了,公钥解密的内容是其他的东西,那怎么办?公司创建合同时可以把公钥放到第三方认证机构CA,CA用自己的私钥将公司公钥和一些信息再次加密,得到“电子证书”,并在合同的后面附属“电子证书”。用公钥解密合同内容之后,再拿合同里面的电子证书去CA验证得到真正的公钥,然后对比一下手中的公司公钥和CA的公司公钥,如果是一致的则合同是真的。简单来说就是解密合同了,担心合同是假的,再拿合同里面的电子证书去CA验证一下对不对,进行双重验证。

浏览器就用这样的第三方认证机构:https协议。先把电子证书放到https协议上。网友访问时,网页后台服务器要用私钥加密内容,连同数字证书发给浏览器,浏览器验证数字证书和https协议是否一致,一致则浏览器使用公钥解密内容,用户就能看到信息了。如果数字证书不一致,会有警告提示。

参考:数字签名是什么?

在APP里面,后台也会先给你一个公钥写在APP,数据会用私钥加密发给你,你只能用公钥解密。就算你数据被拦截了,没有公钥是看不到的,所以公钥得写在安全的地方。

至于哪里安全,请参考知乎的android开发如何保障本地加密密钥的安全?,从反馈来看,基本无解……但是可以增加破解难度。

在支付宝支付里面,只用到了简单的加解密。

支付宝会先要求用户生成应用公钥和应用私钥,为了让你更方便,连生成的工具都给你了……——《生成RSA密钥》。私钥要自己本地保管,公钥上传到支付宝。请求支付宝时,先用本地私钥加密再发送,支付宝会用你的公钥来解密,这样可以证明这个请求是“你”发起的,而不是别人。注意,私钥保存在APP也是不安全的,建议将私钥保存在服务器,每次先请求服务器拿到私钥加密的内容,再将内容传给支付宝,虽然多了一步,但是安全啊……因为,别人要是在APP里面拿到了你的私钥,岂不是可以随意加密内容给支付宝了,比如说给某个账号转个几百万…..

而支付宝也会给你一个公钥,每次支付宝发来数据,你需要用这个支付宝公钥去解密,如果解密成功则证明这个数据是“支付宝”发来的。

猜你喜欢

转载自blog.csdn.net/iromkoear/article/details/80187284