热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VRP系统登录配置实战——2

SSH登录当用户通过非安全的网络环境远程登录到交换机时,每次发送数据前,SSH都会自动对数据进行加密,当数据到达目的地时,S

SSH登录

当用户通过非安全的网络环境远程登录到交换机时,每次发送数据前,SSH都会自动对数据进行加密,当数据到达目的地时,SSH自动对加密数据进行解密,以此提供安全的信息保障。除此之外,SSH还提供强大的认证功能,以保护交换机不受诸如DNS和IP欺骗等攻击。

SSH采用客户端—服务器模式。设备支持SSH服务器功能,可以接受多个SSH客户端的连接。同时,设备还支持作为SSH客户端,允许与支持SSH服务器功能的设备建立SSH连接,从而实现从本地设备通过SSH登录到远程设备上。

算法和密钥

 加密和解密都是在密钥的控制下进行的。密钥是一组特定的字符串,是控制明文和密文变换的唯一参数,起到钥匙的作用。通过加密变换操作,可以将明文变换为密文,通过解密变换操作,将密文恢复为明文。


基于密钥的算法通常有两类:对称算法和非对称密钥算法.

非对称密钥算法

非对称密钥算法是指通信的每一端都存在一对密钥,即一个私钥,一个公钥。公钥是公开的,私钥只有合法者拥有,从公钥很难分析出私钥。

非对称密钥算法可以用于加密,也就是用公钥对报文进行加密,然后由拥有私钥的合法者使用私钥对数据进行解密,这样保证数据的机密性。

非对称密钥算法还可以用于签名,比如用户1使用自己的私钥对数据进行签名,然后发给用户2,用户2可以用用户1公钥验证签名,如果签名是正确的,那么就能够确认该数据来源于用户1

RSA(Rivest Shamir Adleman)和DSA(Digital Signature Algorithm,数字签名算法)都是非对称密钥算法,RSA既可以用于加密,又可以用于签名,而DSA只用于签名

SSH实现过程

在整个通讯过程中,为实现SSH认证的安全连接,服务器端与客户端要经历如下五个阶段:

          表1-1 SSH服务器端与客户端建立连接的五个阶段

过程

说明

详细内容

版本号协商阶段

SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本

密钥和算法协商阶段

SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法

认证阶段

SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证

会话请求阶段

认证通过后,客户端向服务器端发送会话请求

交互会话阶段

会话请求通过后,服务器端和客户端进行信息的交互

1.版本号协商阶段

具体步骤如下:

  •              服务器端打开端口22,等待客户端连接。
  •              客户端向服务器端发起TCP初始连接请求&#xff0c;TCP连接建立后&#xff0c;服务器端向客户端发送第一个报文&#xff0c;包括版本标志字符串&#xff0c;格式为SSH&#xff0d;<主协议版本号>.<次协议版本号>&#xff0d;<软件版本号>”&#xff0c;协议版本号由主协议版本号和次协议版本号组成&#xff0c;软件版本号主要是为调试使用。
  •              客户端收到报文后&#xff0c;解析该数据包&#xff0c;如果服务器端的协议版本号比自身的低&#xff0c;且能支持服务器端的版本&#xff0c;就使用服务器端的低版本协议号&#xff0c;否则使用自身的协议版本号。
  •               客户端回应服务器端一个报文&#xff0c;包含了客户端决定使用的协议版本号。服务器端比较客户端发来的版本号&#xff0c;决定是否能同客户端一起工作。
  •              如果协商成功&#xff0c;则进入密钥和算法协商阶段&#xff0c;否则服务器端断开TCP连接。

2.密钥和算法协商阶段

具体步骤如下&#xff1a;

  •              服务器端和客户端分别发送算法协商报文给对端&#xff0c;报文中包含自己支持的公钥算法列表、加密算法列表、MAC&#xff08;Message Authentication Code&#xff0c;消息验证码&#xff09;算法列表、压缩算法列表等。
  •              服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法
  •              服务器端和客户端利用DH交换&#xff08;Diffie-Hellman Exchange&#xff09;算法主机密钥对等参数&#xff0c;生成会话密钥和会话ID

