一文理解ssh,ssl协议以及应用
在使用基于密钥的认证方式的时候,私钥的位置一定要符合远程服务器规定的位置,否则找不到私钥的位置会导致建立ssh连接失败
SSH 全称是 “Secure Shell”,即安全外壳协议。
它是一种网络协议,用于在不安全的网络中安全地进行远程登录和其他网络服务。SSH 通过加密机制和认证机制,能够防止网络通信中的信息泄露、中间人攻击等安全威胁。
- 加密机制
- SSH 采用了多种加密算法来确保数据传输的安全性。例如,它可以使用对称加密算法(如 AES)来加密传输的数据,同时利用非对称加密算法(如 RSA 或 ED25519)来进行密钥交换。在数据传输过程中,通信双方会协商出一个对称加密密钥,然后使用这个密钥对数据进行加密和解密,从而保证数据在网络中的保密性。
- 认证机制
- 基于密码的认证:这是比较常见的一种方式,用户在登录远程系统时,通过输入用户名和密码来进行身份认证。不过这种方式相对安全性稍低,因为密码可能会被窃取或破解。
- 基于**密钥**的认证:如前面在 Git SSH 认证过程中所介绍的,用户生成一对公私钥,将公钥放置在远程服务器上,通过私钥来进行身份认证。这种方式更加安全,因为私钥只要妥善保管,就很难被他人获取和冒用。
- 其他认证方式:还包括基于主机的认证等方式。SSH 会综合使用这些认证方式来确保只有合法的用户和主机能够建立连接并进行通信。
git的ssh认证过程
- SSH认证过程概述
- 生成密钥对:
- 首先,在本地机器上使用
ssh - keygen
命令生成一对SSH密钥,包括一个私钥(例如<font style="color:#DF2A3F;">id_rsa</font>
)和一个公钥(例如<font style="color:#DF2A3F;">id_rsa.pub</font>
)。私钥需要妥善保管在本地,而公钥可以发送到远程服务器进行身份验证。这个过程就像是制作了一把锁(私钥)和对应的钥匙(公钥)。
- 首先,在本地机器上使用
- 添加公钥到远程服务器:
- 将本地生成的公钥内容添加到远程服务器(如代码托管平台的服务器)的用户账户设置或仓库相关设置的SSH密钥管理部分。这一步就相当于把钥匙交给了服务器,告诉服务器“持有对应私钥的人是被允许访问的”。
- 发起SSH连接请求:
- 当在本地使用
git
命令(如git clone
、git push
或git pull
)通过SSH协议访问远程仓库(例如git@code.byted.org:repository.git
)时,本地的git
客户端会发起一个SSH连接请求到远程服务器。
- 当在本地使用
- 服务器验证身份:
- 远程服务器收到请求后,会检查发送过来的SSH连接请求中的公钥信息。服务器会查找之前存储的已授权公钥列表,看是否能找到匹配的公钥。如果找到匹配的公钥,服务器会生成一个随机的挑战(challenge),并使用对应的公钥进行加密,然后将加密后的挑战发送回本地客户端。
- 本地响应挑战:
- 本地客户端收到加密后的挑战后,会使用本地保存的私钥进行解密。因为只有拥有正确私钥的客户端才能成功解密这个挑战,这就验证了客户端的身份。解密后的内容会被发送回服务器。
- 服务器确认身份并建立连接:
- 服务器收到客户端返回的解密后的挑战内容,会将其与自己最初发送的挑战进行比较。如果两者一致,服务器就确认客户端的身份是合法的,然后建立SSH连接,允许客户端访问远程仓库相关的操作。
- 生成密钥对:
- 原理深入理解
- 非对称加密原理:
- SSH认证基于非对称加密算法(如RSA或ED25519)。在非对称加密中,密钥对由一个私钥和一个公钥组成。公钥可以公开,任何人都可以用它来加密信息,但只有拥有对应的私钥才能解密这些信息。在SSH认证过程中,这种特性被用来验证客户端的身份,确保只有持有正确私钥的客户端才能成功响应服务器的挑战。
- 安全机制保障:
- 防止中间人攻击:SSH通过在首次连接时将远程服务器的公钥指纹(一种公钥的摘要信息)存储在本地的
known - hosts
文件中来防止中间人攻击。当再次连接时,会检查服务器返回的公钥指纹是否与本地存储的一致。如果不一致,会发出警告,提示可能存在中间人攻击。例如,当你看到“Warning: Permanently added ‘code.byted.org’ (ED25519) to the list of known hosts.”这样的提示,说明你的本地机器正在将服务器的公钥信息添加到已知主机列表中,用于后续连接的安全性验证。 - 私钥权限控制:私钥文件的权限非常关键。如前面提到的,私钥文件应该设置严格的权限(如
0600
),以防止其他用户访问私钥。因为如果私钥被泄露,攻击者就可以伪装成合法用户访问远程资源。所以当权限设置不当(如0755
权限)时,SSH会拒绝使用该私钥进行认证,以保障安全性。
- 防止中间人攻击:SSH通过在首次连接时将远程服务器的公钥指纹(一种公钥的摘要信息)存储在本地的
- 非对称加密原理:
其他ssh认证过程
- 远程服务器管理
- 系统管理:系统管理员使用SSH连接到远程服务器(例如Linux服务器)进行系统维护和管理。他们可以通过SSH登录到服务器,执行命令来安装软件包、配置服务、更新系统等操作。例如,使用
ssh root@server - ip
(假设root
是管理员账户,server - ip
是服务器的IP地址)登录到服务器后,就可以像在本地终端一样执行命令,如yum install - y httpd
(在基于RPM的系统上安装Apache HTTP服务器)或apt - get update && apt - get upgrade
(在Debian或Ubuntu系统上更新软件包)。 - 故障排除:当服务器出现问题时,技术人员可以通过SSH连接到服务器来检查系统日志、进程状态、网络配置等信息,以诊断和解决问题。例如,通过
ssh
登录后,使用tail - f /var/log/messages
命令查看系统日志的实时更新,或者使用ps - aux
命令查看正在运行的进程列表,以确定是否有异常进程导致服务器故障。
- 系统管理:系统管理员使用SSH连接到远程服务器(例如Linux服务器)进行系统维护和管理。他们可以通过SSH登录到服务器,执行命令来安装软件包、配置服务、更新系统等操作。例如,使用
- 文件传输(SFTP和SCP)
- SFTP(SSH File Transfer Protocol):这是**一种基于SSH协议的安全文件传输协议**。用户可以使用SFTP客户端(如命令行的
sftp
命令或图形化的FileZilla等工具)通过SSH连接到远程服务器,在本地和远程系统之间安全地传输文件。例如,使用命令行的sftp user@server - ip
登录到服务器后,可以使用put
命令将本地文件上传到服务器(如put local - file.txt remote - file.txt
),或者使用get
命令从服务器下载文件(如get remote - file.txt local - file.txt
)。 - SCP(Secure Copy Protocol):SCP也是基于SSH的文件传输工具,它在命令行中使用更方便。例如,使用
scp local - file.txt user@server - ip:/remote/directory/
可以将本地文件local - file.txt
复制到远程服务器的/remote/directory/
目录下;使用scp user@server - ip:/remote/file.txt local - directory/
可以将远程服务器上的/remote/file.txt
文件下载到本地的local - directory/
。
- SFTP(SSH File Transfer Protocol):这是**一种基于SSH协议的安全文件传输协议**。用户可以使用SFTP客户端(如命令行的
- 数据库管理(远程数据库访问)
- MySQL数据库管理:数据库管理员可以通过SSH隧道来安全地访问远程MySQL数据库。首先通过SSH连接到服务器,然后在本地机器上配置MySQL客户端,使其通过SSH隧道连接到远程数据库服务器。例如,使用
ssh - L 3306:localhost:3306 user@server - ip
命令建立一个本地端口3306
到远程服务器3306
端口(MySQL默认端口)的SSH隧道。之后,在本地使用MySQL客户端连接到localhost:3306
,就可以像直接连接到本地数据库一样管理远程MySQL数据库。 - 其他数据库类似操作:对于其他数据库(如PostgreSQL、Oracle等)也可以采用类似的**SSH隧道技术**来实现安全的远程访问。通过这种方式,可以在保证数据传输安全的基础上,进行数据库的查询、插入、更新和删除等操作。
- MySQL数据库管理:数据库管理员可以通过SSH隧道来安全地访问远程MySQL数据库。首先通过SSH连接到服务器,然后在本地机器上配置MySQL客户端,使其通过SSH隧道连接到远程数据库服务器。例如,使用
- 容器和云服务管理
- Docker容器管理:在云环境或远程服务器上管理Docker容器时,有时需要通过SSH连接到服务器来执行
<font style="color:#DF2A3F;">docker</font>
命令。例如,通过SSH登录到运行Docker的服务器后,使用docker ps
命令查看正在运行的容器列表,使用docker exec - it container - id /bin/bash
命令进入容器内部的命令行界面,以进行容器内的配置和管理工作。 - 云服务管理:在使用云服务(如亚马逊AWS、谷歌云GCP、微软Azure等)时,用户可能需要通过SSH连接到云服务器实例来进行配置和管理。例如,在AWS EC2实例上,用户可以使用SSH连接到实例,安装和配置Web服务器软件,将应用程序部署到服务器上,以实现基于云的Web应用服务。
- Docker容器管理:在云环境或远程服务器上管理Docker容器时,有时需要通过SSH连接到服务器来执行
与SSL对比
SSL(Secure Sockets Layer)即安全套接层协议,它是一种用于在网络通信中保障数据安全的加密协议。SSL 协议主要应用在诸如网页浏览、电子邮件、即时通讯等各种网络服务场景中,以下是详细介绍:
历史背景与发展
- SSL 协议最初是由网景公司(Netscape)在 1994 年开发的,目的是为了解决互联网通信中的数据安全问题。随着互联网的发展,SSL 协议不断演进,后来被 IETF(互联网工程任务组)标准化为 TLS(Transport Layer Security)协议,从技术上来说,TLS 可以看作是 SSL 的后续版本,但在日常交流中,很多人仍然习惯用 SSL 来指代这种加密通信协议。
工作原理
- 加密机制:
- SSL 采用了多种加密算法来保护数据安全。首先,在 SSL 握手阶段(稍后详细介绍这个阶段),通信双方会协商出一个对称加密密钥,这个密钥用于对后续传输的数据进行加密和解密。例如,常见的对称加密算法有 AES(高级加密标准)。同时,为了安全地交换这个对称加密密钥,SSL 还会使用非对称加密算法,如 RSA(Rivest - Shamir - Adleman)。非对称加密算法使用一对密钥,公钥可以公开用于加密,私钥则由接收方保密用于解密。
- 除了对称和非对称加密,SSL 还会使用消息认证码(MAC)来保证数据的完整性。MAC 可以确保数据在传输过程中没有被篡改,通过对数据和密钥进行特定的运算,生成一个固定长度的认证码,接收方在收到数据后可以使用相同的算法和密钥进行验证。
- 认证机制:
- 服务器认证:在 SSL 通信中,最常见的是服务器认证。服务器会向客户端发送其数字证书,数字证书是由权威的证书颁发机构(CA)颁发的,包含了服务器的公钥和一些身份信息,如服务器的域名等。客户端会验证证书的有效性,包括检查证书是否由信任的 CA 颁发、证书是否过期、证书中的域名是否与实际访问的域名一致等。通过这种方式,客户端可以确认服务器的身份是真实可靠的。
- 客户端认证(可选):在一些安全性要求较高的场景中,也会要求客户端向服务器提供身份认证。客户端认证的方式可以是通过数字证书,也可以是其他方式,如用户名 / 密码组合等。
SSL 协议的工作流程(以浏览器访问网站为例)
- SSL 握手阶段:
- 客户端发起请求:当用户在浏览器中输入一个以 “https://” 开头的网址并请求访问时,浏览器(客户端)会向服务器发送一个包含 SSL 协议版本号、加密算法套件列表等信息的请求,告知服务器自己支持的 SSL 通信方式。
- 服务器响应并发送证书:服务器收到请求后,会选择一个双方都支持的加密算法套件,并将自己的数字证书发送给客户端。同时,服务器还会发送一个包含服务器临时公钥的密钥交换信息。
- 客户端验证证书并生成密钥:客户端收到服务器的证书后,会对证书进行验证。如果证书验证通过,客户端会使用证书中的服务器公钥来加密一个随机生成的对称加密密钥(这个密钥将用于后续的数据加密),并将加密后的密钥发送给服务器。同时,客户端还会发送一个经过加密的预主密钥(Pre - Master Secret),这个预主密钥与之前生成的对称加密密钥一起用于生成最终的会话密钥。
- 服务器解密并生成会话密钥:服务器收到客户端发送的加密信息后,使用自己的私钥解密得到对称加密密钥和预主密钥,然后通过一系列的算法与客户端共同生成最终的会话密钥。至此,SSL 握手阶段完成,双方已经协商出了用于数据加密的会话密钥。
- 数据传输阶段:
- 双方使用协商好的会话密钥对数据进行对称加密,然后在网络中传输。例如,当浏览器向服务器发送网页请求数据(如表单数据)时,会使用会话密钥进行加密;服务器返回的网页内容也会使用会话密钥进行加密,这样就保证了数据在传输过程中的保密性。同时,通过消息认证码(MAC)机制来保证数据的完整性,确保数据没有被篡改。
应用场景
- 网站安全访问(HTTPS):这是 SSL 协议最广泛的应用场景。通过在网站服务器上配置 SSL 证书,网站可以从传统的 “http://” 协议升级为 “https://” 协议。当用户访问使用 HTTPS 协议的网站时,浏览器和网站服务器之间的数据传输是加密的,用户的隐私信息(如登录密码、信用卡信息等)得到有效保护。例如,电商网站、银行网站等对安全性要求较高的网站都普遍采用 HTTPS 协议来保障交易安全。
- 电子邮件安全:SSL 协议也可以用于保护电子邮件的传输安全。例如,在使用 POP3(邮局协议第 3 版)或 IMAP(互联网邮件访问协议)接收邮件,以及使用 SMTP(简单邮件传输协议)发送邮件时,可以通过 SSL/TLS 加密来防止邮件内容在传输过程中被窃取或篡改。用户在配置邮件客户端时,可以设置使用 SSL 加密连接,如常见的设置 “SSL/TLS 加密” 选项。
- 虚拟专用网络(VPN):在 VPN 技术中,SSL 协议也发挥着重要作用。SSL - VPN 是一种基于 SSL 协议的 VPN 解决方案,它允许用户通过浏览器或专门的客户端软件,使用 SSL 加密通道连接到企业内部网络或其他受限制的网络。相比传统的 IPsec - VPN,SSL - VPN 具有更好的易用性和兼容性,用户可以在不同的操作系统和设备上方便地建立安全连接。
对比
1. 应用场景
- SSL:
- 主要用于保障网络应用层数据的安全传输,最典型的应用是在Web浏览器和Web服务器之间通过HTTPS(HTTP over SSL/TLS)协议进行安全通信。例如,当你在网上购物输入银行卡信息时,SSL确保这些敏感信息在从浏览器传输到电商服务器过程中的安全。同时,也广泛应用于电子邮件传输(如IMAP、POP3、SMTP协议的SSL加密版本)、部分VPN(SSL - VPN)等场景,重点在于保护不同网络应用中数据传输的保密性和完整性。
- SSH:
- 侧重于提供安全的远程登录和远程命令执行功能。比如系统管理员通过SSH登录到远程服务器进行系统维护、配置管理,开发人员通过SSH连接到代码仓库服务器进行代码的拉取、推送操作等。此外,也可用于基于SSH协议的文件传输(如SFTP和SCP),方便在本地和远程系统之间安全地传输文件。
2. 工作层次
- SSL:
- 工作在传输层(TCP/IP协议栈)之上,应用层之下,对应用层的数据进行加密和认证处理。它可以被视为是为应用层协议(如HTTP、SMTP等)添加了一层安全防护层,使这些应用能够在不安全的网络环境中安全地传输数据。
- SSH:
- 本身是一个完整的协议,主要用于远程登录和远程系统管理等功能,从协议层次上看,它也可以理解为是一种应用层协议,不过其功能更聚焦于远程系统的访问和操作安全。
3. 加密方式
- SSL:
- 采用了对称加密和非对称加密相结合的方式。在SSL握手阶段,通信双方先通过非对称加密(如RSA)交换对称加密密钥,之后使用对称加密算法(如AES)对实际传输的数据进行加密。同时,为确保数据完整性,还会使用消息认证码(MAC)机制。这种方式在保证数据安全的同时,利用对称加密的高效性来提高数据传输效率。
- SSH:
- 同样使用对称加密和非对称加密。例如,在基于密钥的认证方式中,使用非对称加密进行身份认证(通过公私钥对),而在数据传输过程中,也可以使用对称加密来加密传输的数据。不过SSH在具体的加密算法选择和密钥交换细节上与SSL有所不同。
4. 认证方式
- SSL:
- 重点在于服务器认证。在典型的HTTPS通信中,服务器会向客户端(浏览器)发送数字证书,客户端验证证书的合法性,包括证书的颁发机构(CA)是否可信、证书是否过期、证书中的域名与访问的域名是否一致等,以确认服务器身份。在一些双向认证场景下,客户端也可能需要向服务器提供证书进行认证。
- SSH:
- 认证方式更加多样化。可以基于密码进行认证,即用户输入用户名和密码登录远程系统;也可以基于密钥认证,通过公私钥对来验证用户身份;还可以有基于主机的认证等方式。在基于密钥认证时,本地客户端的私钥与远程服务器上存储的公钥进行匹配验证。
相关文章:

一文理解ssh,ssl协议以及应用
在使用基于密钥的认证方式的时候,私钥的位置一定要符合远程服务器规定的位置,否则找不到私钥的位置会导致建立ssh连接失败 SSH 全称是 “Secure Shell”,即安全外壳协议。 它是一种网络协议,用于在不安全的网络中安全地进行远程登…...

电子应用设计方案87:智能AI收纳箱系统设计
智能 AI 收纳箱系统设计 一、引言 智能 AI 收纳箱系统旨在为用户提供更高效、便捷和智能的物品收纳与管理解决方案,通过融合人工智能技术和创新设计,提升用户的生活品质和物品整理效率。 二、系统概述 1. 系统目标 - 实现物品的自动分类和整理…...

BloombergGPT: A Large Language Model for Finance——面向金融领域的大语言模型
这篇文章介绍了BloombergGPT,一个专门为金融领域设计的大语言模型(LLM)。以下是文章的主要内容总结: 背景与动机: 大语言模型(如GPT-3)在多个任务上表现出色,但尚未有针对金融领域的…...

LeetCode - #180 Swift 实现连续数字查询
文章目录 摘要描述SQL 解法Swift 题解代码Swift 题解代码分析核心逻辑关键函数 示例测试及结果测试 1测试 2 时间复杂度空间复杂度总结 摘要 本文将解决如何从日志数据中找出连续出现至少三次的数字。通过 SQL 查询语句结合 Swift 数据库操作,我们将完成这一任务。…...

为什么ip属地一会河南一会江苏
在使用互联网的过程中,许多用户可能会遇到这样一个问题:自己的IP属地一会儿显示为河南,一会儿又变成了江苏。这种现象可能会让人感到困惑,甚至产生疑虑,担心自己的网络活动是否受到了某种影响。为了解答这一疑问&#…...
使用最广泛的FastAPI项目结构推荐,命名规范等
使用最广泛的FastAPI项目结构推荐,命名规范等 一、FastAPI项目结构如下:二、组件管理:使用依赖注入三、命名约定四、建议分层架构的设计五、文档和测试六、版本控制和持续集成七、环境和配置管理工具八、性能优化与权限安全 一、FastAPI项目结…...

[大模型开源]SecGPT 网络安全大模型
模型介绍 SecGPT的愿景是将人工智能技术引入网络安全领域,以提高网络防御的效率和效果。其使命是推动网络安全智能化,为社会提供更安全的数字生活环境。 ① SecGPT开源地址:https://github.com/Clouditera/secgpt② 模型地址:htt…...
android 启动页倒计时页面编写
一、需求和技术 1、实现5,4,3,2,1启动页倒计时 2、倒计时实现使用CountDownTimer 二、activity代码 public class OpenActivity extends AppCompatActivity {private Button in;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanc…...
nuxt3路由及路由拦截
配置 nuxt3没有专门的路由配置文件,是由文件目录自动生成路由 ssr nuxt3会默认所有页面都是服务端渲染,如果需要设置某个页面不走服务端渲染,可以在nuxt.config.js中单独配置 routeRules: {/home: { ssr: false },/spa/**: { ssr: false …...

git版本管理
安装 打开 使用codeup 连接本地仓库和云仓库 找到本地存放代码的位置 单击右键打开git bash 初始化本地库 设置用户签名 显示隐藏文件夹之后才能看到,git文件夹 把这个复制下来 粘贴到bash中 拉取远程仓库的master分支: git pull origin master master分支提交和 dev 分支开…...

382M 雨晨 19045.5247 Win10PE 网络版
文件: YC10PE2025.iso(全内置网络版) 大小: 401473536 字节 修改时间: 2025年1月7日, 星期二, 18 : 40 : 50 MD5: 49E923DCEF86183A908F2D2C9BF07A23 SHA1: 56DF40393DEA9F73733B2A5693658A01F7A2F6C5 CRC32: 3A87F179 https://www.123684.com/s/zEbRVv-…...
在二维数组中列优先存放是怎么进行的
在二维数组中,列优先存放(Column-major order)是一种存储方式,其中数组的列元素在内存中是连续存放的。这意味着,对于一个二维数组 A[m][n],其中 m 是行数,n 是列数,数组的第一列的所…...

Unity【Colliders碰撞器】和【Rigibody刚体】的应用——小球反弹效果
目录 Collider 2D 定义: 类型: Rigidbody 2D 定义: 属性和行为: 运动控制: 碰撞检测: 结合使用 实用检测 延伸拓展 1、在Unity中优化Collider 2D和Rigidbody 2D的性能 2、Unity中Collider 2D…...

CES 2025:ROG打造极致游戏体验
2025年1月7日晚,备受瞩目的CES 2025 ROG新品发布会在万众期待中拉开帷幕。 作为全球领先的电竞和游戏设备制造商,ROG在此次发布会上隆重推出了多款旗舰级新品,包括旗舰专业电竞本ROG枪神9超竞系列、专业电竞本ROG枪神9系列、旗舰游戏本ROG魔霸…...

英伟达 RTX 5090 显卡赋能医疗大模型:变革、挑战与展望
一、英伟达 RTX 5090 与 RTX 4090 技术参数对比 1.1 核心架构与制程工艺 在探讨英伟达 RTX 4090 与 RTX 5090 的差异时,核心架构与制程工艺无疑是最为关键的基础要素,它们从根本上决定了两款显卡的性能上限与应用潜力。 1.1.1 核心架构差异 RTX 4090…...
Windows 11 上配置VSCode 使用 Git 和 SSH 完整步骤
在 Windows 11 上,通过 VSCode 使用 Git 和 SSH 克隆 GitHub 仓库的完整优化步骤如下: 1. 安装必备工具 下载并安装 Git: 访问 Git 官网 下载最新版本。安装时,选择以下选项: Default editor for Git: Use Visual Stud…...

[读书日志]从零开始学习Chisel 第二篇:Scala的变量与函数(敏捷硬件开发语言Chisel与数字系统设计)
第一篇https://blog.csdn.net/m0_74021449/article/details/144887921 2.2 Scala的变量及函数 2.2.1变量定义与基本类型 变量声明 变量首次定义必须使用关键字var或者val,二者的区别是val修饰的变量禁止被重新赋值,它是一个只读的变量。首次定义变量时…...

Unity:删除注册表内的项目记录
然后WinR按键输入regedit 打开注册表 在注册表 HKEY CURRENT USER—>SOFTWARE—>Unity—>UnityEditor—>DefaultCompany —>language_Test 中,删除我们的之前存储的语言环境数据。在 “ 三、文本调用和替换 ” 测试时已经将语言环境存储到注册表中了…...
【记录】东南大学研究生24-25秋季 学位英语考试
上午刚考完学位英语,感觉一般,反正就是能过,但是也不是考的特别好,在备考的过程中的一些资料也感谢很多人的分享,我这边也把24年的期末说明放一份吧 其他ppt和资料github一个大佬整理了,在这里 然后也留下…...

LabVIEW四边形阻抗继电器
基于LabVIEW开发了四边形阻抗继电器,该系统主要应用于电力系统的距离保护中。四边形阻抗继电器在克服短路点过渡电阻的影响及躲避负荷阻抗方面展现出优良的特性。通过LabVIEW图形化编程环境实现的该系统,具备用户友好界面和简便的操作流程,有…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...