GB35114双向身份认证(A级)学习笔记

GB35114双向身份验证学习笔记

温故而知新

SSL单向认证

摘录自:https://blog.csdn.net/qq_45759354/article/details/128672828

SSL协议用到了对称加密和非对称加密,在建立连接时,SSL首先对对称加密密钥使用非对称加密。连接建立好后,SSL对传输内容使用对称加密。单向认证是客户端不携带证书,服务端存在证书,在认证过程中,仅验证服务端的身份,当客户端访问服务器时,浏览器会去检查服务器的SSL证书,来验证网站服务器的合法性。一般web端应用都是采用单向认证的。

单向认证过程

客户端向服务端发送SSL协议的版本号、加密算法种类、随机数等信息,建立连接;

服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,以及服务端证书(证书中有公钥);

客户端用返回的信息,进行对服务端的校验,验证通过则继续通信,否则告警,验证内容:

证书是否过期
服务器证书签发的CA机构是否可靠
公钥是否能解开证书中的数字签名
服务器证书上的域名是否和服务器实际域名相匹配
客户端向服务器发送自己所能支持的对称加密方案,供服务器进行选择;

服务器选择加密程度高的加密方式;

服务器将选择好的加密方式以明文方式返回给客户端;

客户端收到加密方案后,使用该加密方案生成随机码,用作通信过程中对称加密的密钥,使用服务端返回的公钥进行加密,将加密后的随机码发送给服务器;

服务端收到客户端返回的加密信息后,使用自己的私钥解密,获取对称加密密钥,接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信的信息安全。

图片摘录自(略微修改):https://www.cnblogs.com/bluestorm/p/10571989.html
在这里插入图片描述

SSL双向认证

摘录自:https://blog.csdn.net/qq_45759354/article/details/128672828

双向认证是指在SSL握手的过程中,同时验证客户端和服务器的身份,所以双向认证SSL证书至少包括两个或两个以上的证书,一个是服务器证书,另一个或多个是客户端证书。

双向认证过程

客户端向服务器发送SSL协议的版本号、加密算法种类、随机数等信息,建立连接;
服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,以及服务端证书(证书中有公钥);
客户端使用服务端返回的信息验证服务器的合法性,验证内容跟单向认证一样;
客户端校验通过后,将自己的证书及公钥发送到服务器;
服务器验证客户端的证书,校验通过后,可获取到客户端的公钥;
客户端发送自己的可支持的对称加密方案给服务器供其选择;
服务器端在客户端发送的加密方案中先择加密程度高的方案,将加密方式通过客户端发送证书中的公钥加密后,返回给客户端;
客户端收到服务端返回的加密方案密文后,用私钥解密,获取加密方案的明文,产生随机码,作为对称加密密钥,使用服务端公钥加密后,发送给服务端;
服务端使用私钥解密得到对称加密的密钥,接下来的会话中,服务器和客户端将使用该密钥进行对称加密,保证通信安全。

图片摘录自(略微修改):https://www.cnblogs.com/bluestorm/p/10571989.html
在这里插入图片描述

设备接入认证

本章节部分内容摘录自(主要分析此连接的报文信息):https://blog.csdn.net/songxiao1988918/article/details/98749629

SIP服务器认证FDWSF的单向身份认证

请添加图片描述

注册请求(携带设备安全能力 [Authorization: Capability])

