浅谈 MySQL 新的身份验证插件 caching_sha2_password

MySQL8认证插件——Caching SHA-2 Pluggable Authentication MySQL 提供了两个身份验证插件,用于实现用户帐户密码的 SHA-256 哈希:● sha256_password:实现基本的SHA-256身份验证。● caching_sha2_password:实现SHA-256身份验证(如sha256_password),但在服务器端使用缓存以获得更好的性能,并具有更广泛的适用性的附加功能。在 MySQL 8.0 中,caching_sha2_password 是默认的身份验证插件,而不是 MySQL_native_password。 阅读详情
  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。

介绍

从 MySQL 8.0.4 开始,MySQL 默认身份验证插件从 mysql_native_password 改为 caching_sha2_password 。相应地,libmysqlclient 也使用 caching_sha2_password 作为默认的身份验证机制。

起因

在这之前 MySQL 5.6/5.7 使用的默认密码插件是 mysql_native_password。mysql_native_password 的特点是不需要加密的连接。该插件验证速度特别快,但是不够安全,因为,mysql_native_password 使用的是于 SHA1 算法,NIST(美国国家标准与技术研究院)在很早之前就已建议停止使用 SHA1 算法,因为 SHA1 和其他哈希算法(例如 MD5)容易被破解。

其实从 MySQL 5.6 开始就引入了更安全的认证机制:ha256_password 认证插件。它使用一个加盐密码(salted password)进行多轮 SHA256 哈希(数千轮哈希,暴力破解更难),以确保哈希值转换更安全。但是,建立安全连接和多轮 hash 加密很耗费时间。虽然安全性更高,但是验证速度不够快。

改进

MySQL 试图结合俩者的优点。于是在 MySQL-8.0.3 引入了一个新的身份验证插件 caching_sha2_password ,作为sha256_password的代替方案,在sha256_password 的基础上进行了改进补上了短板,既解决安全性问题又解决性能问题。与此同时 sha256_password将退出时代的浪潮。MySQL 预计在未来版本中将其删除。使用 sha256_password 进行身份验证的 MySQL 帐户建议转为 caching_sha2_password。

结果

因为默认身份验证机制的更改,大家在使用 MySQL 8.0 时候出现了很多相关的问题。网上的大部分教程都是教人改回mysql_native_password验证方式 mysql_native_password。但是笔者认为,MySQL 更改默认插件是为了更好的安全性考虑。如果有 MySQL 服务要公网上使用,建议还是尽量使用 caching_sha2_password作为认证插件。

示例:使用旧版本客户端连接时报错:

shell> mysql -uroot -p
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded

具体机制分析

mysql_native_password

mysql_native_password 作为 MySQL 5.6/5.7 的默认密码插件 。其优点是它支持 challenge-response (挑战应答方式),这是非常快的验证机制,无需在网络中发送实际密码,并且不需要加密的连接。

客户端连接MySQL实例时,首先需要从服务器端获得一个20字节的随机数。

此外,mysql_native_password 使用了新的哈希算法进行认证校验。对于用户的原始密码,通过SHA1(SHA1(password))两次哈希计算结果保存在 mysql.user 表的 authentication_string 列中。其中用户密码通过哈希计算后保存,没有加盐(salt)。

通过上述这样的处理,MySQL数据库本身已然非常安全。然而,随着时间的推移,目前存在以下两种潜在风险:

  • SHA1哈希算法也已经变得比较容易破解。
  • 相同的密码拥有相同的哈希值。

SHA1、MD5等之前的哈希算法都已然不再安全,更为安全的SHA256、SHA512哈希算法也已推出。作为数据存储最终承载者,应该使用更新的加密机制机制。

caching_sha2_password

