• 微信支付Native(一)准备和相关知识


    目录

    1 需要准备相关参数

    2 支付安全

    2.1 对称加密和非对称加密

    2.2 数字签名

    2.2.1 摘要算法

    2.3 数字证书

    1 需要准备相关参数

    1)获取商户号

    微信商户平台:https://pay.weixin.qq.com/

    场景:Native支付

    步骤:提交资料=》签署协议=》获取商户号

    2)获取APPID

    微信公众平台:https://mp.weixin.qq.com/

    步骤:注册服务号=》服务号认证=》获取APPID=》绑定商户号

    3)获取API秘钥

    API版本的接口需要此秘钥

    步骤:登录商户平台=》选择账户中心=》安全中心=》API安全=》设置API秘钥

    4)获取APIV3秘钥

    APIv3版本的接口需要此秘钥步骤:登录商户平台=》选择账户中心=》安全中心=》API安全=》设置APIv3秘钥

    5)申请商户API证书

    APIv3版本的所有接口都需要;APIv2版本的高级接口需要(如:退款、企业红包、企业付款)

    步骤:登录商户平台=》选择账户中心=》安全中心=》API安全=》申请API证书

    2 支付安全

    2.1 对称加密和非对称加密

    按照秘钥的使用方式,加密可以分为两大类:对称加密和非对称加密

    1)对称加密:加密和解密的时候秘钥都是同一个,对称加密算法常见的有:

    AES加密算法,秘钥长度128、192或256、安全强度很好,性能很高。

    加密分组模式:将明文分组加密,微信支付中使用AEAD_AES_256_GCM

    优点:运算速度快

    缺点:秘钥需要信息交换的双方共享,一旦被窃取,消息就会被破解

    2)非对称加密

    非对称加密有两个秘钥,一个是公钥,一个是私钥,两个秘钥不同。

    使用公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密。其中RSA算法加密算法就是最著名的非对称加密算法。

    优点:私钥严格保密 ,公钥任意分发,黑客获取公钥无法破解密文

    缺点:运算速度非常慢

    一般情况下:如果要保证信息传输的安全性,一般都是对称加密和非对称加密互相结合的。例如:我们可以利用非对称加密传输对称加密所需的秘钥,那么后期的交换过程就可以安全的使用对称加密进行了,这样既能保证对称加密的秘钥不会在传输的过程被拦截,又能保证在后续传输的过程中加密和解密的效率。https底层使用的就是这个原理。

    举例:Bob有两把钥匙,一把公钥和一把私钥。Bob将自己的公钥分给自己的三个朋友,一人一把。

     

    如果Susan想要给Bob写信,Susan将信件的内容用公钥加密发给Bob,Bob收到信件之后,用私钥进行解密,就可以看到信件的内容。(只要私钥不泄漏,Bob的朋友都可以给Bob写信,即使信件被截获,敌人也无法获取知道信件的内容)

    这个时候大家可以发现,我们写信的时候用的是公钥加密,私钥解密。但是如果我们反过来用私钥加密,公钥解密会发生什么事情呢?

     这个时候,当Bob用私钥进行信息加密的时候,持有Bob公钥的朋友都可以对信件进行解密,所以可以发现,当用私钥加密,公钥解密的作用其实就是身份认证。

    2.2 数字签名

    2.2.1 摘要算法

    摘要算法,也是常说的散列函数、哈希函数,它能够将任意长度的数据“压缩”成固定长度。而且独一无二的“摘要”字符串,这好像是给这段数据生成了“指纹”。

    作用:保证信心的完整性

    特性:

    • 不可逆:只有算法,没有秘钥,只能加密,不能解密
    • 难题友好性:想要破解,只能暴力枚举
    • 发散性:只要对原文进行一点点改变,摘要就会发生剧烈变化
    • 抗碰撞性:原文不同,计算后的摘要也不同。

    常见的摘要算法:MD5、SHA1、SHA2

    Bob写完信之后,先用摘要算法生成信件原文的摘要(message Digest)bob将摘要附在信件原文的下面,一起发送给pat。

    pat接受信之后,使用和Bob一样的摘要算法,加密信件的原文,得到信件的摘要,然后Pat将加密后的摘要和Bob在原文中附加的摘要做一下对比,如果一致说明信件是没有被篡改过的。(但是这种做法存在安全隐患,如果黑客截取了信件并且直接修改了原文,根据原文生成了新的摘要,那么接受者这时候是辨别不出来的)

    所以说摘要算法不具有机密性

    Bob写完信件之后,先用摘要算法生成信件的摘要,bob使用自己的私钥将摘要加密加密后的结果(加密后的结果称为数字签名)bob将数字签名附在信件下面,一起发给pat。

    pat收到信件之后 ,用公钥解密得到信件的摘要,然后pat使用和bob一样的加密算法加密信件的原文,得到信件的摘要,然后比对二者是否一致,如果一致,那么信件就是Bob发的且没有经过篡改。

    2.3 数字证书

     假使Doug给Pat一把公钥(这把公钥是Doug,但是骗Pat说是Bob的),然后Doug用私钥对信件进行加密发给Pat,Pat用Doug给的假公钥进行解密后认为这是Bob的发的信件。(这个时候就会造成数据的泄漏)(就相当于有人冒充微信服务器和你通信,然后你把重要信息全部泄漏给了骗子)

    那么如何判断公钥是真实的呢?

    就是靠CA数字证书了

     Bob向Pat发送信件的时候,Pat收到信件之后先将数字证书取出,对数字证书中的签名进行取出(Pat用数字证书中指定的hash算法根据证书信息计算整个证书信息的摘要,并且使用CA的公钥从数字证书的签名中解析出数字证书的摘要),然后将两个摘要进行比较,如果摘要相同则说明验签通过,Pat从数字证书中获取Bob的公钥。然后根据获取到Bob的公钥进行验签收到的信件。

     像我们平常常见的https协议就用了这个数字证书。

    如:现在有一个网站向CA申请数字证书,那CA用自己的私钥对数字证书的基本信息进行了加密并签名(数字证书的基本信息中是存有网站公钥的)此时有一个客户端对https网站发送了一个加密请求,网站对网页就行加密之后,会连同它的数字证书一起发送给这个客户端的浏览器,那客户端浏览器接收到服务器发送过来的数字证书之后,会使用CA的公钥解密数字证书并验签(CA的公钥就是证书认证机构的公钥,默认情况下,我们操作系统中都会有权威的CA证书列表,CA证书列表就会有CA的公钥)那么客户端也会判断当前访问的网址和数字证书中的网址是否一致。

    通俗的讲:我们访问一个网站,如果这个网站是https形式的,那么他就会向CA证书列表中注册并申请证书 ,然后浏览器访问的时候,该网站会将自己的数字证书发给浏览器,浏览器会对其进行验签

     

  • 相关阅读:
    Maven的idea配置
    【Qt QML】Qt5.15.2 qml添加自定义控件报错“Xxxx is not a type“
    nodejs+vue健身服务应用elementui
    【Mongoose笔记】HTTP 客户端
    linux 的文件权限案列
    基于net的应用开发技术-上机三
    qt模块feature QT_FEATURE_* qt_lib_*.pri QT_CONFG qtConfig
    ZTMap是如何在相关政策引导下让建筑更加智慧化的?
    MyEclipse 用tomcat部署SSM项目后,项目名称和当前项目不一致
    tensorflow的模型持久化
  • 原文地址:https://blog.csdn.net/qq_50652600/article/details/125897870