REGISTER sip:11011200002000000100@1101120000 SIP/2.0
Via: SIP/2.0/UDP 192.168.3.12:5060;rport;branch=z9hG4bK443099353
From: sip:11011200001325000001@1101120000;tag=249558797
To: sip:11011200001325000001@1101120000
Call-ID: 1524440977
CSeq: 1 REGISTER
Contact: sip:11011200001325000001@192.168.3.12:5060
Authorization: Capability algorithm=“A:SM2;H:SM3;S:SM1/OFB/PKCS5;SI:SM3-SM2”, keyversion=“2019-08-06T05:31:39”, cnonce=“devicecert:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJiVENDQVJNQ0FRRXdDZ1lJS29FY3oxVUJnM1V3UWpFTE1Ba0dBMVVFQmhNQ1EwNHhFREFPQmdOVkJBZ00KQjJkaU16VXhNVFF4SVRBZkJnTlZCQW9NR0VsdWRHVnlibVYwSUZkcFpHZHBkSE1nVUhSNUlFeDBaREFlRncweApPVEEzTWpVd09USTVORGRhRncweU9UQTNNakl3T1RJNU5EZGFNRU14Q3pBSkJnTlZCQVlUQWtOT01UUXdNZ1lEClZRUUREQ3N6TWpBd01EQXdNREF3TVRNeU5UQXdNREF3TVY4eE56RTNNREV5TURFMU1EZ3dNVEk1TURZMU1URTMKTUZrd0V3WUhLb1pJemowQ0FRWUlLb0VjejFVQmdpMERRZ0FFWkhmbFZYaGxvOFZDTkRHZFcvZjVROE50SUVjcAoyRGZVbjI2Rm5WKy9Ob3F0b1dzb1JjRityUzZ2bTVubStqc0pKdWc0amN4WlBiaTNkOE9qWDgwMnpUQUtCZ2dxCmdSelBWUUdEZFFOSUFEQkZBaUVBeFMzQk9oVkRGQjBBVDBjTFJCYUJtQ3o2WXBFZjB4eUxBclVHdDBqeUwzQUMKSUR2RkE5NWFXc1JEazRaTm5iZ2l4eHRmbW53eXB1UUZLY0lwMGMwZUZKcHIKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=”
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0

通过Authorization域,告知上级平台,FDWSF的能力(Capability)
请添加图片描述

  • 算法能力
    algorithm=“A:SM2;H:SM3;S:SM1/OFB/PKCS5;SI:SM3-SM2”
    非对称加密算法支持:SM2
    杂凑算法(Hash)支持:SM3
    对称加密算法支持:SM1/OFB/PKCS5
    签名算法支持:SM3-SM2

吐槽一波:这个FDWSF(安全前端设备:Front-end Device With Safety Function)只支持SM1算法,这个算法可能没有软件实现方案,估计得上加密芯片,如果是软件方案,这个设备将无法支持,如果做软件方案,设备不支持SM4将是个风险点。

  • 密钥版本
    keyversion=“2019-08-06T05:31:39”

在这里插入图片描述
再吐槽一波:这个标准本身就自我矛盾,例如的值都不符合16为数字字符的要求,这不是难为开发人员么?不过见怪不怪了,习惯就好。分析这个报文,至少前面的报文补0了,看着舒服一些,那就按照找的报文方式处理数据好了。

  • 客户端随机 (非标字段,摘要认证中的一个字段,由于标准中没有,先不讨论) cnonce=“devicecert:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJiVENDQVJNQ0FRRXdDZ1lJS29FY3oxVUJnM1V3UWpFTE1Ba0dBMVVFQmhNQ1EwNHhFREFPQmdOVkJBZ00KQjJkaU16VXhNVFF4SVRBZkJnTlZCQW9NR0VsdWRHVnlibVYwSUZkcFpHZHBkSE1nVUhSNUlFeDBaREFlRncweApPVEEzTWpVd09USTVORGRhRncweU9UQTNNakl3T1RJNU5EZGFNRU14Q3pBSkJnTlZCQVlUQWtOT01UUXdNZ1lEClZRUUREQ3N6TWpBd01EQXdNREF3TVRNeU5UQXdNREF3TVY4eE56RTNNREV5TURFMU1EZ3dNVEk1TURZMU1URTMKTUZrd0V3WUhLb1pJemowQ0FRWUlLb0VjejFVQmdpMERRZ0FFWkhmbFZYaGxvOFZDTkRHZFcvZjVROE50SUVjcAoyRGZVbjI2Rm5WKy9Ob3F0b1dzb1JjRityUzZ2bTVubStqc0pKdWc0amN4WlBiaTNkOE9qWDgwMnpUQUtCZ2dxCmdSelBWUUdEZFFOSUFEQkZBaUVBeFMzQk9oVkRGQjBBVDBjTFJCYUJtQ3o2WXBFZjB4eUxBclVHdDBqeUwzQUMKSUR2RkE5NWFXc1JEazRaTm5iZ2l4eHRmbW53eXB1UUZLY0lwMGMwZUZKcHIKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=”