通过以上步骤&#xff0c;服务器端和客户端就取得了相同的会话密钥。对于后续传输的数据&#xff0c;两端都会使用会话密钥进行加密和解密&#xff0c;保证了数据传输的安全性。

进一步的详解&#xff1a;&#xff08;这里注意服务器公钥的作用&#xff09;

     密钥协商阶段

  •             版本协商成功后&#xff0c;服务器向客户端发送一个包&#xff0c;内容为自己的主机公钥&#xff08;host public key&#xff09;&#xff0c;服务器公钥&#xff08;server public key&#xff09;&#xff0c;支持的加密算法&#xff0c;认证算法&#xff0c;协议扩展的标志&#xff0c;还有一个8字节&#xff08;64bits&#xff09;的随机数&#xff08;COOKIE&#xff09;。这个包没有加密&#xff0c;也是明文发送。然后双方开始计算会话ID&#xff08;sessionid&#xff09;。双方使用相同的参数计算出相同的长为16字节的会话ID。计算公式如下。


1-3 会话ID的计算

  •     客户端还要随机生成一个32字节的会话密钥&#xff08;session key&#xff09;&#xff0c;用来加密传输的数据&#xff0c;但不直接把该密钥传给服务器端&#xff0c;而是用该密钥的前16字节与或&#xff08;XOR&#xff09;会话ID16字节&#xff0c;后16字节不变&#xff0c;所得结果按MSB&#xff08;Most Significant Bit&#xff0c;最高位&#xff09;优先排列成一个MP型整数&#xff0c;用模数较小的公钥进行加密&#xff0c;再把结果按MSB优先顺序排列成一个MP型整数&#xff0c;用模数较大的公钥进行加密&#xff0c;如下所示。


1-4 会话密钥的加密&#xff08;图中x单位为字节&#xff09;

  • 其中所得result3即为要传输给对端的加密后的会话密钥&#xff0c;把它和客户端选择的加密算法、服务器传来的8字节COOKIE、自己的协议标志一起发给服务器端。服务器收到这个包含会话密钥信息的消息后&#xff0c;还原出会话密钥。
  • 通过以上步骤&#xff0c;服务器端和客户端就取得了相同的会话密钥。会话时&#xff0c;两端都使用会话密钥进行加密和解密&#xff0c;保证了数据传送的安全。

3.认证阶段

服务器认证客户端具体步骤如下&#xff1a;

  • 客户端向服务器端发送认证请求&#xff0c;认证请求中包含用户名、认证方法、与该认证方法相关的内容&#xff08;如&#xff1a;password认证时&#xff0c;内容为密码&#xff09;
  • 服务器端对客户端进行认证&#xff0c;如果认证失败&#xff0c;则向客户端发送认证失败消息&#xff0c;其中包含可以再次认证的方法列表。
  • 客户端从认证方法列表中选取一种认证方法再次进行认证。
  • 该过程反复进行&#xff0c;直到认证成功或者认证次数达到上限&#xff0c;服务器关闭连接为止。

SSH提供两种认证方法&#xff1a;

  • password认证&#xff1a;客户端向服务器发出password认证请求&#xff0c;将用户名和密码加密后发送给服务器&#xff1b;服务器将该信息解密后得到用户名和密码的明文&#xff0c;与设备上保存的用户名和密码进行比较&#xff0c;并返回认证成功或失败的消息。
  • 公钥认证&#xff1a;采用数字签名的方法来认证客户端。目前&#xff0c;设备上可以利用RSADSA两种公共密钥算法实现数字签名客户端发送包含用户名、公共密钥和公共密钥算法的公钥认证请求给服务器端。服务器对公钥进行合法性检查&#xff0c;如果不合法&#xff0c;则直接发送失败消息&#xff1b;否则&#xff0c;服务器利用数字签名对客户端进行认证&#xff0c;并返回认证成功或失败的消息。

  认证阶段

客户端向服务器端发送自己的用户名信息&#xff0c;服务器端启动对该用户进行认证的程序。

