passwd和shadow

passwd 与 shadow 文件解析 阿里云协同办公工具Teambition 0元试用>>> ... 阅读详情

/etc/passwd是linux的用户信息存放的地方,在早期的系统中加密后的用户密码也放在这个文件中,为了安全起见现在普遍使用shadow方式来将密码影射在/etc/shadow这个文件,这个文件只有root有权访问,赠强了安全性。
/etc/passwd中内容大致如下:
beaglidx:x:58:58:User for Beagle indexing:/var/cache/beagle:/sbin/nologin

在标准库中也提供了访问/etc/passwd中用户信息的接口,getpwent/putpwent等; 这些接口将/etc/passwd每一个用户信息读取出来,放在struct passwd结构中,这个结构定义为:
          struct passwd {
              char   *pw_name;       /* user name */
              char   *pw_passwd;     /* user password */
              uid_t   pw_uid;        /* user ID */
              gid_t   pw_gid;        /* group ID */
              char   *pw_gecos;      /* real name */
              char   *pw_dir;        /* home directory */
              char   *pw_shell;      /* shell program */
          };
这个结构包括了上面一行中的所有成分,这里的密码是加密过的密码。密码的加密方式可以是DES、MD5等,通常使用MD5加密算法。
如果使用了shadow系统,密码将放在/etc/shadow中;访问shadow密码应使用另一套库文件。

[QMT量化交易小白入门]-七、可转债双低策略Python代码详解与实战 本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。 阅读详情

相关推荐

SAP SM30数据维护实战:条件筛选与动态校验的实现技巧

本文详细介绍了SAP SM30数据维护的实战技巧,重点讲解如何通过条件筛选实现精准数据查取,以及利用表维护生成器事件实现动态数据检查与校验。文章提供了从基础视图创建到高级事件编程的完整流程,包括调用函数VIEW_MAINTENANCE_CALL传递筛选条件,以及在NEW_DATA和CHANGE_SAVE事件中编写业务规则校验逻辑,帮助开发者提升SM30的管控能力与数据质量。

q9w8e7r6t5的博客 521

Linux命令之passwd命令

passwd实用程序用于更新用户的身份验证令牌。这个任务是通过调用LinuxPAM和Libuser API来实现的。本质上,它将自己初始化为使用Linux PAM的“passwd”服务,并利用配置的密码模块进行身份验证,然后更新用户的密码。passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。一般情况下我们使用passwd命令修改密码需要确认密码,如何批量修改账户密码呢???

月生的静心苑 3万+

时序基础模型Timer-S1:十亿参数如何革新时间序列预测

时间序列预测是数据分析与机器学习中的核心任务,旨在基于历史数据预测未来趋势。其原理在于捕捉数据中的趋势、周期性和季节性等时序依赖关系。这项技术的价值在于赋能业务决策,广泛应用于金融风控、能源管理、物联网监控和供应链优化等关键场景。传统方法依赖针对特定任务的专用模型,面临泛化能力弱和开发成本高的挑战。本文聚焦的时序基础模型,通过在海量跨领域数据上进行预训练,学习时序通用模式,并结合十亿级参数带来的强大容量,实现了性能的显著突破。这种范式转变,使得模型能够像“全科医生”一样,通过少量数据微调即可快速适应新任务,

weixin_29164843的博客 269

OS / linux / passwd 文件和 shadow 文件

现在的 Unix / Linux 系统中,口令不再直接保存在 passwd 文件中,通常将 passwd 文件中的口令字段使用一个“x”来代替,将 /etc/shadow 作为真正的口令文件,用于保存包括个人口令在内的数据。通常在 Linux 系统中,用户的关键信息被存放在系统的 /etc/passwd 文件中,系统的每一个合法用户账号对应于该文件中的一行记录。此外,需要注意的是,如果 passwd 字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。

布袋和尚 1864

基于MicroPython的ESP32与微信小程序MQTT通信实战

本文详细介绍了基于MicroPython的ESP32与微信小程序通过MQTT协议实现远程控制的完整实战方案。项目利用巴法云作为免费MQTT服务器,提供了从设备端编程、小程序开发到通信调试的全流程指南,帮助开发者快速构建低成本、易上手的物联网应用,如智能开关、传感器监控等。

week9的博客 634

国产麒麟系统各版本镜像下载

以上各链接均为迅雷下载,禁止商业用途!

2302_79474754的博客 6136

/etc/passwd 与 /etc/shadow文件的区别