注册响应401 Unauthorized(R1回传 [WWW-Authenticate:Unidirection])

请添加图片描述

SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.3.12:5060;rport=5060;branch=z9hG4bK443099353
From: sip:11011200001325000001@1101120000;tag=249558797
To: sip:11011200001325000001@1101120000;tag=127583574
Call-ID: 1524440977
CSeq: 1 REGISTER
WWW-Authenticate: Unidirection algorithm=“A:SM2;H:SM3;S:SM1/OFB/PKCS5;SI:SM3-SM2”, random1=“PRAIIbutDbd5x/NKsbwwYw==”
Content-Type: Application/MANSCDP+xml
User-Agent: videosvr 1.0
Content-Length: 0

通过WWW-Authenticate域,告知下级平台服务器使用Unidirection(单向身份验证)

  • 算法
    algorithm=“A:SM2;H:SM3;S:SM1/OFB/PKCS5;SI:SM3-SM2”

吐槽:也没有给上级平台可选的余地,就这一组算法。

  • 随机数1
    random1=“PRAIIbutDbd5x/NKsbwwYw==”

吐槽:标准中只说是随机数,但是报文中明显是base64编码,videosvr 1.0个性发挥的成分。

注册请求(携带 Token CS= R2+R1+ServerID [Authorization: Unidirection])

REGISTER sip:11011200002000000100@1101120000 SIP/2.0
Via: SIP/2.0/UDP 192.168.3.12:5060;rport;branch=z9hG4bK582371201
From: sip:11011200001325000001@1101120000;tag=249558797
To: sip:11011200001325000001@1101120000
Call-ID: 1524440977
CSeq: 2 REGISTER
Contact: sip:11011200001325000001@192.168.3.12:5060
Authorization: Unidirection random1=“PRAIIbutDbd5x/NKsbwwYw==”, random2=“F4InuQewuMMqYPy1ItBdhQ==”, serverid=“11011200002000000100”, sign1=“MEYCIQD/9gP8olHM0TeLj0MxBRw3C8tQKFMMRgUupnyD4xXTTwIhAJvXxvTEDXj8Yk5qjHwujzUjpYpxxCGq7Zz0tKzhhJUU”, algorithm=“A:SM2;H:SM3;S:SM1/OFB/PKCS5;SI:SM3-SM2”
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0

通过Authorization域,告知上级平台使用Unidirection(单向身份验证)

  • 随机数1
    random1=“PRAIIbutDbd5x/NKsbwwYw==”
    服务器生成的random1,在注册时携带上。

  • 随机数2
    random2=“F4InuQewuMMqYPy1ItBdhQ==”
    吐槽:标准中只说是随机数,但是报文中明显是base64编码,IP Camera也有私活。莫非有地方定义随机数的生成方式?

  • 服务器ID
    serverid=“11011200002000000100”

  • 签名1
    sign1=“MEYCIQD/9gP8olHM0TeLj0MxBRw3C8tQKFMMRgUupnyD4xXTTwIhAJvXxvTEDXj8Yk5qjHwujzUjpYpxxCGq7Zz0tKzhhJUU”

FDWSF的私钥 SI(random2 + random1 + serverid)
用于服务器对设备身份进行验签

  • 算法
    algorithm=“A:SM2;H:SM3;S:SM1/OFB/PKCS5;SI:SM3-SM2”

与服务器选择的算法一致