SSH提供两种认证方法&#xff1a;PASSWORD认证和RSA认证。

  • PASSWORD认证&#xff1a;客户端向服务器发出PASSWORD认证请求&#xff0c;将用户名和密码加密后发送给服务器&#xff1b;服务器将该信息解密后得到用户名和密码的明文&#xff0c;与设备上保存的用户名和密码进行比较&#xff0c;并返回认证成功或失败的消息。
  • RSA认证&#xff1a;服务器端必须已经配置了客户端的RSA公钥。认证时&#xff0c;客户端发送RSA认证请求和自己的公钥模数给服务器端&#xff0c;服务器进行合法性检查&#xff0c;如果不合法&#xff0c;则直接发送失败消息&#xff0c;否则产生一个32字节的随机数&#xff0c;按上面所讲生成一个MP型整数&#xff0c;并用客户端的公钥加密后向客户端发起一个认证挑战。客户端收到挑战消息后用自己的私钥解密得到MP型整数&#xff0c;用它和会话号&#xff08;session ID&#xff09;生成消息摘要MD5值&#xff0c;把这个16字节的MD5值加密后发送给服务器。服务器接收后还原出MD5值并与它自己计算出的MD5值相比较&#xff0c;如果相同&#xff0c;认证成功&#xff0c;发送成功消息&#xff1b;否则失败&#xff0c;发送失败消息。从这个认证过程中可以看出&#xff0c;只有拥有私钥的人才能登录&#xff0c;其过程如下所示。


4.会话请求阶段

认证通过后&#xff0c;客户端向服务器端发送会话请求。服务器端等待并处理客户端的请求。在这个阶段&#xff0c;客户端的请求被成功处理后&#xff0c;服务器会回应SSH_SMSG_SUCCESS包&#xff0c;SSH进入交互会话阶段&#xff1b;否则回应SSH_SMSG_FAILURE包&#xff0c;表示服务器处理请求失败或者不能识别请求。

5.交互会话阶段

会话请求成功后&#xff0c;连接进入交互会话阶段。在这个模式下&#xff0c;数据被双向传送。客户端将要执行的命令加密后传给服务器端&#xff0c;服务器端接收到报文&#xff0c;解密后执行该命令&#xff0c;将执行的结果加密发还给客户端&#xff0c;客户端将接收到的结果解密后显示到终端上

  •  配置password认证时&#xff0c;SSHusername应与AAA中定义的有效用户名一致&#xff1b;配置公钥认证时&#xff0c;username就是SSH本地用户名&#xff0c;不需要在AAA中配置本地用户。
  •  如果用户配置的缺省认证方式为password&#xff0c;并且采用AAA本地认证&#xff0c;则还需要使用local-user命令在本地数据库中添加用户名和密码。在这种情况下&#xff0c;可以直接使用local-user命令配置的用户名和密码&#xff08;配置service-type为ssh&#xff09;登录SSH服务器&#xff0c;省略掉sshuser命令的配置。
  •  如果用户配置的缺省认证方式为password&#xff0c;并且采用远程认证&#xff0c;如RADIUS认证&#xff0c;则可以直接使用远程服务器上的用户名和密码登录SSH服务器&#xff0c;省略掉ssh user命令的配置。
  •  如果配置为公钥认证方式&#xff0c;则SSH用户登录服务器后可以访问的命令级别可通过userprivilege level命令来配置&#xff0c;且所有使用公钥认证方式的用户可访问的命令级别相同。
  •  如果配置为passwordpassword-publickey认证方式&#xff0c;则SSH用户登录服务器后可以访问的命令级别由AAA来授权&#xff0c;使用passwordpassword-publickey认证方式的不同用户&#xff0c;能够访问的命令级别可以不同。
  •  如果配置为all认证方式&#xff0c;则SSH用户登录服务器后可以访问的命令级别具体由用户是通过password认证还是公钥认证来决定。

如果在SSH服务器端对SSH用户配置的认证方式为password认证&#xff0c;则不需要配置客户端的公钥。

SSH用户采用公钥认证时&#xff0c;需要在服务器端配置客户端的RSADSA主机公钥&#xff0c;以便当客户端登录服务器端时&#xff0c;对客户端进行相应的验证。

采用公钥认证时&#xff0c;需要在服务器端为SSH用户指定对应客户端的公钥。当客户端登录服务器时&#xff0c;服务器端就会根据指定SSH用户对应的公钥对客户端进行认证。