前言:这周面试问到了这个问题,只知道这俩文件存着用户密码,不知道有啥区别。因此来总结一下。 Linux系统中,所有用户(包括系统管理员)的账号和密码都可以在 /etc/passwd 和 /etc/shadow 这两个文件中找到,其中 shadow 是 passwd 的影子文件。 早期 /etc/passwd 文件直接存放加密后的密码,前两位是盐值,是一个随机数,后面跟的是加密的密码。为了安全,现在的 Linux 都提供了 /etc/shadow 这个影子文件,密码放在这个文件里面,并且是只有 root 可读

未完成的歌~的博客 5472

Codesys电子凸轮从入门到应用:手把手教你用MC_CamIn/MC_CamOut实现主从轴同步

本文详细介绍了如何在Codesys平台上使用MC_CamIn和MC_CamOut功能块实现电子凸轮的主从轴同步控制。从环境配置、轴使能到凸轮表创建与动态切换,提供了完整的程序编写指南和调试技巧,帮助工程师快速掌握工业自动化中的高精度运动控制技术。

weixin_26878995的博客 277

Linux系统之passwd命令的基本使用

Linux系统之passwd命令的基本使用

jks212454的博客 1万+

Python量化交易实战:pytdx库高效获取通达信分笔成交数据

本文详细介绍了如何使用Python的pytdx库高效获取通达信分笔成交数据,为量化交易提供关键市场微观结构分析。通过环境搭建、服务器连接、数据获取与清洗的完整流程,帮助开发者快速掌握这一免费高质量数据源,并实现分笔数据的实战分析与应用。

weixin_29061509的博客 1351

基于 ESP32 的分布式光伏微电网智能监控系统设计与实现

设备 / 模块连接 ESP32 引脚备注I2C 总线(SDA)GPIO21所有 I2C 设备共用I2C 总线(SCL)GPIO22所有 I2C 设备共用DS18B20(单总线)GPIO18单总线通信,需外接 4.7K 上拉电阻有源蜂鸣器GPIO19低电平触发,串联 100Ω 限流电阻ESP32 供电5V/GND由 LM2596 输出 5V 供电,或直接 USB 供电(调试阶段)INA219(光伏)光伏阵列正负极接 INA219 的 VIN+/VIN-

weixin_42300449的博客 304

Linux中/etc下面passwd和shadow文件介绍

SYS_GID_MAX(number),SYS_GID_MIN(number) useradd、groupadd或newusers创建的系统组的组ID范围。SYS_UID_MAX(number),SYS_UID_MIN(number) useradd或newusers创建的系统用户的用户ID的范围。3.用户UID值,一般情况下,root的UID为0,1-499默认为系统账号,有的更大些到1000,500-65535为用户的可登录账号,有的系统从1000开始。如果不指定,就假定为-1,这会禁用此限制。

m0_72731342的博客 1532

YOLOv8改进 | 注意力篇 | 一文带你改进GAM、CBAM、CA、ECA等通道注意力机制和多头注意力机制

官方论文地址:官方论文地址点击此处即可跳转官方代码地址:官方代码地址点击此处即可跳转GAM旨在通过设计一种机制,减少信息损失并放大全局维度互动特征,从而解决传统注意力机制在通道和空间两个维度上保留信息不足的问题。GAM采用了顺序的通道-空间注意力机制,并对子模块进行了重新设计。具体来说,通道注意力子模块使用3D排列来跨三个维度保留信息,并通过一个两层的MLP增强跨维度的通道-空间依赖性。

Snu77的博客 4万+

Linux 的 passwd 和 shadow

Linux 系统中默认会有多个的用户,这些用户中的绝大多数是系统或服务正常运行所必需的用户,这种用户通常称为系统用户或伪用户。也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!密码,"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中,虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的。

hicode0101的博客 1527

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

passwd & shadow 文件概述

是在类Unix操作系统(如Linux)中存储用户密码和与密码相关信息的文件。与文件相比,主要用于安全地存储密码,确保密码信息不会被非授权的用户轻易访问。通常,只有超级用户(root)可以读取和写入,而普通用户无法访问它。文件的每一行都对应一个用户账户,并包含关于密码和帐户的一些安全属性。username:用户的登录名,标识该行对应的用户。password:加密后的用户密码。这个字段存储用户的密码的哈希值。如果密码为空(例如或!),表示该账户没有密码或者被禁用。lastchg。

zyqash的博客 1257

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

linux 系统中 /etc/passwd 和 /etc/shadow文件详解