注册响应200(携带Cryptkey [SecurityInfo: Unidirection])

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.3.12:5060;rport=5060;branch=z9hG4bK582371201
From: sip:11011200001325000001@1101120000;tag=249558797
To: sip:11011200001325000001@1101120000;tag=822951361
Call-ID: 1524440977
CSeq: 2 REGISTER
Contact: sip:11011200001325000001@192.168.3.22:5060
User-Agent: videosvr 1.0
Expires: 3600
Date: 2019-08-06T13:31:57.004
SecurityInfo: Unidirection cryptkey=“MHkCIBHIiuBM7BulVNA9W1lwMzqDWFgmwqmF3lUg2ek0OJ77AiEAhLUtNE+yGqjqOKSUDIMyaSuNTaI5NUkhLq/cDxHKXJwEIHFMxhef2Mm87QjLenmuVKs1rGm7Ls3aMG+1zPp47365BBAnTJVAmqz9pBE2xKOXhpQF”, algorithm=“A:SM2;H:SM3”
Content-Length: 0

通过SecurityInfo域,告知**Unidirection(单向身份验证)**结果

  • 密钥
    cryptkey=“MHkCIBHIiuBM7BulVNA9W1lwMzqDWFgmwqmF3lUg2ek0OJ77AiEAhLUtNE+yGqjqOKSUDIMyaSuNTaI5NUkhLq/cDxHKXJwEIHFMxhef2Mm87QjLenmuVKs1rGm7Ls3aMG+1zPp47365BBAnTJVAmqz9pBE2xKOXhpQF”
    暂时没有看到这个是干嘛用的,可硬是一些星灵上需要它进行加密。

  • 算法
    algorithm=“A:SM2;H:SM3”

非对称算法:SM2
杂凑算法(Hash)支持:SM3

吐槽,这里为什么不指定对称加密算法?标准例子里没有就没有,不管了。

SIP服务器与FDWSF间的双向身份认证

请添加图片描述

注册请求(携带设备安全能力 [Authorization: Capability])

REGISTER sip:34020000002000000003@34020000 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.64:5060;rport;branch=z9hG4bK520712539
From: sip:34020000001320000001@34020000;tag=1465468922
To: sip:34020000001320000001@34020000
Call-ID: 563593916
CSeq: 1 REGISTER
Contact: sip:34020000001320000001@192.168.1.64:5060
Authorization: Capability algorithm=“A:SM2;H:SM3;S:SM1/OFB/PKCS5;SI:SM3-SM2”, keyversion=“2018-12-20T19:27:41”
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0

  • 算法能力
    algorithm=“A:SM2;H:SM3;S:SM1/OFB/PKCS5;SI:SM3-SM2”
    非对称加密算法支持:SM2
    杂凑算法(Hash)支持:SM3
    对称加密算法支持:SM1/OFB/PKCS5
    签名算法支持:SM3-SM2

吐槽一波:这个FDWSF也是只支持SM1算法,有点危险。

  • 密钥版本
    keyversion=“2019-08-06T05:31:39”

上面吐槽过了,这里不吐槽了,但是这次没有cnonce了,这次才是对的嘛!

注册响应401 Unauthorized(R1回传 [WWW-Authenticate:Bidirection])

SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.1.64:5060;rport=5060;branch=z9hG4bK520712539
From: sip:34020000001320000001@34020000;tag=1465468922
To: sip:34020000001320000001@34020000;tag=1966674912
Call-ID: 563593916
CSeq: 1 REGISTER
User-Agent: videosvr 1.0
Expires: 3600
Date: 2018-12-20T19:27:42.000
WWW-Authenticate: Bidirection algorithm=“A:SM2;H:SM3;S:SM4/OFB/PKCS5,SM1/OFB/PKCS5;SI:SM3-SM2”, random1=“OxImNZnZwyNMtx0FjnWKrg==”
Content-Length: 0

通过WWW-Authenticate域,告知下级平台服务器使用Bidirection (双向向身份验证)

  • 算法
    algorithm=“A:SM2;H:SM3;S:SM1/OFB/PKCS5;SI:SM3-SM2”

