php 更安全的密码

PHP中的密码学和安全认证实践 本文深入探讨了PHP中实现用户认证和密码学应用的多种方法。内容涵盖了随机密码生成、摘要认证、用户识别与认证以及如何利用PHP进行加密和解密,同时指出了使用IP地址识别用户的风险。此外,文章还介绍了使用SSL确保安全交易的重要性,并详细讲解了配置mod_ssl和OpenSSL来实现SSL的过程。 阅读详情

1.使用password_hash 来生成更安全的密码

<?php
 $password = '123456789wsad';

 $md5_pass = md5($password);
 $bcrypt_pass = password_hash($password,PASSWORD_DEFAULT);

 var_dump($md5_pass);
 echo "<hr/>";
 var_dump($bcrypt_pass);
echo "<hr/>";

在这里插入图片描述
下面就是使用password_hash 生成的密码

password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)
第二个参数:
PASSWORD_DEFAULT - 使用 bcrypt 算法 (PHP 5.5.0 默认)。 因此,数据库里储存结果的列可超过60个字符(最好是255个字符)。
PASSWORD_BCRYPT - 使用 CRYPT_BLOWFISH 算法创建散列。 这会产生兼容使用 “2y2y2y” 的 crypt()。 结果将会是 60 个字符的字符串, 或者在失败时返回 FALSE。
PASSWORD_ARGON2I - 使用 Argon2 散列算法创建散列。

  1. password_verify 来验证密码
    password(password,password,password,hash)
    $hash 是由password_hash 创造的散列值。
CentOS7无网环境实战:MySQL8.0完整离线安装与避坑指南(附依赖包下载) 本文详细介绍了在CentOS7无网环境下MySQL8.0的完整离线安装流程,包括依赖包获取、系统预处理、MySQL二进制安装、服务配置与优化等关键步骤。特别针对离线安装的特殊需求,提供了从依赖包下载到服务调优的全链路解决方案,帮助用户在企业内网或隔离环境中高效部署MySQL数据库。 阅读详情

相关推荐

ESP32天线阵列实现Wi-Fi空间成像与无直视定位

Wi-Fi信道状态信息(CSI)是OFDM系统中表征多径传播特性的基础物理层参数,其复数值包含幅度与相位,可反映无线环境的空间特征。基于CSI的射频感知技术,通过提取子载波级信道响应,结合阵列信号处理,实现到达角(AoA)估计与深度映射,本质是将通信链路重构为空间域传感器。该技术无需专用雷达硬件,具备低成本、被动式、隐私友好等工程优势,在室内定位、行为识别、仓储导航等场景具有广泛落地价值。本文聚焦ESP32平台,详解多芯片相位同步、CSI零拷贝采集、嵌入式MUSIC算法及信道图谱轻量化部署等关键实现。

weixin_30632267的博客 237

PHP password_hash()加密算法