对于已经生成的RSADSA密钥对&#xff0c;可以根据指定格式在屏幕上显示主机公钥或导出主机公钥到指定文件&#xff0c;从而为在远端配置主机公钥做准备。

SSH服务器端采用的认证方式不同&#xff0c;SSH客户端的具体配置内容不同。当客户端不支持首次认证时&#xff0c;SSH客户端还需要配置服务器端的公钥&#xff0c;以便客户端对连接的服务器进行认证。

采用SSH客户端软件时的配置

配置任务

说明

详细配置

生成客户端密钥

    当采用Password认证方式时&#xff0c;不选

    当采用公钥认证方式时&#xff0c;必选

指定服务器IP地址

必选

选择远程连接协议为SSH

必选

选择SSH版本

必选

以口令方式建立SSH连接

     当采用Password认证方式时&#xff0c;必选

     当采用公钥认证方式时&#xff0c;不选

以公钥认证方式建立SSH连接

      当采用Password认证方式时&#xff0c;不选

      当采用公钥认证方式时&#xff0c;必选

 













SSH客户端软件有很多&#xff0c;例如PuTTYOpenSSH等。SSH客户端要与服务器建立连接&#xff0c;

需要做如下配置&#xff1a;

  •  选择远程连接协议为SSH。通常客户端可以支持多种远程连接协议&#xff0c;如TelnetRloginSSH等。要建立SSH连接&#xff0c;必须选择远程连接协议为SSH
  •  选择SSH版本。由于设备目前支持的版本是SSH2.0版本&#xff0c;客户端可以选择2.02.0以下版本。
  •  指定私钥文件。如果在服务器端配置了SSH用户采用公钥认证&#xff0c;并为SSH用户指定了公钥&#xff0c;就必须在客户端指定与公钥对应的私钥文件RSADSA密钥对是由客户端软件附带的工具生成

 

设置SSH客户端是否支持首次认证

当设备作为SSH客户端和服务器端连接时&#xff0c;可以设置SSH客户端对访问的SSH服务器是否支持首次认证。

  • 如果支持首次认证&#xff0c;是指当SSH客户端首次访问服务器端&#xff0c;而客户端没有配置服务器端的主机公钥时&#xff0c;用户可以选择继续访问该服务器端&#xff0c;并在客户端保存该主机公钥&#xff1b;当用户下次访问该服务器端时&#xff0c;就以保存的主机公钥来认证该服务器。
  • 如果不支持首次认证&#xff0c;则当客户端没有配置服务器端的主机公钥时&#xff0c;客户端将拒绝访问该服务器。用户必须事先将要访问的服务器端的主机公钥配置在本地&#xff0c;同时指定要连接的服务器端的主机公钥名称&#xff0c;以便客户端对连接的服务器进行认证。

DH算法描述


上图中&#xff0c;AliceBob通过DH算法生成秘钥K&#xff0c;
其中&#xff1a;

·        g、p是2个非私密数据&#xff1b;

·        a、b是私密数据&#xff1b;

·        A是根据&#xff1a;g、p、a算出来的非私密数据&#xff1b;B是根据&#xff1a;g、p、b算出来的非私密数据&#xff1b;

·        把A从a传到b&#xff0c;根据求K公式&#xff0c;b得到秘钥k&#xff1b;a同理&#xff1b;

注&#xff1a;

·        p是一个大素数。p的位数决定了攻击者破解的难度

·        g则不需要很大&#xff0c;并且在一般的实践中通常是2或者5

1、password认证

客户端配置登录&#xff1a;

点击Open时&#xff0c;出现提示&#xff1a;


点击是&#xff0c;此时服务器端的主机公钥将被保存在putty的缓存中&#xff0c;用以登录信息加密。


添加acl控制&#xff1a;


这里有一点要注意&#xff0c;我配置的vty的ssh登录原先是0 4&#xff0c;而我设置的acl把它指定在vty 0 3上&#xff0c;原来的想法是从任何一台机器都可登录&#xff0c;测试后发现如下规律&#xff1a;