吐槽:也是没得选。

  • 随机数1
    random1=“OxImNZnZwyNMtx0FjnWKrg==”

吐槽:感觉随机数肯定有标准,就是我没有看到,莫非是这个要求:随机数生成算法需要通过GM/T 0005-2012检测,稍后查一下

注册请求(携带 Token CS= R2+R1+ServerID [Authorization: Bidirection])

REGISTER sip:34020000002000000003@34020000 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.64:5060;rport;branch=z9hG4bK1060289490
From: sip:34020000001320000001@34020000;tag=1465468922
To: sip:34020000001320000001@34020000
Call-ID: 563593916
CSeq: 2 REGISTER
Contact: sip:34020000001320000001@192.168.1.64:5060
Authorization: Bidirection random1=“OxImNZnZwyNMtx0FjnWKrg==”, random2=“KBDLEUo83FgcnHXcSNN04w==”, serverid=“34020000002000000003”, sign1=“MEYCIQDRWE9xmwU4+2pS7RF4H+VXhFvo6VkM/hiCvTZpxVKZ7AIhAJbLfc9r7OpgzMc0bdqE6XuOs70vF96BcCbvoOqKGRjh”, algorithm=“A:SM2;H:SM3;S:SM4/OFB/PKCS5,SM1/OFB/PKCS5;SI:SM3-SM2”
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0

通过Authorization域,告知上级平台使用Bidirection (双向向身份验证)

  • 随机数1
    random1=“OxImNZnZwyNMtx0FjnWKrg==”
    服务器生成的random1,在注册时携带上。

  • 随机数2
    random2=“KBDLEUo83FgcnHXcSNN04w==”
    客户端随机数

  • 服务器ID
    serverid=“34020000002000000003”

  • 签名1
    sign1=“MEYCIQDRWE9xmwU4+2pS7RF4H+VXhFvo6VkM/hiCvTZpxVKZ7AIhAJbLfc9r7OpgzMc0bdqE6XuOs70vF96BcCbvoOqKGRjh”

FDWSF的私钥 SI(random2 + random1 + serverid)
用于服务器对设备身份进行验签

  • 算法
    algorithm=“A:SM2;H:SM3;S:SM4/OFB/PKCS5,SM1/OFB/PKCS5;SI:SM3-SM2”
    吐槽:这次有点意思,对称加密算饭竟然有SM4,

注册响应200(携带Cryptkey [SecurityInfo: Bidirection])

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.64:5060;rport=5060;branch=z9hG4bK1060289490
From: sip:34020000001320000001@34020000;tag=1465468922
To: sip:34020000001320000001@34020000;tag=1980721111
Call-ID: 563593916
CSeq: 2 REGISTER
User-Agent: videosvr 1.0
Expires: 3600
Date: 2018-12-20T19:27:42.000
SecurityInfo: Bidirection algorithm=“A:SM2;H:SM3;S:SM4/OFB/PKCS5,SM1/OFB/PKCS5;SI:SM3-SM2”,random1=“OxImNZnZwyNMtx0FjnWKrg==”,random2=“KBDLEUo83FgcnHXcSNN04w==”,deviceid=“34020000001320000001”,serverid=“34020000002000000003”,cryptkey=“MHgCICPmu12OKCfCNsiTK/6wSsHpDEF43fedv9AxRjj+XzQ0AiAZnh6496mWVcpV+BWOK4tZ3G3q/TZ4Dwt6vBv3G4xlXQQgMfbkaXwYUL8RObHfkpQEC++/CA/Enssg7rlZgDnKCXQEEEWqHpbVai9NJaT0orxaQ4Y=”,sign2=“MEUCIQDzvGhJCuxmH/3NNtLNnrXIUOxYkYB7j8/3Th1LvjZHggIgD/nd9RbpEd6neZTuXDsIbNzydyS8WarbN1p6nHD5pHk=”
Content-Length: 0