PHP password_hash()加密算法 初识 password_hash()是因为要做一个分享注册的项目,为了减少注册时的时间,密码长度要求不高,这样一来md5加密虽然可以使用,但是安全性不高,然后就改用了password_hash() password_hash()要求PHP版本必须是5.5以上,使用也比较简单 语法: password_hash (password , PASSWORD...

weixin_43046246的博客 1164

DeepSeek高阶应用:DeepSeek+Coze构建智能文献综述与趋势分析自动化系统

本文详细介绍了如何利用DeepSeek与Coze构建智能文献综述与趋势分析自动化系统。通过DeepSeek的深度语义理解和结构化信息提取能力,结合Coze的可视化工作流编排,实现学术论文的自动解析、分类整理与知识入库。该系统能7x24小时自动追踪领域前沿,将研究人员从繁琐的文献处理中解放出来,专注于更高层次的思考与创新。

weixin_29050271的博客 180

最安全的 PHP 密码加密方法

前言: 在 PHP 开发过程中,很多人 PHP 密码加密都是用的 md5 和 sha1(包括 sha256.......),但不知道,随着技术进步和计算机硬件的提升(集群、分布式、云计算),破解者可以快速使用 "暴力"(彩虹表)方式来寻找密码加密后散列码所对应的原始数据。 最安全的 PHP 密码加密方法: PHP 官方自带的密码哈希函数password_hash() 常用的 MD5、SHA1、SHA256 哈希算法,是面向快速、高效进行哈希处理而设计的。随着技术进步和计算机硬件的提升,如今强大的计算.

lmp5023的博客 2313

【网络安全】Centos7安装杀毒软件----ClamAV

Clam AntiVirus是一个Linux系统上使用的反病毒软件包。主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库。

你在看屏幕的同时,屏幕也在注视着你 8829

科研党必看!Zotero+Claude3插件实战:如何用AI高效阅读文献(附详细配置步骤)

本文详细介绍了如何通过Zotero与Claude3插件的深度整合,实现科研文献的高效阅读与管理。从环境配置到核心功能实战,包括智能摘要生成、精准学术翻译和论文写作辅助等,帮助科研人员大幅提升工作效率。特别适合需要处理大量文献的研究者使用。

o0p1q2r3的博客 436

使用bcrypt计算密码哈希值

我们应该计算密码的哈希值而不是加密他,加密是双向算法,而哈希是单项算法 目前公认的最安全的哈希算法是bcrypt 开发web应用时,会在两处地方用到密码哈希API:注册和登录用户,以下为操作代码。 /** * 注册用户时 计算密码哈希值 * 密码的哈希值应存储在VARCHAR(255)类型的数据库列中。便于以后存储比现在的bcrypt算法得到的哈希值更长的密码 * @param stri...

进击的极客的博客 2982

李沐之数值稳定性+模型初始化和激活函数

层记为t,这里的y不是预测,还包括了损失函数,y是优化函数,不是预测的结果y。第t层是输出。所有的h都是一些向量,向量关于向量的导数是一个矩阵,所以用了很多次的矩阵乘法,出问题就在这里。

m0_51133942的博客 1527

PHP处理密码的几种方式

在 PHP中,经常会对用户身份进行认证。本文意在讨论对密码的处理,也就是对密码的加密处理。MD5相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这样的:$password = md5($_POST["password"]);上面这段代码是不是很熟悉?然而MD5的加密方式目前已经不太安全了,因为它的加密算法实在是显得有点简单了,而且很多破解密码的站点都存放

yyyiue的博客 1628

从零开始:Basler相机与pylon Viewer的工业视觉入门指南

本文详细介绍了Basler相机与pylon Viewer在工业视觉系统中的入门指南,涵盖硬件连接、软件安装、核心功能解析及实战案例。通过pylon Viewer的全面控制和参数调整功能,帮助新手快速掌握工业视觉检测技术,提升生产效率。

julia4scientist的博客 1136

喷涂机器人系列编程:ABB IRB 5500_(7).喷涂质量控制与优化

通过编程手段对ABB IRB 5500喷涂机器人进行质量控制和优化,可以显著提高喷涂的均匀性和附着力,减少涂层缺陷。具体的方法包括喷涂参数的调整、路径规划的优化、喷涂效果的检测与反馈,以及喷涂参数的动态调整。综合评估系统可以进一步确保喷涂质量的稳定性和一致性,帮助汽车制造企业提高产品质量和生产效率。

zhubeibei168的博客 852

swoolephp加密_6种php加密解密方法

看代码演示:function encryptDecrypt($key, $string, $decrypt){if($decrypt){$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");re...

weixin_39715907的博客 2647

【GitHub项目实战】OpenAvatarChat 搭建实时交互数字人

OpenAvatarChat 项目构建了一个集成语音识别、大语言模型、语音合成、表情驱动和实时通信于一体的虚拟人系统,具备本地优先、模块解耦、快速部署的特点。系统通过配置文件统一管理组件,支持多种组合方案,适用于低资源设备和私有化部署场景。配置逻辑清晰、模块职责明确,能快速启动并实现端到端语音交互流程,为多模态系统学习与实践提供了结构完整的工程参考。

Mr数据杨 2756

【哈希密码】PHP比md5更安全的加密方式

传统加密方式: md5(密码+盐值); $passwordString='your password';//你的密码 $salt="your salt value";//盐值,增加复杂度(随机字串) $md5Password=md5($passwordString.$salt); 从理论上来说,md5不可逆,算是一种比较安全的加密方式。但是我要提醒的是,md5早在04年的时候就被中国人破解。...

weixin_44056915的博客 1146

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深度学习工具包 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")

【PHP开发900个实用技巧】278.密码盐生成: 让你的密码哈希更安全!

《密码加盐技术全指南:从原理到PHP实战》 摘要:本文系统讲解密码加盐的核心技术与安全实践。首先揭示裸哈希的致命风险,通过彩虹表攻击案例说明加盐必要性;其次剖析三种高危加盐模式(固定盐/短盐/复用盐)的漏洞原理;进而提出专业盐值三要素:足够长度(≥32字节)、密码学随机性、独立存储机制。最后以PHP为例,演示password_hash的最佳实践,包括自动盐值生成、随机源选择策略及存储验证流程。文章指出,正确的加盐可使破解成本从秒级提升至宇宙级,是密码安全的基石防御手段。

1068

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

PHP比md5更安全的加密方式--哈希密码

传统加密方式: md5(密码+盐值); 1 2 3 4 5 $passwordString='yourpassword';//你的密码 $salt="yoursaltvalue";//盐值,增加复杂度(随机字串) $md5Password=md5($passwordString.$salt); ...

weixin_34380781的博客 438

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

php password argon2i_更安全,PHP 增加对下一代密码散列算法 Argon2 的支持

PHP 于本周发布的7.2.0 版本使得它安全性大大提高,该版本改进了编程语言对密码学和密码哈希算法的支持,并使其更现代化。到目前为止,在 PHP 7.2 中最显著的变化是,新增对密码哈希算法 Argon2 的支持。Argon2 于 2010 年初开发,现已成为 IETF 中普遍认可的互联网标准。Argon2 被认为优于 Bcrypt目前认为该算法在安全性和成本效益方面优于当今使用最广泛的密码散...

weixin_42509931的博客 375

【PHP】更安全的密码存储之phpass库及其在CI框架中的使用

作为php初学者,我们一般认为php中自带的MD5加密方式是很安全的,因为MD5不可逆,即攻击者不能从哈希值H(x)中推出x的值。并且MD5加密算法的碰撞几率非常低,即攻击者不能找到两个值x, x'使得H(x) = H(x')。然鹅这种加密方式也是不安全的,只要美剧出所有的常用密码做成一个索引表,就可以推出来原始密码。这张索引表也被称作“彩虹表”。所以我们要寻求一种更为安全的加密方式,即便因为某种...

Ascexz的博客 1132

PHP Bcrypt 更安全的密码加密机制 阿星小栈

&#13;   为了避免在服务器受到攻击,数据库被拖库时,用户的明文密码不被泄露,一般会对密码进行单向不可逆加密——哈希。 常见的方式是: 哈希方式 加密密码 md5(‘123456’) e10adc3949ba59abbe56e057f20f883e md5(‘123456’ . ($salt = ‘salt’)) 207acd61a3c1bd506d7e9a...

阿星小栈 394

PHP 密码安全之比 md5,sha1 更安全的密码散列函数 password_hash 代码使用实例

引用 PHP 官方手册的一段话,如下:为何诸如 md5() 和 sha1() 这样的常见散列函数不适合用在密码保护场景?MD5,SHA1 以及 SHA256 这样的散列算法是面向快速、高效进行散列处理而设计的。随着技术进步和计算机硬件的提升,破解者可以使用"暴力"方式来寻找散列码所对应的原始数据。因为现代化计算机可以快速的"反转"上述散列算法的散列值,所以很多安全专家都强烈建议不要在密码散列中使用这些散列算法。

Zuozi - 网络从业者长见识就来Zuozi.NET 1204

php证书免密登录,ssh免密码公钥认证登录更安全

我们在登录远程服务器的时候,一般都会直接输入密码的方式登录,这样多多少少是不严谨的不安全,一般严格来说,服务器的root用户,管理员不会在任何地方进行远程,以免发生被窃。然而要远程服务器,使用ssh的公钥认证机制,这样就会确保只是某些特定电脑可以访问,而且一旦进行公钥认证后,可以关闭密码登录,这样子会更安全。1、设置server端那么默认机子如果没有安装ssh-server端的话,请先安装ssh-...

weixin_42513814的博客 370

PHP中散列密码的安全

php的基本哈希函数已经不再安全?php手册中有专门的一个部分来介绍这个问题 http://php.net/manual/zh/faq.passwords.php很多应用,都是将用户的密码都是直接通过md5加密直接存储到数据库中的,包括我最近在用的开源项目zabbix的web管理界面。$password = "1234"; $hash = md5($password); echo $res;php

koastal的博客 1264

php如何实现密码重置,php如何实现修改密码

php修改密码:推荐:php服务器html代码:提示:确认修改密码后将跳转到登录页面重新登录请输入原始密码请输入新密码请重新输入新密码确认修改$("#ysmm").blur(function(){ysmm();});$("#xmm").keyup(function(){xmm();});function ysmm(){var a = true;var ysmm = $("#ysmm").val()...

weixin_30707165的博客 1237

详解PHP处理密码的几种方式

在 PHP中,经常会对用户身份进行认证。本文意在讨论对密码的处理,也就是对密码的加密处理。 MD5 相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这样的: $password = md5($_POST["password"]); 上面这段代码是不是很熟悉?然而MD5的加密方式目前已经不太安全了,因为它的加密算法实在是显得有点简单了,而且很多破

Huangwenting1990的博客 722

php单网页加密,单网页实现加密码才能访问总结

用js实现时加密会被人看到,较不安全。用php+session等方式较安全。法1function password() {var testV = 1;var pass1 = prompt('请输入密码','');while (testV < 3) {if (!pass1)history.go(-1);if (pass1 == "123") {//初始密码123alert('密码正确');br...

weixin_35551554的博客 620

php编程安全指南

转自:http://www.codingforums.com/showthread.php?t=176717 php编程安全指南 1、一般  1)lamp系统安全设置  2)php.ini安全设置  3)使用MVC框架 2、数据传输  1)在$_GET的$_POST,$_COOKIE,和$_REQUEST中,消毒和验证之前以编程方式操纵数据中包含的所有数据  2)SQL注入

爱代码也爱生活 6053
上一篇: php filter过滤器
下一篇: WHOOPS PHP调试库的使用
hellohellowode
博客等级 码龄11年 2粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值