第八章 网络安全
1 什么是网络安全
安全通信具有的性质:
- 机密性:只有发送方和希望的接收方能否理解传输的报文内容(发送方加密报文,接收方解密报文)
- 认证(端点鉴别):发送方和接收方需要确认对方的身份
- 报文完整性:发送方、接受方需要确认报文在传输的过程中或者事后没有被改变
- 访问控制和服务的可用性:服务可以接入以及对用户而言是可用的
入侵者能够潜在地执行下列行为:
窃听——监听并记录信道上传输的控制报文和数据报文。
修改、插入或删除报文或报文内容。
伪装:可以在分组的源地址写上伪装的地址
劫持:将发送方或者接收方踢出,接管连接
拒绝服务:阻止服务被其他正常用户使用(e.g,通过对资源的过载使用)
2 密码学原理
对称密钥密码学:发送方和接收方的密钥相同
公开密钥密码学:发送方使用接收方的公钥进行加密,接收方使用自己的私钥进行解密
2.1 对称密钥密码体制
对称密钥密码:Bob和Alice共享一个对称式的密钥KA-B;
e.g:密钥在单码替换加密方法中是替换模式
问题:Bob和Alice如何就这个密钥达成一致呢?
替换密码:将一个事情换成另外一个事情
单码替换密码:将一个字母替换成另外一个字母
明文报文 “ bob , i love you. alice” 变成 “nkn,s gktc wky. mgsbc”
问题:破解这个密码的强度?
理论上26!(1026数量级),根据入侵者所拥有的信息有三种不同的情况
唯密文攻击:入侵者只能得到截取的密文,而不了解明文报文的内容(统计分析有助于唯密文攻击)
已知明文攻击:入侵者知道(明文,密文)的一些匹配
选择明文攻击:入侵者能够选择某一明文报文并得到该明文报文对应的密文形式
DES:Data Encryption Standard,US 加密标准[NIST 1993]
- 56 bit 对称密钥,64 bit明文输入
- 使DES更安全:使用3个key,3重DES运算;密文分组成串技术
初始替换,16 轮一样的函数应用,每一轮使用的不同的48bit密钥,最终替换
AES:Advanced Encryption Standard,新的对称密钥NIST标准(Nov. 2001) 用于替换DES
- 数据128bit成组加密
- 128, 192, or 256 bit keys
- 穷尽法解密如果使用1秒钟破解DES, 需要花149万亿年破解AES
-
块密码
一个循环:一个输入bit影响8个输出bit
多重循环:每个输入比特影响所有的输出bit
块密码:DES, 3DES, AES -
密码块链接(CBC)技术
- 密码块:如果输入块重复,将会得到相同的密文块(潜在地猜出其明文)
- 密码块链:异或第i轮输入m(i)与前一轮的密文 c(i-1)
- c(0) 明文传输到接收端
- c(0) 明文传输到接收端
2.2 公开密钥加密
对比:
对称密钥密码学:需要发送方和接收方对共享式对称密钥达成一致;Q:但是他们如何第一次达成一致(特别是他们永远不可能见面的情况下)?
公开密钥密码学:完全不同的方法[Diffie-Hellman76, RSA78];发送方和接收方无需共享密钥;一个实体的公钥公诸于众;私钥只有他自己知道
- RSA
生产RSA的公钥和私钥:
- 选择2个很大的质数p, q. (RSA 实验室推荐,p 和q 的乘积为1024 比特的数量级)
- 计算n= pq和 z = (p-1)(q-1)
- 选择一个e(要求e<n)和z 没有一个公共因子,互素
- 选择d使得ed-1正好能够被z整除. (也就是:ed mod z = 1 )
- 公钥(n,e),私钥(n,d)
加密解密:
0.给定按照上述算法得到的(n,e) 和(n,d)
1.加密一个bit模式, m, 如此计算:c = me mod n ( me除以n的余数)
2.对接收到的密文c解密,如此计算:m = cd mod n ( ce除以n的余数)
m = (m e mod n) d mod n
证明:
一个有用的数论定理:如果p,q都是素数,n = pq, 那么:
3 报文完整性和数字签名
3.1 密码散列函数
-
散列函数以m 为输入,并计算得到一个称为散列的固定长度的字符串 H(m)
-
密码散列函数具有下列附加性质:
- 找到任意两个不同的报文x和y使得H(x)= H(y),在计算上是不可能的。(不严格的说,这种性质就意味着入侵者在计算上不可能用其他报文替换散列函数保护的报文)
- 找到任意两个不同的报文x和y使得H(x)= H(y),在计算上是不可能的。(不严格的说,这种性质就意味着入侵者在计算上不可能用其他报文替换散列函数保护的报文)
-
举例:Internet校验和(弱的散列函数)
Internet 校验和拥有一些散列函数的特性:- 产生报文m的固定长度的摘要(16-bit sum)
- 多对1的
- 但是给定一个散列值,很容易计算出另外一个报文具有同样的散列值
因此为了安全起见,需要比校验和更为强大的散列函数。如MD5散列算法(通过4步过程计算得到128比特的散列)[RFC1321]、安全散列算法SHA-1(生成一个160比特的报文摘要)[FIPS 1995]
3.2 报文鉴别码
- 如何执行报文完整性:
- Alice生成报文m并计算散列H(m)(例如使用SHA-1)
- 然后Alice 将H(m)附到报文m上,生成 一个扩展报文 (m,H(m)) , 并将该扩展报文发给Bob
- Bob接到一个扩展报文( m ,H(m)) 并 计算H( m ) 。如果H ( m ) = h , Bob得到结论:一切正常。
- 这种方法存在明显缺陷。Trudy能够生成虚假报文m’ ,在其中声称她是Alice,计算出H(m’)并发送给Bob(m’,H(m’))。Bob无法分辨这种行为
- 因此为了执行报文完整性,除了使用密码散列函数,还需有共享密钥s。也被称为鉴别密钥。
- Alice生成报文m,用s级联m生成m + s,并计算散列H(m+s)。H(m+s)被称为报文鉴别码(MAC)。
- 然后Alice将MAC附加到报文m上,生成扩展报文(m,H(m+s)),并将该扩展报文发送给Bob。
- Bob接收到一个扩展报文(m,h),由于知道s,计算出报文鉴别码H(m+s)。如果H(m+s) = h。Bob得到结论:一切正常。
3.3 数字签名
- 发送方(Bob) 数字签署了文件, 前提是他(她)是文件的拥有者/创建者.
- 可验证性,不可伪造性,不可抵赖性
- 谁签署:接收方(Alice)可以向他人证明是Bob, 而不是其他人签署了这个文件(包括Alice)
- 签署了什么:这份文件,而不是其它文件
简单的对m的数字签名:Bob使用他自己的私钥对m进行了签署,创建数字签名KB-(m)
对长报文进行公开密钥加密算法的实施需要耗费大量的时间
- 对m使用散列函数H,获得固定长度的报文摘要H(m).
散列函数的特性:多对1;结果固定长度;给定一个报文摘要x, 反向计算出原报文在计算上是不可行的x = H(m)
公钥认证
对称密钥问题:相互通信的实体如何分享对称式的密钥?
解决办法:trusted key distribution center (KDC) 在实体之间扮演可信赖中介的角色
公共密钥问题:当Alice获得Bob的公钥(from web site, e-mail, diskette),她如何知道就是Bob的public key, 而不是Trudy的?
解决办法:可信赖的certification authority (CA)
- KDC
- Alice, Bob 需要分享对称式密钥.
- KDC:服务器和每一个注册用户都分享一个对称式的密钥(many users)
- Alice, Bob在和KDC通信的时候,知道他们自己的对称式密钥KA-KDCKB-KDC.
Q: KDC如何使得Bob和Alice在和对方通信前,就对称式会话密钥达成一致?
- Certification Authorities
- Certification authority (CA): 将每一个注册实体E和他的公钥捆绑.
- E (person, router) 到CA那里注册他的公钥.
- E 提供给CA,自己身份的证据“proof of identity”
- CA创建一个证书,捆绑了实体信息和他的公钥.
- Certificate包括了E的公钥,而且是被CA签署的(被CA用自己的私钥加了密的)–CA说“this is E’s public key”
- 当Alice需要拿到Bob公钥
- 获得Bob的证书certificate (从Bob或者其他地方).
- 对Bob的证书,使用CA的公钥来验证
- 证书包括:
- 串号(证书发行者唯一)
- 证书拥有者信息,包括算法和密钥值本身(不显示出来)
- 根证书:根证书是未被签名的公钥证书或自签名的证书
- 拿到一些CA的公钥
- 渠道:安装OS自带的数字证书;从网上下载,你信任的数字证书
- 信任树:
- 信任根证书CA颁发的证书,拿到了根CA的公钥(信任了根)
- 由根CA签署的给一些机构的数字证书,包含了这些机构的数字证书
- 由于你信任了根,从而能够可靠地拿到根CA签发的证书,可靠地拿到这些机构的公钥
4 端点鉴别
- 端点鉴别就是一个实体经过计算机网络向另一个实体证明其身份的过程。
- 鉴别应当在报文和数据交换的基础上,作为某鉴别协议的一部分独立完成。
- 鉴别协议通常在两个通信实体运行其他协议(如可靠数据传输协议、路由选择信息交换协议、电子邮件协议)之前运行。
-
鉴别协议ap1.0
在网络上Bob看不到Alice, 因此Trudy可以简单地声称她是Alice -
鉴别协议ap2.0
Trudy生成一个IP数据报并在IP数据报中填入Alice的周知IP地址,再通过链路层协议将生成的数据报发送到第一跳路由。(Trudy生成一个分组,包括伪造的Alice的地址) -
鉴别协议ap3.0
重放攻击playback attack:Trudy记录Alice的分组,然后向Bob重放 -
鉴别协议ap3.1
Alice 说“我是Alice” ,而且传送她的加密之后的密码来证明
Trudy记录,重放仍然有效 -
鉴别协议ap4.0
目标:避免重放攻击
不重数( Nonce):一个协议的生存期只用一次的数®
ap4.0:为了证明Alice的活跃性,Bob发送给Alice一个不重数 R. Alice 必须返回加密之后的R,使用双方约定好的key -
鉴别协议ap5.0
ap4.0 需要双方共享一个对称式的密钥,是否可以通过公开密钥技术进行认证呢?
ap5.0:使用nonce,公开密钥加密技术
5 安全电子邮件
5.1 安全电子邮件概述
Alice 需要发送机密的报文m 给Bob
- Alice产生随机的对称密钥 KS;使用KS对报文加密(为了效率);对KS使用Bob的公钥进行加密;发送KS(m) 和KB(KS) 给Bob.
- Bob使用自己的私钥解密 KS;使用 KS解密 KS(m) 得到报文
Alice 需要提供源端的可认证性和报文完整性
- Alice 数字签署文件;发送报文(明文)和数字签名
Alice 需要提供机密性,源端可认证性和报文的完整性
- Alice 使用了3个keys:自己的私钥,Bob的公钥, 新产生出的对称式密钥
5.2 PGP
- Internet e-mail加密方案,事实上的标准
- 使用前面讲述的:对称密钥加密,公开密钥加密,散列函数和数字签名(使用MD5或SHA来计算报文摘要,使用CAST、三重DES或IDEA进行对称密钥加密,使用RSA进行公开密钥加密)
- 能够提供机密性,源端的可认证性和报文完整性.
- 发明者Phil Zimmerman,是3年的犯罪调查的目标
6 使TCP连接安全:TLS
- 为使用SSL服务的、基于TCP的应用提供传输层次的安全性
e.g.在WEB的浏览器和服务器之间进行电子商务的交易(https) - 所提供的安全服务:
- 服务器的可认证性,数据加密,客户端的可认证性(可选)
- 服务器的可认证性,数据加密,客户端的可认证性(可选)
6.1 宏观概述
SSL 3个阶段
- 握手
Bob 和Alice建立TCP连接
通过CA签署的证书认证Alice的身份
创建,加密(采用Alice的公钥),传输主密钥给Alice(不重数交换没有显示)
- 密钥导出
Alice, Bob使用共享的MS产生4个keys:
EB: Bob->Alice 数据加密key;
EA: Alice->Bob数据加密key;
MB: Bob->Alice MAC(报文鉴别编码)key;
MA: Alice->Bob MAC key
加密和MAC算法在Bob, Alice之间协商
为什么要4个keys?因为更安全
- 数据传输
6.2 完整描述
TLS握手
- 客户发送它支持的密码算法的列表,连同一个客户的不重数。
- 从该列表中,服务器选择一种对称算法(例如AES ) 、一种公钥算法(例如具有特定密钥长度的RSA ) 和一种HMAC算法。它把它的选择以及证书和一个服务器不重数返回给客户。
- 客户验证该证书,提取服务器的公钥,生成一个前主密钥(PMS),用服务器的公钥加密该PMS,并将加密的PMS发送给服务器。
- 使用相同的密钥导出函数(就像TLS标准定义的那样),客户和服务器独立地从PMS和不重数中计算出主密钥(M S) 。然后该MS 被切片以生成两个密码和两个HMAC 密钥。
此外,当选择的对称密码应用于CBC(例如3DES 或AES ) , 则两个初始化向量(Initialization Vector, IV)也从该MS获得,这两个IV分别用于该连接的两端。自此以后,客户和服务器之间发送的所有报文均被加密和鉴别(使用HMAC)。 - 客户发送所有握手报文的一个HMAC。
- 服务器发送所有握手报文的一个HMAC。
最后两个步骤使握手免受篡改危害。
在TLS中,不重数用于防御“连接重放”,而序号用于防御在一个进行中的会话中重放个别分组。
连接关闭
在某个时刻,Bob或者Alice 将要终止TLS 会话。
一个方法是让Bob 通过直接终止底层的TCP 连接来结束该TLS 会话,这就是说,通过让Bob 向Alice 发送一个TCP FIN 报文段。
但是这会为截断攻击创造条件,Trudy 再一次介入一 个进行中的TLS会话中,并用TCP FIN过早地结束了该会话。如果Trudy这样做的话, Alice将会认为她收到了Bob的所有数据,而实际上她仅收到了其中的一部分。
对这个问题的解决方法是,在类型字段中指出该记录是否是用于终止该TLS会话的。(尽管TLS类 型是以明文形式发送的,但在接收方使用了记录的HMAC对它进行了鉴别。)通过包括这样一个字段,如果Alice在收到一个关闭TLS记录之前突然收到了一个TCP FIN, 她可能知道正在进行着某些难以解释的事情。
7 网络层安全性:IPsec和虚拟专用网
7.1 IPsec和虚拟专用网
- 网络层次的机密性:
- 发送端主机对IP数据报中的数据进行加密
- 数据:TCP或者UDP的段;ICMP和SNMP 报文
- 网络层次的可认证性
- 目标主机可以认证源主机的IP地址
- 2个主要协议
- 认证头部(AH)协议
- 封装安全载荷encapsulation security payload (ESP) 协议
- 不管AH 还是ESP,源和目标在通信之前要握手
- 创建一个网络层次的逻辑通道:安全关联security association (SA)
- 每一个SA 都是单向
- 由以下元组唯一确定:安全协议(AH or ESP);源IP地址;32-bit连接ID
7.2 AH协议和ESP协议
- 鉴别首部(Authentication Header,AH )协议
- 提供源端的可认证性,数据完整性,但是不提供机密性
- 在IP头部和数据字段之间插入AH的头部
- 协议字段:51
- 中间的路由器按照常规处理这个数据报
- AH 头部包括
- 连接ID
- 认证数据:对原始数据计算报文摘要,使用源端的私钥进行数字签名
- 下一个字段:定义了数据的类型(e.g., TCP, UDP,ICMP)
- 封装安全性载荷(ESP)协议
- 提供机密性,主机的可认证性,数据的完整性
- 数据和ESP尾部部分被加密
- next header字段在ESP尾部
- ESP 认证的头部与AH类似
- 协议号= 50
7.3 安全关联
- 从源实体向目的实体发送IPsec数据报之前,源和目的实体创建了一个网络层的逻辑连接。这个逻辑连接称为安全关联(Security Association,SA )。
- 一个 SA 是一个单工逻辑连接也就是说,如果两个实体要互相发送安全数据报,则需创建两个SA,每个方向一个。
路由器R1需要维护的SA的状态信息- SA的32比特的标识符(称为安全参数索引SPI)
- SA的初始接口(此例中为200.168.1.100)和SA的目的接口(此例中为193.68.2.23)
- 将使用的加密类型(如具有CBC的3DES)
- 加密密钥
- 完整性检查的类型(如具有MD5的HMAC)
- 鉴别密钥
- 一个IPsec实体在它的安全关联数据库SAD中存储其所有SA的状态信息,SAD是实体操作系统内核中的一个数据结构
7.4 IPsec数据报
- IPsec有两种分组形式:隧道模式和运输模式
- 分析图8-28场景的IPsec字段。
假设路由器R1接收到一个来自主机172.16.1.17(在总部网络中)的普通IPv4数据报,该分组的目的地是主机172.16.2.48(在分支机构网络中)。路由器R1使用下列方法将这个“普通IPv4数据报”转换成一个IPsec数据报:- 在初始IPv4数据报(它包括初始首部字段)后面附上一个“ESP尾部”字段。
- 使用算法和由SA规定的密钥加密该结果。
- 在这个加密量的前面附加上一个称为“ESP首部”的字段,得到的包称为“enchilada"
- 使用算法和由SA规定的密钥生成一个覆盖整个enchilada的鉴别MAC。
- 该MAC附加到enchilada的后面形成载荷。
- 最后,生成一个具有所有经典IPv4首部字段(通常共20字节长)的全新1P首部, 该新首部附加到载荷之前。
7.5 IKE:IPsec中的密钥管理
- 大型的且地理上分散的部署要求一个自动的机制来生成SA。
- IPsec使用因特网密钥交换IKE协议来实现这个机制
- IKE应用两个阶段实现
- 在报文的第一次交换期间,两侧使用Diffie-Hellman在路由器之间生成一个双向的IKE SA
- 在报文的第二次交换期间,两侧通过对其报文签名而透漏了他们的身份。
8 实现安全的无线局域网和4G/5G蜂窝网络
8.1 802.11(wifi)无线局域网中的鉴别和密钥协商
希望802.11网络解决的问题:
- 相互鉴别:在允许移动设备完全连接到接入点并向远程主机发送数据报之前,网络通过需要首先对设备进行鉴别(验证连接到网络的移动设备的身份,并检查该设备的访问权限),同样,移动设备需要对它所连接的网络进行鉴别。
- 加密:在实践中使用对称密钥加密,因为加密和解密必须高速执行。
AP:鉴别服务器,负责对移动设备进行鉴别,通常会为网络中的所以所有AP提供鉴别服务
WPA的核心是一个四次握手协议
EAP:可扩展鉴别协议,定义了在移动设备和鉴别服务之间交互的简单请求/响应模式中使用的端到端报文格式,并根据WPA2进行认证
8.2 4G/5G蜂窝网络中的鉴别和密钥协商
9 运行安全:防火墙和入侵
9.1 防火墙
- 防火墙:将组织内部网络和互联网络隔离开来,按照规则允许某些分组通过(进出),或者阻塞掉某些分组
- 防火墙的作用:
- 阻止拒绝服务攻击:SYN flooding: 攻击者建立很多伪造TCP链接,对于真正用户而言已经没有资源留下了
- 阻止非法的修改/对非授权内容的访问:e.g., 攻击者替换掉CIA的主页
- 只允许认证的用户能否访问内部网络资源:(经过认证的用户/主机集合)
- 2种类型的防火墙:网络级别:分组过滤器(有状态,无状态);应用级别:应用程序网关
- 分组过滤
- 内部网络通过配置防火墙的路由器连接到互联网上
- 路由器对分组逐个过滤,根据以下规则来决定转发还是丢弃:
- 源IP地址,目标IP地址
- TCP/UDP源和目标端口
- ICMP报文类别
- TCP SYN 和ACK bits
- 分组过滤-无状态
- 例1:阻塞进出的数据报:只要拥有IP协议字段= 17,而且源/目标端口号= 23。(所有的进出UDP流以及telnet 连接的数据报都被阻塞掉)
- 例2:阻塞进入内网的TCP段:它的ACK=0(阻止外部客户端和内部网络的主机建立TCP连接,但允许内部网络的客户端和外部服务器建立TCP连接)
ACL( Access Control Lists)规则的表格,top –bottom应用到输入的分组: (action, condition) 对
- 有状态分组过滤
- 无状态分组过滤根据每个分组独立地检查和行动
- 有状态的分组过滤联合分组状态表检查和行动
- ACL增强:在允许分组之前需要检查连接状态表
应用程序网关
- 根据应用数据的内容来过滤进出的数据报,就像根据IP/TCP/UDP字段来过滤一样
- 检查的级别:应用层数据
- Example:允许内部用户登录到外部服务器,但不是直接登录
- 1.需要所有的telnet用户通过网关来telnet
- 2.对于认证的用户而言,网关建立和目标主机的telnet connection ,网关在2个连接上进行中继
- 3.路由器过滤器对所有不是来自网关的telnet的分组全部过滤掉
防火墙和应用程序网关的局限性
- IP spoofing:路由器不知道数据报是否真的来自于声称的源地址
- 如果有多个应用需要控制,就需要有多个应用程序网关
- 客户端软件需要知道如何连接到这个应用程序
- e.g., 必须在Web browser中配置网络代理的Ip地址
- 过滤器对UDP段所在的报文,或者全过或者全都不过
- 折中: 与外部通信的自由度,安全的级别
- 很多高度保护的站点仍然受到攻击的困扰
9.2 入侵检测系统
-
分组过滤:
- 对TCP/IP头部进行检查
- 不检查会话间的相关性
-
IDS: intrusion detection system
- 深入分组检查:检查分组的内容(e.g., 检查分组中的特征串已知攻击数据库的病毒和攻击串
- 检查分组间的相关性,判断是否是有害的分组,端口扫描、网络映射、DoS攻击
-
multiple IDSs: 在不同的地点进行不同类型的检查
-
Internet 安全威胁:映射
- 在攻击之前:“踩点”–发现在网络上实现了哪些服务
- 使用ping来判断哪些主机在网络上有地址
- 端口扫描:试图顺序地在每一个端口上建立TCP连接(看看发生了什么)
- nmap (http://www.insecure.org/nmap/) mapper: “network exploration and security auditing”
-
Internet 安全威胁:映射对策
- 记录进入到网络中的通信流量
- 发现可疑的行为(IP addresses, 端口被依次扫描)
-
Internet 安全威胁:分组嗅探
- 广播式介质
- 混杂模式的NIC获取所有的信道上的分组
- 可获取所有未加密的数据(e.g. passwords)
- e.g.: C 嗅探B的分组
-
Internet 安全威胁:分组嗅探的对策
- 机构中的所有主机都运行能够监测软件,周期性地检查是否有网卡运行于混杂模式
- 每一个主机一个独立的网段(交换式以太网而不是使用集线器)
-
Internet 安全威胁:IP Spoofing欺骗
- 可以有应用进程直接产生“raw” IP分组, 而且可以在IP源地址部分直接放置任何地址
- 接收端无法判断源地址是不是具有欺骗性的
- e.g. C 伪装成B
-
Internet 安全威胁IP Spoofing:入口过滤
- 路由器对那些具有非法源地址的分组不进行转发
(e.g., 数据报的源地址不是路由器所在的网络地址) - 很好,但是入口过滤不能够在全网范围内安装
- 路由器对那些具有非法源地址的分组不进行转发
-
Internet 安全威胁Denial of service (DOS)
- 产生的大量分组淹没了接收端
- Distributed DOS (DDOS): 多个相互协作的源站淹没了接收端
- e.g., C 以及远程的主机SYN-attack A
-
Internet 安全威胁Denial of service (DOS): 对策
- 在到达主机之前过滤掉这些泛洪的分组(e.g., SYN) : throw out good with bad
- 回溯到源主机(most likely an innocent, compromised machine)
相关文章:
第八章 网络安全
1 什么是网络安全 安全通信具有的性质: 机密性:只有发送方和希望的接收方能否理解传输的报文内容(发送方加密报文,接收方解密报文)认证(端点鉴别):发送方和接收方需要确认对方的身…...
开源 python 应用 开发(一)python、pip、pyAutogui、python opencv安装
最近有个项目需要做视觉自动化处理的工具,最后选用的软件为python,刚好这个机会进行系统学习。短时间学习,需要快速开发,所以记录要点步骤,防止忘记。 链接: 开源 python 应用 开发(一&#x…...
CMCC RAX3000M nand版 OpenWrt 可用空间变小的恢复方法
文章目录 问题背景尝试一、通过 Tftpd64 重新刷写 initramfs-recovery 镜像 (不成功)尝试二、重新分配 ubi 卷(此操作存在一定的危险,请查阅相关资料,避免影响到核心分区) 问题背景 CMCC RAX3000M Nand 版…...
云函数调测、部署及日志查看
1、调试云函数 业务函数开发完成后,需要验证函数代码的正确性,DevEco Studio工具支持本地调用和远程调用两种形式的调试函数方法,首先来看看通过本地调用方式调试函数。 1)通过本地调用方式调试云函数 为了验证函数的正确性以及…...
逆向某物 App 登录接口:还原 newSign 算法全流程
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ newSign 参数分析 通过 Hook Java 层加密算法得到 newSign 参数相关信息如下: 具体参考:逆向某物 App 登录接口:抓包分析…...
2140、解决智力问题
题目 解答 正向不好做,反向遍历。 定义:dp[i] [i,n)的分数 初始化:dp[n]0 递推:dp[i]max(dp[i1],questions[i][0]dp[iquestions[i][1]1]) 如果越界了,就截断到dp[n] 最后return dp[0]即可 class Solution { publ…...
肖臻《区块链技术与应用》第六讲:比特币网络
一、分层架构:应用层之下的P2P网络 比特币并非凭空运作,它的协议运行在互联网的应用层之上。而在其底层,支撑整个系统的是一个对等网络(Peer-to-Peer, P2P)。可以这样理解: 应用层 (Application Layer): …...
(C++)素数的判断(C++教学)(C语言)
源代码: #include <iostream> using namespace std;int fun(int num){if(num<1){return 1;}if(num%20){return 0;}else{return 2;} }int main(){while (1){int y0;int num0;cout<<"请输入一个整数:\n";cin>>num;yfun(nu…...
openai-agents实现input_guardrails
目录 版本模块引入自定义LLM模型input_guardrail设置main函数 代码: input_guardrails.ipynb 版本 import agents print(agents.__version__)0.0.19模块引入 from __future__ import annotationsfrom pydantic import BaseModelfrom agents import (Agent,Guardr…...
在高数中 导数 微分 不定积分 定积分 的意义以及联系
在高等数学中,导数、微分、不定积分、定积分是微积分的核心概念,它们既有明确的定义和几何/物理意义,又相互关联。下面分别说明它们的意义,并总结它们之间的联系。 导数的意义 定义: 函数 y f(x) 在点 x 处的导数定义…...
Linux系统基本操作指令
Linux系统基本操作指令 文章目录 Linux系统基本操作指令一、介绍二、基础设置2.1 设置ubuntu与window的共享目录2.2 ubuntu系统简单介绍 三、Linux命令及工具介绍3.1 目录管理命令(功能,格式,参数,系统参数)3.2 文件操作命令 四、网络命令4.1…...
「Linux文件及目录管理」vi、vim编辑器
知识点解析 vi/vim编辑器简介 vi:Linux默认的文本编辑器,基于命令行操作,功能强大。vim:vi的增强版,支持语法高亮、多窗口编辑、插件扩展等功能。vi/vim基本模式 命令模式:默认模式,用于移动光标、复制、粘贴、删除等操作。插入模式:按i进入,用于输入文本。末行模式:…...
等等等等等等
欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。 …...
JAVA集合篇--深入理解ConcurrentHashMap图解版
一、前言 在Java并发编程中,线程安全的Map实现一直是一个重要话题。虽然我们可以使用Collections.synchronizedMap()或者HashTable来获得线程安全的Map,但它们的性能在高并发场景下往往不尽人意。ConcurrentHashMap作为Java并发包中的重要组件࿰…...
Python嵌套循环
一、前言 在 Python 编程中,嵌套循环(Nested Loops) 是指在一个循环的内部再嵌套另一个循环。这种结构常用于处理多维数据结构(如二维数组、矩阵)、遍历组合数据、图形绘制等场景。 虽然嵌套循环在逻辑上更复杂&…...
linux编译安装nginx
1.到官网(nginx)下载nginx压缩包: 2.以(nginx-1.24.0.tar.gz)为例: 1.上传压缩包至linux服务器: rz 2.解压压缩包nginx-1.24.0.tar.gz: tar -zxvf nginx-1.24.0.tar.gz 3.在安装Nginx之前,需…...
算法-动态规划-钢条切割问题
钢条切割问题是一个经典的动态规划问题,旨在通过切割钢条获得最大收益。以下是详细解释和解决方案: 问题描述 给定长度为 n 的钢条和价格表 p,其中 p[i] 表示长度为 i 的钢条的价格(i 1, 2, ..., n)。目标ÿ…...
Java八股文——系统场景设计
如何设计一个秒杀场景? 面试官您好,设计一个秒杀系统,是对一个工程师综合技术能力的巨大考验。它的核心挑战在于,如何在极短的时间内,应对超高的并发请求,同时保证数据(尤其是库存)…...
如何在FastAPI中玩转GitHub认证,让用户一键登录?
title: 如何在FastAPI中玩转GitHub认证,让用户一键登录? date: 2025/06/22 09:11:47 updated: 2025/06/22 09:11:47 author: cmdragon excerpt: GitHub第三方认证集成通过OAuth2.0授权码流程实现,包含用户跳转GitHub认证、获取授权码、交换访问令牌及调用API获取用户信息四…...
[RPA] 影刀RPA实用技巧
1.给数字添加千分位分隔符 将变量variable的数值(2025.437)添加千分位分隔符,使其变为2,025.437 流程搭建: 关键指令: 2.删除网页元素 将bilibili官网的"动态"图标进行删除 流程搭建: 关键指令: 呈现效果…...
RA4M2开发IOT(7)----RA4M2驱动涂鸦CBU模组
RA4M2开发IOT.7--RA4M2驱动涂鸦CBU模组 概述视频教学样品申请硬件准备参考程序初始化 LSM6DSV16X 传感器初始化单双击识别主程序接口RA4M2接口生成UARTUART属性配置R_SCI_UART_Open()函数原型回调函数user_uart_callback0 ()变量定义更新敲击状态DP同步长按进入配网涂鸦协议解析…...
华为公布《鸿蒙编程语言白皮书》V1.0 版:解读适用场景
6 月 22 日消息,华为现已在其开发者网站上架《鸿蒙编程语言白皮书》V1.0 版本,主要围绕鸿蒙 HarmonyOS 整体框架、适用场景、演进策略、未来愿景四大角度进行阐述,文档访问地址(https://developer.huawei.com/consumer/cn/doc/gui…...
多源异构数据接入与实时分析:衡石科技的技术突破
在数字化转型的浪潮中,企业每天产生的数据量呈指数级增长。这些数据来自CRM系统、IoT设备、日志文件、社交媒体、交易平台等众多源头,格式各异、结构混乱、流速不一。传统的数据处理方式如同在无数孤立的岛屿间划着小船传递信息,效率低下且无…...
多设备Obsidian笔记同步:WebDAV与内网穿透技术高效实现教程
文章目录 前言1. Windows开启Webdav服务2. 客户端测试3. 安装Cpolar内网穿透实现公网访问Webdav4. 同步PC端笔记至WebDav4.1 首先需要在IIS中添加md的格式4.2 在Obsidian中安装第三方插件 5. 同步手机端笔记至WebDav 前言 各位好!在数字化浪潮席卷的当下࿰…...
Linux->进程概念(精讲)
引入:本文会讲到的东西有哪些? 注:要讲就讲清楚,所以从0到懂,目录在右侧 一:冯诺依曼体系结构 1:人物介绍 冯诺依曼是一个伟大的人,他提出了一个体系结构,被命名冯诺依…...
【舞蹈】PC-Dance:姿势可控的音乐驱动舞蹈合成
PC-Dance:姿势可控的音乐驱动舞蹈合成 自监督节奏对齐学习音乐到舞蹈的对齐嵌入-PC-Syn 中,依然怒了一种用于 自适应运动图构建(AMGC)的高效方案,可以基于图的优化效率并保持动作的多样性。 舞蹈合成 整体情况 我们的系统主要由音乐到舞蹈对齐嵌 入网络(M2D-Align)和姿势…...
uni-app项目实战笔记22--图片预览和切换
需求描述: 1、图片预览时,通常需要知道,当前预览的是第几张,总共有多少张图片; 2、当用户左右滑动切换预览图片时,当前预览索引需要随着进行切换。 下面简单介绍下实现过程: 1、在图片列表页…...
[特殊字符] AIGC工具深度实战:GPT与通义灵码如何彻底重构企业开发流程
🔍 第一模块:理念颠覆——为什么AIGC不是“玩具”而是“效能倍增器”? ▍企业开发的核心痛点图谱(2025版) 研发效能瓶颈:需求膨胀与交付时限矛盾持续尖锐,传统敏捷方法论已触天花板…...
华为OD机考-用户调度问题-DP(JAVA 2025B卷)
import java.util.Scanner;public class UserScheduling {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt(); // 用户个数int[][] costs new int[n][3]; // 存储每个用户使用A/B/C策略的系统消耗for (int i 0; i …...
【论文阅读 | CVPR 2024 |Fusion-Mamba :用于跨模态目标检测】
论文阅读 | CVPR 2024 |Fusion-Mamba :用于跨模态目标检测 1.摘要&&引言2.方法2.1 预备知识2.2 Fusion-Mamba2.2.1 架构特征提取与多模态融合(FMB模块)FMB的应用与输出2.2.2 关键组件3.2.2.1 SSCS 模块:浅层跨模态特征交互…...
Python 数据分析与可视化 Day 4 - Pandas 数据筛选与排序操作
🎯 今日目标 掌握 Pandas 中 groupby() 的使用方式学会使用 agg() 方法进行多个聚合掌握 pivot_table() 构建透视表结合分组与排序进行更深入的分析 🧮 一、基本分组统计(groupby) ✅ 分组 单列聚合 df.groupby("性别&qu…...
基于Vue.js的图书管理系统前端界面设计
一、系统前端界面设计要求与效果 (一)系统功能结构图 设计一个基于Vue.js的图书管理系统前端界面。要充分体现Vue的核心特性和应用场景,同时结合信息管理专业的知识。要求系统分为仪表盘、图书管理、借阅管理和用户管理四个主要模块&#x…...
FPGA故障注入测试软件使用指南
有数字芯片之母别称的FPGA,是国内在半导体行业率先取得重大突破的细分赛道,正迎来技术和市场形成共振的黄金发展期。 国内拥有最多的应用设计工程师与新兴从业人员,但到目前为止,还没有一款位流级别的专用EDA软件,服务用户日常应用开发所需的调试验证工作。 第一大厂商赛…...
Oracle 数据库查询:单表查询
作者:IvanCodes 日期:2025年6月22日 专栏:Oracle教程 在 Oracle 数据库操作中,查询数据是最频繁、最核心的操作之一。单表查询,即仅从一个表中检索信息,是所有复杂查询的基础。本笔记将系统梳理单表查询的关…...
【DDD】——带你领略领域驱动设计的独特魅力
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
阿里云CentOS系统搭建全攻略:开启云端技术之旅
前期准备:开启云端征程前的必备事项 在当今数字化时代,云计算已成为企业和开发者构建应用和服务的重要基础设施。阿里云作为全球领先的云计算服务提供商,提供了丰富的云计算产品和服务,其中 CentOS 系统在阿里云上的应用非常广泛…...
Flink图之间流转解析:从逻辑构建到物理执行的深度剖析
在Flink强大的数据处理体系中,Table Connectors实现了与外部结构化数据的高效交互,而Flink作业从代码到实际执行的背后,是各类图结构之间的流转与转换。这些图结构承载着作业的逻辑定义、任务划分与资源调度等关键信息,其流转过程…...
详解Redis数据库和缓存不一致的情况及解决方案
数据库与缓存不一致是分布式系统中常见问题,本质是数据在缓存层和存储层出现版本差异。 一、并发写操作导致不一致(最常见) 场景描述 线程A更新数据库 → 线程B更新数据库 → 线程B更新缓存 → 线程A更新缓存 结果:缓存中存储的…...
【CSS】CSS3媒体查询全攻略
媒体查询教程 媒体查询(Media Queries)是CSS3中引入的强大功能,允许内容根据设备特性(如屏幕尺寸、分辨率、方向等)进行自适应调整。以下是媒体查询的详细教程: 基本语法 media mediatype and (media feature) {/* CSS规则 */ }常用媒体类型 all - 所…...
深入理解Spring的ResponseBodyAdvice接口
什么是ResponseBodyAdvice? ResponseBodyAdvice是Spring框架4.2版本引入的一个非常有用的接口,它允许我们在控制器方法执行后、响应体写入前对响应进行统一处理。这个接口为开发者提供了对返回数据进行统一拦截和修改的能力,是Spring MVC响应处理流程中…...
C++法则5: 在函数调用过程中,具有非引用类型的参数要进行拷贝初始化。
C法则5: 在函数调用过程中,具有非引用类型的参数要进行拷贝初始化。 在 C 中,法则5指的是:当函数参数是非引用类型(即按值传递)时,传递给函数的实参会进行拷贝初始化(copy initializ…...
Python 使用 Requests 模块进行爬虫
目录 一、请求数据二、获取并解析数据四、保存数据1. 保存为 CSV 文件2. 保存为 Excel 文件打开网页图片并将其插入到 Excel 文件中 五、加密参数逆向分析1. 定位加密位置2. 断点调试分析3. 复制相关 js 加密代码,在本地进行调试(难)4. 获取 …...
day039-nginx配置补充
文章目录 0. 老男孩思想-如何提升能力?1. nginx登录认证功能1.1 创建密码文件1.2 修改子配置文件1.3 重启服务 2. nginx处理请求流程3. 配置默认站点4. location 命令5. 案例1-搭建大型直播购物网站5.1 配置本地hosts解析5.2 编写子配置文件5.3 创建相关目录/文件并…...
K8s入门指南:架构解析浓缩版与服务间调用实战演示
目录 前言一、k8s概念理解1、k8s整体架构(1) Master 主节点(2) Node 工作节点(3) Etcd 键值存储数据库 2、Pod被视为最小的部署单元3、k8s的五种控制器类型(1)…...
如何用AI开发完整的小程序<10>—总结
通过之前9节的学习。 如何用Ai制作一款简单小程序的内容就已经都介绍完了。 总结起来就以下几点: 1、搭建开发制作环境 2、创建页面(需要手动) 3、在页面上制作UI效果(让Ai搞,自己懂了后可以自己调) 4…...
Javaweb - 3 CSS
CSS 层叠样式表(Cascading Style Sheets),能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。 简单来说,HTML 搭建一个毛坯房,C…...
【算法】【优选算法】优先级队列
目录 一、1046.最后一块石头的重量二、703. 数据流中的第 K 大元素三、692. 前 K 个⾼频单词四、295. 数据流的中位数 一、1046.最后一块石头的重量 题目链接:1046.最后一块石头的重量 题目描述: 题目解析: 题意就是让我们拿出提供的数组…...
PaddleOCR + Flask 构建 Web OCR 服务实战
1、前言 随着图像识别技术的发展,OCR(光学字符识别)已经成为很多应用场景中的基础能力。PaddleOCR 是百度开源的一个高性能 OCR 工具库,支持中英文、多语言、轻量级部署等特性。 而 Flask 是一个轻量级的 Python Web 框架,非常适合快速构建 RESTful API 或小型 Web 应用…...
openapi-generator-maven-plugin自动生成HTTP远程调用客户端
Java开发中调用http接口的时候,有很多可选的技术方案,比如:HttpURLConnection、RestTemplate、WebClient、Feign、Retrofit、Okhttp等,今天我们来看一个更优的技术方案OpenAPI Generator(http://openapi-generator.tech/) OpenAP…...
ms-swift 部分命令行参数说明
参考链接 命令行参数 — swift 3.6.0.dev0 文档 Qwen Chat num_train_epochs 训练的epoch数,默认为3 假设你有 1000 条训练样本,并且设置了: num_train_epochs 3 这意味着: 模型会完整地遍历这 1000 条数据 3 次。每一次…...