如果acl指定在0 3&#xff0c;那么一开始的登录只能在acl指定的IP地址的主机上登录&#xff0c;直到vty 3登录后&#xff0c;到vty4时&#xff0c;所有机器都可登录。如果acl指定在vty 3 4&#xff0c;那么一开始vty 0 2任何一台机器都可登录&#xff0c;到vty3后&#xff0c;只能在acl指定的ip主机上登录。

就是说用户登录时&#xff0c;vty用户界面的分配是按照编号从小到大的顺序分配的&#xff0c;小的没有分配完&#xff0c;不会分配大的

如上图&#xff0c;acl指定在vty 3 4&#xff0c;在192.168.138.1的主机上可以登录到vty2&#xff0c;再次登录时就无法登录了&#xff0c;因为这时acl起作用。

2、RSA认证



使用puttygen工作生成客户端的主机密钥对&#xff0c;如下&#xff1a;


分别点击save public key 和save private key两个按钮&#xff0c;保存公钥和私钥为rsakey.pub和rsaprivate.ppk两个文件。

使用sshkey工具对公钥进行转换&#xff1a;

点击保存&#xff0c;将转换后的结果保存到文本文件中代用&#xff0c;实际就是上图中中间部分Convert Resoult框中的内容。

在交换机上配置客户端主机密钥对的公钥&#xff1a;

配置客户端登录界面&#xff1a;

主要增加的是在SSH——Auth界面下指定私钥文件。点击open进行登录&#xff0c;如下


与telnet登录界面相比&#xff0c;发现一处不同&#xff0c;就是header login information信息显示的位置不同&#xff0c;telnet是在输入用户名之前就显示了&#xff0c;而ssh是在输入用户名之后显示的。

还有一处&#xff0c;就是display local-user的结果&#xff1a;

ssh用户不属于local-user。

3、DSA认证

下一步将配置客户端的主机公钥到交换机中&#xff0c;正常的配置是先在客户端生成客户端主机密钥对&#xff1a;

対生成的公钥进行转换&#xff0c;变成十六进制格式可在交换机配置界面输入&#xff0c;如果转换成功&#xff0c;那么下一步在交换机上执行

输入完成后&#xff0c;接着

[SSHDSA-dsa-key-code]public-key-code end

[SSHDSA-dsa-public-key]peer-public-key end

[SSHDSA]ssh user dsau1 assign dsa-keyclientdsakey

至此&#xff0c;交换机设置完毕&#xff0c;然后配置客户端&#xff0c;指定私钥&#xff0c;登录即可。

出现的问题是&#xff1a;生成的DSA公钥无法转换成十六进制格式&#xff0c;无法在公钥密码编辑处输入&#xff0c;需要解决DSA公钥转换问题。

 

4、passwor-rsa认证

配置客户端连接选项&#xff0c;主要是要指定客户端的私钥&#xff1a;

查看运行的结果&#xff1a;



增加一级安全设置&#xff0c;使用super password level level cipher password设置一个super密码&#xff0c;把用户的初始级别设成级别较低的值&#xff0c;如1

在登录进行操作&#xff1a;

在以上的配置中&#xff0c;可以随时加上ACL控制策略&#xff0c;方法是先创建策略&#xff0c;如acl 2001&#xff0c;然后在vty界面进行指定&#xff0c;如vty 0 4下使用&#xff1a;acl 2001 inbound


推荐阅读
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 本文详细介绍了在 Android 7.1 系统中调整屏幕分辨率和默认音量设置的方法。针对系统默认音量过大的问题,提供了具体的步骤来降低系统、铃声、媒体和闹钟的默认音量,以提升用户体验。此外,还涵盖了如何通过系统设置或使用第三方工具来优化屏幕分辨率,确保设备显示效果更加清晰和流畅。 ... [详细]
  • 使用 `git stash` 可以将当前未提交的修改保存到一个临时存储区,以便在后续恢复工作目录时使用。例如,在处理中间状态时,可以通过 `git stash` 命令将当前的所有未提交更改推送到一个新的储藏中,从而保持工作目录的整洁。此外,本文还将详细介绍如何解决 `git stash pop` 时可能出现的冲突问题,帮助用户高效地管理代码变更。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
author-avatar
Huiying_Liu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有