通过SecurityInfo域,告知**Bidirection (双向向身份验证)**结果

  • 算法
    algorithm=“A:SM2;H:SM3;S:SM4/OFB/PKCS5,SM1/OFB/PKCS5;SI:SM3-SM2”
    对称算法也是有连个,SM1和SM4

非对称算法:SM2
杂凑算法(Hash)支持:SM3
对称算法:SM4/OFB/PKCS5,SM1/OFB/PKCS5
签名算法:SM3-SM2

  • 随机数1
    random1=“OxImNZnZwyNMtx0FjnWKrg==”
    服务器生成的random1

  • 随机数2
    random2=“KBDLEUo83FgcnHXcSNN04w==”
    客户端生成的random2

  • 设备ID
    deviceid=“34020000001320000001”

  • 服务器ID
    serverid=“34020000002000000003”

  • 密钥
    cryptkey=“MHgCICPmu12OKCfCNsiTK/6wSsHpDEF43fedv9AxRjj+XzQ0AiAZnh6496mWVcpV+BWOK4tZ3G3q/TZ4Dwt6vBv3G4xlXQQgMfbkaXwYUL8RObHfkpQEC++/CA/Enssg7rlZgDnKCXQEEEWqHpbVai9NJaT0orxaQ4Y=”
    双向身份验证验签时需要此字段

  • 签名2
    sign2=“MEUCIQDzvGhJCuxmH/3NNtLNnrXIUOxYkYB7j8/3Th1LvjZHggIgD/nd9RbpEd6neZTuXDsIbNzydyS8WarbN1p6nHD5pHk=”

Server的私钥 SI(random2 + random1 + deviceid + cryptkey)
用户设备端对服务端做身份验证

管理平台间认证

在这里插入图片描述
平台间的双向身份验证没有找到实际例子,只能拿标准中的师范分析了。

吐槽,消息师范D2根本就是设备的双向身份验证,被标准忽悠了额,那怎么办?看文字说明,自己琢磨吧。

注册请求(携带设备安全能力 [Authorization: Capability])

和设备端双向认证内容一致,此章节省略

注册响应401 Unauthorized(R1回传 [WWW-Authenticate:Bidirection])

和设备端双向认证内容一致,此章节省略

注册请求(携带 Token CS= R2+R1+ServerID [Authorization: Bidirection])

和设备端双向认证内容一致,此章节省略

注册响应200(携带Cryptkey [SecurityInfo: Bidirection])

通过SecurityInfo域,告知**Bidirection (双向向身份验证)**结果

  • 算法
    algorithm=“A:SM2;H:SM3;S:SM4/OFB/PKCS5,SM1/OFB/PKCS5;SI:SM3-SM2”
    对称算法也是有连个,SM1和SM4

非对称算法:SM2
杂凑算法(Hash)支持:SM3
对称算法:SM4/OFB/PKCS5,SM1/OFB/PKCS5
签名算法:SM3-SM2

  • 随机数1
    random1=“OxImNZnZwyNMtx0FjnWKrg==”
    服务器生成的random1

  • 随机数2
    random2=“KBDLEUo83FgcnHXcSNN04w==”
    客户端生成的random2

  • 设备ID
    deviceid=“34020000001320000001”

  • 服务器ID
    serverid=“34020000002000000003”

  • 密钥
    cryptkey=“MHgCICPmu12OKCfCNsiTK/6wSsHpDEF43fedv9AxRjj+XzQ0AiAZnh6496mWVcpV+BWOK4tZ3G3q/TZ4Dwt6vBv3G4xlXQQgMfbkaXwYUL8RObHfkpQEC++/CA/Enssg7rlZgDnKCXQEEEWqHpbVai9NJaT0orxaQ4Y=”
    双向身份验证验签时需要此字段

  • 签名2
    sign2=“MEUCIQDzvGhJCuxmH/3NNtLNnrXIUOxYkYB7j8/3Th1LvjZHggIgD/nd9RbpEd6neZTuXDsIbNzydyS8WarbN1p6nHD5pHk=”

