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

news2024/11/26 18:40:33

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.coloradmin.cn/o/753514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker 安装 Nacos 单节点

Docker 安装 Nacos 单节点 1 搜索 Nacos2 下载 Nacos3 安装 Nacos Nacos(中文名“云注册中心和配置中心”)是一个用于动态服务发现、配置管理和服务管理的开源项目,它由阿里巴巴集团开发并开源。Nacos提供了一种简单而强大的方式来实现微服务…

自动化用例编写思路 (使用pytest编写一个测试脚本)

目录 一,明确测试对象 二,编写测试用例 构造请求数据 封装测试代码 断言设置 三,执行脚本获取测试结果 四,总结 经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口…

系统调用与函数调用有什么区别?

本文我们来聊聊系统调用与普通的函数调用之间的区别。 作为程序员你肯定写过无数的函数,假设有这样两个函数: void funcB() {} void funcA() { funcB();} 函数之间是可以相互调用的,这很简单很happy有没有。 要知道是代码、是函数就可以相…

ABAP 发送特定格式内容的邮件

项目中,经常会有需求,向客户,供应商发送邮件,但是会有一些格式上的要求。 我们一般使用长文本来处理此类需求 举例,客户需要发送一个如下邮件主体内容(带格式) Dear Customer, Attached is y…

相机图像质量研究(2)ISP专用平台调优介绍

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

洛谷:P5016 龙虎斗 ← NOIP2018 普及组T2

【题目来源】https://www.luogu.com.cn/problem/P5016【题目描述】 轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 n 个兵营(自左至右编号 1∼n),相邻编号的兵营之间相隔 1 厘米,…

psutil库使用详解

一、背景 在Python的世界里,有一些库因其强大的功能和易用性而备受开发者们的喜爱。今天,我们要介绍的就是其中的一员——psutil库。psutil(python system and process utilities)是一个跨平台的第三方库,用于获取系统运行时的进程和系统利用…

MySQL 事务与存储引擎

目录 一、MySQL事务的概念 二、事务的ACID特点 2.1 原子性 2.2 一致性 2.3 隔离性 2.4 持久性 2.5 事务之间的相互影响 三、Mysql及事物隔离级别 3.1 查询全局事务隔离级别 3.2 查询会话事务隔离级别 3.3 设置全局事务隔离级别 3.4 设置会话事务隔离级别 …

Android自定义圆环进度条/刻度仪表盘(单环单点带动画)

效果图: 1.自定义HeartDashBoardView /*** 刻度仪表盘*/ public class HeartDashBoardView extends View {private static final float START_ANGLE 135f;private static final float MAX_ANGLE 270f;private float progress 0;private float centerX;private float center…

快快快快快快快快快快排

作者简介:დ旧言~,目前大一,现在学习Java,c,Python等 座右铭:松树千年终是朽,槿花一日自为荣。 望小伙伴们点赞👍收藏✨加关注哟💕💕 C语言实现快排☺️ ℹ️…

应届毕业生要如何准备秋招简历?

秋招对于应届毕业生是一个求职的重要渠道,但是很多应届毕业生却不知道要如何制作秋招简历。那么,秋招简历应该如何制作呢?接下来,小编给大家讲一讲简历制作(https://www.jiaobu365.com/)的哪些事&#xff0…

2023 世界人工智能大会(WAIC)人才培养论坛成功举办!

Datawhale论坛 来源:2023 世界人工智能大会(WAIC) 前 言 2023 年 7 月 8 日,“2023世界人工智能大会”(WAIC)落下帷幕。7 月 8 日上午,WAIC 的主要分论坛之一“AIGC时代下的青年开发者人才培养…

什么样的性能测试工具才算是好的工具呢?

一、性能测试工具的特征 调度能力 因为性能测试不可能由一台压力机完成或者说大部分情况下,我们不能不可能由一台压力机来完成,凡是对压力真正有所要求的场景,往往是多台压力机共同施加压力完成性能测试;因此,性能测…

【GitHub】强大的终端录制工具-Terminalizer

Terminalizer 是一个GitHub上优秀的开源项目,目前项目点赞数已达:14k,该项目可以轻松记录下你在命令行的操作,并将录制好的内容输出成 gif 图像或直接分享到网上。 项目开源协议:MIT 项目主开发语言:JavaSc…

Vue计算属性:简化数据处理和视图更新的利器

一、计算属性的基本使用 计算属性:一个特殊属性,值依赖于另外一些数据动态计算出来。🚩🚩🚩计算属性特点:函数内使用的变量改变,重新计算结果返回。💣💣💣注…

uniapp实现聊天消息触,vue3和vue2实现聊天消息触底 scrollTop ,scrollHeight Pc端H5端都适用

uniapp触底SDN链接如下(本人的另一篇博客) uniapp聊天时时触底链接 Pc端 模拟手机端H5 vue3写法 <template><div><!-- 聊天窗体 --><div class"test" id"gundong"><div class"text" v-for"p in chat"&…

Html基础知识学习——兼容问题与解决方法

文章目录 1.计算一定要精确&#xff0c;不要让内容的宽高超出我们设置的宽高&#xff0c;在IE6下内容会撑开设置好的宽高2.元素浮动&#xff0c;宽度需要内容撑开&#xff0c;就给里面的块元素都加浮动3.在ie6.ie7下元素要浮动并在同一行 就给这些元素都加浮动4.注意标签嵌套规…

C# WPF实现动画渐入暗黑明亮主题切换效果

C# WPF实现动画渐入暗黑明亮主题切换效果 效果图如下最近在Bilibili的桌面端看到一个黑白主题切换的效果感觉,挺有意思。于是我使用WPF尝试实现该效果。 主要的切换效果,基本实现不过还存在一些小瑕疵,比如字体等笔刷不能跟随动画进入进行切换。因为Bilibili的客户端是用el…