在cache_sha2_password密码认证机制下,其改进如下所示:

  • 保存在 authentication_string 中的哈希值为加盐后的值,即使两个不同用户的密码相同,保存在计算机中的哈希值也不同。
  • 哈希算法升级为了更为安全SHA256算法。
  • 哈希算法的 round 次数从原来的两次,提升为了5000次,round次数越多,每次计算哈希值的代价越大,破解难度也就越大。
  • 用TLS的加密或RSA密钥传输方式从客户端将密码传送到服务端。
通讯过程解析
  1. 对于大多数连接尝试,当密码的哈希值有缓存在内存中时,它的验证是基于 SHA256 的challenge-response机制(与 mysql_native_password 中基于 SHA1 的challenge-response机制相比更快),下图演示了在有哈希缓存时的验证流程。

file

  1. 客户端连接服务端
  2. 服务端给客户端发送 Nonce(20 字节长的随机数据)
  3. 客户端使用 XOR(SHA256(password), SHA256(SHA256(SHA256(password)), nonce)) 生成 Scramble 发送给服务端
  4. 服务端检查 username/SHA256(SHA256(user_password)) 是否在内存缓存条目中存在,存在则证明合法;发送 fast_auth_success 包到客户端
  5. 服务端发送 OK 包到客户端
  6. 进入命令阶段

Nonce 是一个在加密通信只能使用一次的数字。在认证协议中,它往往是一个随机或伪随机数(salt),以避免暴力攻击。

  1. 当没有这种缓存时,caching_sha2_password 需要使用安全连接进行密码交换。考虑到用户更改和 FLUSH PRIVILEGES 操作频率比较低,所以在大多数情况下,使用的都是基于challenge-response的身份验证,不用建立安全连接。这省去了建立安全连接需要耗费的资源。下图总结了完整的验证流程。

file

  1. 客户端连接服务端
  2. 服务端给客户端发送 Nonce(20 字节长的随机数据)
  3. 客户端使用 XOR(SHA256(password), SHA256(SHA256(SHA256(password)), nonce)) 生成 Scramble 发送给服务端
  4. 服务端检查 username/SHA256(SHA256(user_password)) 是否在内存缓存条目中存在,不存在则发送 perform_full_authentication 包到客户端继续认证
  5. 客户端收到 perform_full_authentication 包,可以进行如下处理
  6. 如果安全连接已经建立基于 ,则可以直接发送明文密码到服务端 向服务端发起获取公钥的请求(或者指定服务端公钥文件),使用公钥+Nonce加密密码,发送加密后的密码到服务端 服务器通过 SHA256 算法计算得到哈希值,判断是否用户认证通过,通过则发送 OK 包到客户端
  7. 进入命令阶段

这里详细解释一下 RSA 非对称加密的通信过程:

首先先明确一个概念:非对称加密算法中,有两个密钥:公钥和私钥。如果用公钥进行加密,只有对应的私钥才能解密;反之亦然。

RSA 密钥交换过程:

服务器生成一对密钥并将公钥向其他方公开(明文发送给客户端);

客户端使用服务器的公钥对密码进行加密后发送给服务器;

服务器用对应的私钥对加密信息进行解密。

因为客户端用公钥加密的信息只能用服务器的私钥解密,所以这个连接过程可以视为加密通信。

file

需要注意的地方

默认身份验证插件的更改意味着:

在 MySQL 8.0.4 之后创建的所有新用户将默认使用 caching_sha2_password 作为身份验证插件。

mysql> SELECT USER,PLUGIN FROM mysql.`user` ;
+------------------+-----------------------+
| USER             | PLUGIN                |
+------------------+-----------------------+
| root             | caching_sha2_password |
| mysql.infoschema | caching_sha2_password |
| mysql.session    | caching_sha2_password |
| mysql.sys        | caching_sha2_password |
+------------------+-----------------------+
6 rows in set (0.06 sec)

libmysqlclient 默认使用 caching_sha2_password,可以通过手动修改切换到其他的身份验证插件。