Server的私钥 SI(random2 + random1 + deviceid + cryptkey)
用户设备端对服务端做身份验证

控制信令认证

//TODO 继续整理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22836.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【量化课程】02_1.宏观经济学基础概念

2.1_宏观经济学基础概念 文章目录 2.1_宏观经济学基础概念1. 宏观经济简单背景1.1 微观经济学时期1.2 宏观经济学开端1.3 宏观经济学研究的问题1.4 宏观经济与理财的联系 2. 宏观经济分析及关键指标2.1 教材中的宏观经济分析框架和指标2.1.1 国内生产总值GDP2.1.2 边际消费倾向…

Docker:overlay2浅析以及解决overlay2 文件过大的问题

最近在学习docker的实现时看到这么一个概念:Union File System,先让我们来介绍介绍它。 Union File System 定义:联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作…

微信小程序音频播放失败:TypeError: Cannot read property ‘duration‘ of undefined

报错截图 最下面这个this.setData()报错可不用理会,是this取值的问题 解决 需要播放和暂停功能时,需要把audio以及他的src放在Page外面。不能缺少 audioCtx.onPlay() 和 audioCtx.onError()两个方法,且需要放在play()方法之前如果在wx.crea…

Bash 有效电话号码

193 有效电话号码 给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个单行 bash 脚本输出所有有效的电话号码。 你可以假设一个有效的电话号码必须满足以下两种格式: (xxx) xxx-xxxx 或 xxx-xxx-xxxx。&…

apple pencil一代的平替有哪些品牌?苹果平板的触控笔

随着苹果Pencil系列的推出,平替电容笔在国内市场得到了较好的发展,随之的销量,也开始暴涨,苹果pencil因为价格太高,导致很多人买不起。目前市场上,有不少的平替电容笔,可以替代苹果的Pencil&…

StringBuffer类 StringBuilder 类

StringBuffer类 介绍 StringBuffer是一个容器,代表可变的字符序列,可以对字符串内容进行增删。 StringBuffer是可变长度的。 实现了序列化接口,可实现串行化(可以将内容保存至文件或者网络传输): Serial…

webpack项目和vue项目发布,浏览器存在缓存

项目是webpack搭建的每次发步到线上,经常需要手动清楚浏览器缓存才能有效果。vue项目设置在最下面 项目打包的js(css也是一致)名称都采用哈希值 问题:哈希值在有些情况下打包会不变,导致浏览器使用自己缓存的资源 解…

wordpress主题zibll子比主题v7.2.2绕授权+教程

1、先说一下要准备的东西 一份子比7.1正式包,一台服务器,wp6.2.2正式包(wordpress),一个域名 2、首先把wp上传服务器的域名根目录下,然后打开前台按要求填写数据库和管理员邮箱账号密码,php版本…

Sql 语句小课堂8:求特定字段平均值的问题

Sql 语句小课堂8:求特定字段平均值的问题 问题来源初始数据超标条件方案一:得出汇总结果方案二:在原有数据上附加其结果 小结 问题来源 最近老顾变得原来越咸鱼了,好久没去逛 CSDN 问答了,于是灵感枯竭,不…

云计算——云计算关键技术

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 一.云计算关键技术 1.虚拟化技术 2.分布式数据存储技术 (1&…

Java正则表达式捕获组

捕获组是将多个字符视为一个单元的一种方法。 它们是通过将要分组的字符放在一组括号中来创建的。 例如,正则表达式(dog)创建包含字母d,o和g的单个组。 捕获组通过从左到右计算它们的左括号来编号。 在表达式((A)(B(C)))中,例如,…

taro-ui-vue3 的虚拟列表组件VirtualScroll

项目&#xff1a;taro3vue3 用法&#xff1a; <at-virtual-scrollbench"5":height"listHeight":items"fieldList":item-height"itemHeight" ><template #default"{ index, item }"><view :id"merchan…