在linux操作系统中, /etc/passwd文件中的每个用户都有一个对应的记录行,记录着这个用户的一下基本属性。该文件对所有用户可读。   而/etc/shadow文件正如他的名字一样,他是passwd文件的一个影子,/etc/shadow文件中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。但是/etc/shadow文件只有系统......

魏波 5260

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Linux /etc/passwd和etc/shadow 详解

Linux /etc/passwd 内容 Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。 [root@localhost ~]# vi /etc/passwd #查看一下文件内容 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:..

fuluoce的博客 6587

linux shadow 时间,Linux shadow 和 passwd详解

Passwd 和 Shadow详解一、/etc/passwd/etc/passwd 文件是一个纯文本文件,每行采用了相同的格式:name:password:uid:gid:comment:home:shellname 用户登录名password 用户口令。此域中的口令是加密的,常用x表示。当用户登录系统时,系统对输入的口令采取相同的算法,与此域中的内容进行比较。如果此域为空,表明该用户登录时不需要...

weixin_42565865的博客 416

Linux下passwd与shadow的关系

在Unix系统中,存在两个重要的文件用于存储用户账号信息和密码哈希值,它们分别是和。这两个文件在系统中扮演着不同的角色,了解它们之间的区别和作用对于系统安全至关重要。

写作是为了更好的思考 1746

passwd和shadow文件

在Linux系统中,passwd和shadow是两个重要的文件,用于管理用户账户和密码信息。passwd文件存储用户的基本信息,而shadow文件则用于存储用户的加密密码和其他安全相关的信息。本文将对这两个文件的结构和字段进行概述,并提供一些实验示例和扩展知识。

爱意随风起,人生不可弃。 1661

Linux下passwd、shadow各字段含义

/etc/passwd 新建test用户 [root@centos1 ~]#getent passwd test # getent查看passwd某个用户 test:x:1015:1015:userinfo:/home/test:/bin/bash 1 2 3 4 5 6 7 1、login n...

weixin_33924220的博客 3485

linux解密shadow_Linux密码文件passwd和shadow分析

UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID来实现的,而非用户名,切记;一般情况下,每个Linux的发行版都会预留一定的UID和GID给系统虚拟用户占用,虚拟用户一般是系统安装时就有的,是为了完成系统任务所必须的用户,但虚拟用户是不能登录系统的,比如ftp、nobody、adm、rpm、bin、shutdown等;第二字段:被加密的密码,如果有的用户在此字段中是x,表示这个用户不能登录系统,也可以看作是虚拟用户,不过虚拟用户和真实用户都是相对的,系统管理员随时可以对任何用户操作;...

qq_42553178的博客 4358

passwd 和shadow详解

http://www.letuknowit.com/topics/20120303/passwd-and-shadow-in-linux.html/ Linux系统中,所有用户(包括系统管理员)的账号和密码都可以在/etc/passwd和/etc/shadow这两个文件中找到,作为一名合格的Linux系统管理员,一定要对这两个文件非常的熟悉!(天哪,竟然把用户和密码就放在文件中,不怕被其他人

Just for doing.. 3618

/etc/passwd和/etc/shadow区别

etc/passwd文件包含了用户的基本信息,而/etc/shadow文件则包含了用户的加密密码信息以及密码相关的设置。/etc/shadow文件是/etc/passwd的影子文件,它包含了用户的加密密码信息以及密码相关的设置。1.信息内容:/etc/passwd包含用户的基本信息,而/etc/shadow包含用户的加密密码和密码策略信息。3.密码存储:/etc/passwd中的密码字段通常是占位符x,而/etc/shadow中存储了加密的密码。/etc/passwd文件。/etc/shadow文件。

2301_81152393的博客 1291

Linux /etc/passwd和/etc/shadow

在Linux系统中,系统用户名是存放在文件中,口令是以加密的形式存放在文件中。一般etc/passwd中一行记录对应着一个用户,每行记录又被冒号()分隔为7个字段,其格式和具体含义如下:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell用户名(login_name):是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母或字母组成。登录名中不能有冒号(),因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。口令(

m_de_g的博客 2476

/etc/shadow与/etc/passwd格式与shadow密码爆破

CATALOG/etc/passwd格式/etc/shadow格式shadow密码爆破利用hashcat实现 /etc/passwd格式 root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin 上面数据为passwd文件的一个片段,我们可以发现每一行都被分号

Shanfenglan's blog 12万+
下一篇: KVM安装指南
steadfast
博客等级 码龄20年 4粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值