对于使用 caching_sha2_password 插件的客户端,连接到服务器时,密码不会暴露为明文。密码传输是如何进行的取决于是否使用安全连接或 RSA 对密码加密:

  • 如果连接是安全的,可以不使用 RSA 密钥。适用于使用 TLS 加密的 TCP 连接,以及 Unix 套接字文件和共享内存连接。密码以明文格式发送,但不能被窃听,因为连接是安全的。
  • 如果连接不是安全的,可以使用 RSA 密钥对。适用于未使用 TLS 加密的 TCP 连接和 named-pipe 连接。RSA 仅用于客户端和服务器之间的密码交换,防止密码被截取。当服务器接收到使用公钥加密的密码后,它使用私钥解密。一个随机字符串用在加密中,防止重放攻击(repeat attacks)。

在 MySQL 8.0.3 以上版本中。默认自动完成 RSA 密钥对进行密码交换。

关于主从复制

复制本身是支持加密的连接。在 MySQL 8.0.4中,添加了复制对 RSA 加密的支持。

如果用于复制的用户使用了 caching_sha2_password身份验证插件,并且没有启用安全连接( 在group_replication_recovery 启用SSL支持),MySQL 将使用 RSA 密钥对进行密码的交换,可以把主节点的公钥手动拷贝到从节点的服务器中,也可以设置成:自动为请求加入组的节点提供公钥。

  • CHANGE MASTER 可以通过以下俩个参数来启用基于 caching_sha2_password RSA 密钥来交换密码:

      指定 RSA 公钥路径
     - MASTER_PUBLIC_KEY_PATH ="key_file_path"  
    
      #从服务端获取 RSA 公钥
     - GET_MASTER_PUBLIC_KEY = {0 | 1}
  • Group Replication 可以通过以下俩个参数来启用基于 caching_sha2_password RSA 密钥来交换密码:

     #指定 RSA 公钥路径
     ––group-replication-recovery-public-key-path
     #从服务端获取 RSA 公钥
    ––group-replication-recovery-get-public-key

数据库升级

数据库升级到 MySQL 8.0.4 会怎样?

在升级之前创建的用户,身份认证插件不会更改。在升级之后创建的用户默认使用 aching_sha2_password身份验证插件。除非使用 --default-authentication-plugin 手动指定认证插件插件。因为不会更改升级前已有用户。因此,使用升级后依然可以用旧版本的客户端连接这些用户。

相应地,libmysqlclient 支持 mysql_options() C API函数的 MYSQL_DEFAULT_AUTH 选项。(对于 MySQL 包中可用的基于 libmysqlclient 的客户端工具,可以用 ––default-auth 命令行选项达到相同的目的。)

建议使用 cache_sha2_password 因为它更安全。并且升级 libmysqlclient 到 MySQL 8.0.4 或更高版本,以便支持新的身份验证插件。

参考资料

MySQL 8.0.4 : New Default Authentication Plugin : caching_sha2_password

得物技术浅谈MySQL 8.0:新的身份验证插件

MySQL 8.0密码认证机制升级,不知道可能导致业务不可用!!! 组复制安装部署 | 全方位认识 MySQL 8.0 Group Replication


Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

捉虫活动详情:https://greatsql.cn/thread-97-1-1.html

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

6440

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群。

image-20221030163217640)

在navicat客户端Mysql连接出现Authentication plugin ‘caching sha2 password‘ cannot be loaded: @Xeegeeeg问题 方法二:创建新用户:在 MySQL 服务器上创建一个新用户,将其身份验证插件设置为与旧版本的客户端兼容的插件,然后使用该用户进行连接。创建新用户:在 MySQL 服务器上创建一个新用户,将其身份验证插件设置为与旧版本的客户端兼容的插件,然后使用该用户进行连接。现在,你可以使用刚刚创建的用户连接到 MySQL 数据库,并且该用户的身份验证插件是与旧版本的 MySQL 客户端兼容的插件。方法一:更改身份验证插件:在 MySQL 服务器上更改默认的身份验证插件,将其设置为与旧版本的客户端兼容的插件(例如。 阅读详情

相关推荐

【MySQL】MySQL连接报错 Plugin caching_sha2_password could not be loaded

4.如果你无法升级你的MySQL客户端,你可以尝试将你的MySQL用户的身份验证插件更改为旧版的mysql_native_password。这个错误通常发生在MySQL 8.0版本及以上,因为在这些版本中,MySQL引入了新的默认身份验证插件caching_sha2_password,以提供更安全的密码存储和验证方式。6.你可以创建一个新的MySQL用户,使用旧版本的mysql_native_password作为身份验证插件。

九师兄 4158

SQLyog错误号码 plugin caching_sha2_password could not be loaded

问题描述: SQLyog错误号码 plugin caching_sha2_password could not be 原因分析: MySQL新版默认使用caching_sha2_password作为身份验证插件,而旧版是使用mysql_native_password 当连接MySQL时报错“plugin caching_sha2_password could not be loaded”时,可换回旧版插件。 解决方案: 远程命令行登录mysql mysql -hlocalhost -uroot -

qq_54202620的博客 2万+

正确解决Authentication plugin ‘caching _sha2_password’ cannot be loaded:异常的有效解决方法

正确解决Authentication plugin ‘caching _sha2_password’ cannot be loaded:异常的有效解决方法

wbajsjhhhhh的博客 1万+

MYSQL解决“plugin caching_sha2_password could not be loaded”

plugin caching_sha2_password could not be loaded”,是无法加载插件缓存sha2密码, 在MySQL 8.0中,caching_sha2_password是默认的身份验证插件,而不是mysql_native_password.使用mysql5可以正常连接,但是mysql8却无法连接,所以应该是sqlyog版本与mysql版本不匹配造成的。本文通过修改 mysql 密码策略解决;还有一种方法是升级SQLyog解决,这里就不过多赘述了。

wasd2051678946的博客 8853

RDMA性能调优实战:如何用ib_*命令榨干你的Mellanox网卡带宽?

本文深入探讨了如何利用ib_*命令工具集对RDMA网络进行深度性能调优,以充分释放Mellanox网卡的带宽潜力。文章从理解Send/Write/Read三种核心通信原语的差异入手,逐步指导读者通过调整消息大小、队列深度、内联数据等关键参数,并结合系统级的NUMA绑定、中断亲和性等优化策略,实现从基准测试到逼近硬件极限的性能提升。

weixin_29306011的博客 88

【PyTorch版本兼容性指南】如何在不同版本中正确使用torch.nn.attention

本文详细解析了PyTorch版本兼容性问题,特别是torch.nn.attention模块在不同版本中的使用差异。针对常见的ModuleNotFoundError错误,提供了三种实用解决方案:升级PyTorch版本、使用自定义实现和源码移植方案,并分享了最佳实践建议,帮助开发者有效避免兼容性问题。

weixin_29084231的博客 472

远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法

文章目录一、环境二、问题描述三、解决方法1. 登录mysql2. 进入mysql依次执行如下命令3. 查看修改结果 一、环境 系统:centos8 docker:18.09.1 mysql : least >= 8.0.20 sqlyog: 12.0.8-0 二、问题描述 今天试了一下在docker容器安装mysql,结果远程连接报错 远程连接docker 下的MySQL错误如下,即 无法加载插件缓存sha2密码,在MySQL 8.0中,caching_sha2_password是默认的身份验证插件

不懂一休 4万+

Unity事件总线第一篇:为什么你的游戏需要一个事件总线?

本文探讨了游戏开发中常见的跨模块调用导致代码强耦合的问题。通过一个攻击按钮触发角色攻击、怪物掉血和血条更新的案例,分析了直接调用方式带来的维护困难、扩展性差和模块重用性低等弊端。文章提出使用事件总线(Event Bus)作为解决方案,通过发布-订阅模式实现模块解耦。重构后的代码中,各模块只需与事件总线交互,彼此不再直接依赖。这种设计使得新增功能(如音效)无需修改现有代码,大大提高了系统的可维护性和扩展性,同时增强了模块的重用性,完美体现了开闭原则。

qq_46348216的博客 1298

详解登录MySQL时出现Authentication plugin ‘caching_sha2_password‘ reported error错误

详解登录MySQL时出现 Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.错误。

. 6615

VirusTotal API密钥获取与Python实战:从注册到自动化威胁分析

在网络安全和自动化运维领域,API(应用程序编程接口)是实现系统间数据交互与功能集成的核心技术。其工作原理是通过预定义的协议和端点,允许程序化访问特定服务的数据与功能。对于安全工程师和威胁分析师而言,API的价值在于能够将手动、重复的安全操作(如文件扫描、情报查询)转化为自动化工作流,从而极大提升威胁检测与响应的效率。一个典型的应用场景是集成第三方威胁情报平台,以实现对可疑文件、URL或哈希值的批量与实时分析。本文聚焦于全球知名的威胁情报服务VirusTotal,详细解析其API密钥的注册流程、安全配置要点

weixin_28707739的博客 420

深入NAND Flash信号与接口:结合ONFI 5.0协议,聊聊DBI、ODT和差分信号到底在解决什么实际问题

本文深入探讨了NAND Flash信号与接口设计,结合ONFI 5.0协议,详细解析了DBI、ODT和差分信号等技术如何解决高速数据传输中的信号完整性问题。通过实际案例和数据,展示了这些技术在降低功耗、减少噪声和提升抗干扰能力方面的显著效果,为存储工程师提供了宝贵的实践参考。

weixin_33736649的博客 343

MySQL新身份验证插件caching_sha2_password

从 MySQL 8.0.4 开始,MySQL 默认身份验证插件从改为。相应地,也使用作为默认的身份验证机制。

song854601134的博客 6031

大聪明教你学Java | Seata 2.5 从下载到运行:全流程编译部署教程

Seata 2.5 版本带来了不少特性优化,但实际部署时却发现一个尴尬问题:全网找不到一篇完整覆盖「Git 源码下载→本地编译→环境配置→启动验证」的实操教程。作为一名踩遍无数坑才成功跑通的开发者,我深知这个过程的煎熬:Git 拉取源码后编译失败、依赖版本冲突、配置文件参数混乱、启动时端口占用或连接报错… 每一个坑都能耗费数小时排查。为了让后续开发者少走弯路,我将自己从0到1的完整实操经验整理成文,跟着步骤走即可成功运行 Seata 2.5.

不肯过江东丶 2072

MySQL身份验证插件(mysql_native_password、sha256_password、caching_sha2_password)

MySQL 5.6提供了以下身份验证插件: 1、mysql_native_password 执行本地身份验证的插件;在MySQL中引入可插入身份验证之前使用的基于密码哈希方法的身份验证。该mysql_native_password插件基于本机密码哈希方法实现身份验证。该mysql_old_password 插件基于较旧的(4.1之前的)密码哈希方法实现本机身份验证(现已弃用)。mysql_na...

SunZLong的博客 2万+

基于哈夫曼编码的图像加密算法matlab仿真

哈夫曼编码是一种常用的无损数据压缩算法,其基本思想是根据字符出现的频率构造一棵哈夫曼树,将出现频率高的字符编码为短码,出现频率低的字符编码为长码,从而实现数据的压缩。在图像加密领域,哈夫曼编码也被广泛应用于图像加密算法中,基于哈夫曼编码的图像加密算法具有加密速度快、加密强度高等优点。基于哈夫曼编码的图像加密算法的基本思路是将待加密的图像分为多个小块,对每个小块进行哈夫曼编码,然后将哈夫曼编码后的结果进行异或运算,最后将异或运算后的结果重新编码,以实现图像加密。具体步骤如下:将待加密的图像分成多个小块。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 262

告别 GENERATE_SUBPOOL_DIR_FULL:用 RTTC 平替 CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE 的一套更稳方案

文章摘要:本文探讨了ABAP开发中动态内表的创建问题,重点分析了使用CL_ALV_TABLE_CREATE方法可能遇到的GENERATE_SUBPOOL_DIR_FULL错误。该错误源于临时subroutine pool的36次创建上限,常在批量处理或频繁调用时出现。文章提出基于RTTC技术的替代方案ZCL_ALV_TABLE_CREATE_RTTC,通过运行时类型服务直接创建动态内表,无需生成临时代码,从而规避了资源限制。该方法保持接口兼容性,只需简单替换类名即可实现无缝迁移,是解决动态表创建瓶颈的有效方

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

解决MySql登录 提示caching_sha2_password

背景 用docker构建mysql容器后连接遇到以下问题 登录提示caching_sha2_password问题解决方法 解决方案: 1.进入容器:docker exec -it 62349aa31687 /bin/bash mysql -u root -p 查看身份验证类型 mysql> use mysql; Database changed mysql> SELECT Host, User, plugin from user; ±----------±-----------------±

wo4641771的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【得物技术】MySQL 8.0:新的身份验证插件(caching_sha2_password)

从 MySQL 8.0.4 开始,默认身份验证插件从 mysql_native_password 更改为 caching_sha2_password。相应地,现在的 libmysqlclient 将使用 caching_sha2_password 作为默认的验证机制。 为什么这样做呢? MySQL 5.6/5.7 的默认密码插件一直以来都是 mysql_native_password。其优点是它支持 challenge-response 机制,这是非常快的验证机制,无需在网络中发送实际密码,并且

SmartCodeTech的博客 5345

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Mysql8.0密码问题mysql_native_password和caching_sha2_password详解例子解析

要在MySQL 8.4中设置密码规则为,您可以按照以下步骤操作:确认插件是否已经安装。如果已经安装,该命令会显示插件已经存在。查看插件状态,确保插件的状态为ACTIVE。如果状态为DISABLED,则需要激活插件。修改配置文件my.cnf或my.ini,在[mysqld]注意不要添加,否则可能会导致MySQL无法启动。重启MySQL服务。修改密码认证方式,例如,为root用户设置以上步骤可以帮助您在MySQL 8.4中设置密码规则为。请注意,

IT老农民的博客 3950

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

mysql系列:远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法

下面的环境不重要,重要的是你的 MySQL可视化工具(以 sqlyog 为例)和 MySQL 服务密码校验规则是否一致,mysql 5.7 默认密码校验规则是 mysql_native_password,MySQL 8.0 时默认为 caching_sha2_password,你可以进入MySQL ,使用 SELECT Host, User, plugin from mysql.user;查看。

weixin_65418233的博客 3748

MySQL新密码机制介绍caching_sha2_password

MySQL新密码机制介绍caching_sha2_password

weixin_49319422的博客 5014

MySQL8.0登录提示caching_sha2_password问题解决方法

背景 用docker构建mysql容器后连接遇到以下问题 问题 Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image not found mysqli_real_connect():...

Simon的博客 9万+

MySQL的caching_sha2_password报错的解决

《MySQL新身份验证插件caching_sha2_password》讲解了MySQL新身份验证插件caching_sha2_password,对于同事碰到的这个问题,ERROR2059(HY000): Plugincaching_sha2_passwordcouldnotbeloaded: /usr/lib64/mariadb/plugin/caching_sha2_passw...

bisal的专栏 8236

无法加载身份验证插件“ caching_sha2_password”

I am connecting MySQL - 8.0 with MySQL Workbench and getting the below error: 我正在将MySQL-8.0与MySQL W

p15097962069的博客 5799
上一篇: 实现一个简单Database7
下一篇: MySQL中USER()和CURRENT_USER()的区别
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值