一文入门现代密码学,(非常详细)从零基础到精通,收藏这篇就够了!

《现代密码学》 绪论 信息安全与密码学 经典的信息安全三要素(CIA)——机密性、完整性和认证性是信息安全的核心原则。 以密码学为基础的信息安全的五个方面:信息及信息系统的机密性、完整性、可用性、认证性和不可否认性。机密性可通过加密变换实现访问控制;完整性使用消息摘要算法防止篡改;认证性分为实体认证和消息认证。 攻击分为主动攻击(中断、篡改:对完整性的攻击、伪造:对认证性的攻击、重放:可使用... 阅读详情
AI摘要

本文介绍密码技术产生背景、重要性,对比古典与现代密码,重点阐述现代密码体系。现代密码含哈希函数、消息认证码、对称与非对称密码等基础技术,还涉及数字证书、数字信封、密钥协商、SSL/TLS等应用,助力读者入门密码学。

本文组织

  • 简介:介绍密码技术产生背景、重要性、以及发展阶段

  • 现代密码体系

  • 数字证书

  • 数字信封

  • 密钥协商

  • TLS/SSL通信

  • 常见实现和推荐

  • 总结

  • 参考资料

简介

密码技术产生的背景

密码技术最早应用于军事,并随着社会和信息技术的发展不断演变。

密码技术的发展背景:

  • 军事和外交:密码技术的起源可以追溯到古代,最早的密码用于军事和外交通信,以保护敏感信息不被敌方获取。例如,古希腊的斯巴达使用简单的替换密码,而凯撒密码则是古罗马的一种著名加密方法。

  • 商业秘密:随着商业活动的增加,商人们也开始使用密码来保护交易信息和商业秘密。

  • 计算机和网络的兴起:20世纪中叶,计算机技术的快速发展和互联网的普及使得信息的传输和存储变得更加便捷,但同时也带来了信息安全的挑战。黑客攻击、数据泄露等问题日益严重,促使密码技术的发展。

  • 数字化转型:进入21世纪,信息化和数字化的浪潮席卷各个行业,个人和组织在日常生活和工作中产生大量敏感数据,保护这些数据的安全成为迫切需求。

密码技术在信息安全中的重要性

信息安全是指保护信息的机密性、完整性和可用性,以防止未授权访问、使用、披露、破坏或修改。信息安全的目标是确保信息在存储、处理和传输过程中的安全性,防止信息泄露、丢失或被篡改。 信息安全的基本要素包括几个重要的属性:

  • 机密性(Confidentiality):机密性是指保护信息不被未授权的用户访问或泄露的能力,机密性确保只有被授权的用户或系统能够访问特定的信息。这通常通过加密、访问控制和身份验证等手段来实现。机密性的重要性在于保护敏感数据(如个人信息、财务数据和商业机密)不被泄露或滥用。

  • 完整性(Integrity):完整性是指确保信息在存储、传输和处理过程中保持准确和一致的能力。完整性确保数据未被未授权的用户篡改或损坏。这可以通过使用哈希函数、数字签名和校验和等技术来验证数据的完整性。完整性的重要性在于确保信息的真实性和可靠性,防止数据被恶意修改或损坏。

  • 可用性(Availability):可用性是指确保信息和系统在需要时能够被授权用户访问的能力。可用性确保系统和数据在任何时候都能正常运行,用户可以随时访问所需的信息。这通常涉及到系统的冗余设计、备份和恢复策略,以及防止拒绝服务攻击(DoS)等措施。可用性的重要性在于确保业务连续性和用户满意度。

  • 不可否认性(Non-repudiation):不可否认性是指确保发送方或接收方无法否认其参与某个通信或交易的能力。:不可否认性通常通过数字签名和审计日志等技术来实现。它确保交易的双方都无法否认其行为,从而提供法律和合规性支持。这在电子商务和法律文件中尤为重要,确保交易的真实性和责任。

  • 可控性(Controllability):可控性是指对信息和系统的访问和使用进行有效管理和控制的能力。可控性确保组织能够监控和管理对信息的访问权限,确保只有授权用户能够访问和操作特定的信息。这通常涉及到访问控制策略、用户身份验证和权限管理等措施。可控性的重要性在于防止内部和外部的安全威胁,确保信息的安全性和合规性。

其中前三者在信息安全等级保护中通常被称为信息安全三要素CIA(英文首字母简称)。随着计算机和信息技术的发展,信息安全越来越受到重视,国内相继颁布了类似《个人数据保护法》、《网络安全法》等相关法律条例。密码技术作为信息安全的核心技术手段,目前已非常成熟。

古典密码vs现代密码

密码技术的发展可以分为两个阶段,第一个阶段是公元前几世纪至20世纪初的古典密码,第二个阶段是20世纪中叶至今的现代密码

对比古典密码现代密码
定义古典密码是指在计算机技术普及之前使用的传统加密方法,
通常基于简单的替换或置换技术。现代密码是指在计算机和网络技术发展后,
采用复杂算法和数学理论进行加密的技术。
举例凯撒密码、维吉尼亚密码、替换密码等AES(高级加密标准)、RSA、ECC等
加密方法主要使用替换和置换技术使用复杂的数学算法和密钥管理
密钥管理通常手动管理,密钥长度较短采用自动化密钥管理,密钥长度较长
安全性安全性较低,易受频率分析等攻击安全性高,抵御多种攻击方式
适用场景适用于简单的通信和信息保护适用于复杂的网络通信和数据保护
实现复杂度实现相对简单实现较为复杂,需要专业知识
计算需求计算需求低计算需求高,通常需要专用硬件支持

由于古典密码与现代密码相比,在密码技术构造上比较简单且仅包含加解密技术,我们这里不做过多介绍,感兴趣的可以搜索维基百科古典密码。后文我们主要针对现代密码进行介绍。

现代密码

现代密码(Modern Cryptography)是指在计算机科学和信息技术发展背景下,采用复杂的数学算法和理论来实现数据加密、身份验证、数据完整性和不可否认性等安全功能的技术。现代密码学不仅关注数据的机密性,还涉及多个方面的安全性,广泛应用于网络通信、电子商务、数据存储等领域。

现代密码技术体系:

image

  • 现代密码包含4大基础密码技术:对称密码、非对称密码、哈希函数和消息认证码。

  • 哈希函数和消息认证码通常用于实现数据完整性,其中消息认证码还可以用于实现数据认证。

  • 对称加密和非对称加密用于实现数据的保密性,非对称加密还可以用于实现数字签名。

  • 基础密码技术可以组合使用,构建更复杂的密码协议和安全机制,如数字证书、数字信封、SSL/TLS等。

哈希函数

哈希函数(Hash Function)是一种将任意长度的输入数据映射为固定长度输出的函数,通常用于实现数据的完整性验证和数据摘要。哈希函数有多个名称,如散列函数、摘要函数等

image

哈希函数的特点是:

  • 哈希函数的输出长度固定,通常为128位、256位、512位等。

  • 哈希函数是单向函数,不可逆,无法从哈希值反推原始数据。

  • 哈希函数碰撞概率极低,即不同的输入数据产生相同的哈希值的概率极小,碰撞概率可忽略不计。

  • 哈希函数的计算速度快,适合大规模数据处理。

  • 常见的哈希函数有MD5、SHA-1、SHA-256、SHA-3、国密SM3等。

  • 哈希函数常用于密码学中的数据完整性验证、数字签名、消息认证码等。

哈希函数构造:

其中:为消息,为哈希值/摘要值,为哈希算法

哈希函数使用流程:

  • 发送者使用哈希函数计算消息的摘要,并将发送给接受者

  • 接受者使用哈希函数重新计算消息的摘要, 并比较, 如果相等则表示消息是完整的。

注:哈希函数一般不单独使用,通常会结合数字签名技术,防止攻击者同时修改,造成消息被篡改,但是验证仍然通过。

消息认证码

消息认证码(Message Authentication Code, MAC, 又称为_HMAC_)是一种用于验证消息完整性和真实性的密码技术,通常由一个密钥和消息组成,生成固定长度的认证码。消息认证码常用于验证数据的完整性和真实性,防止数据被篡改或伪造。

image

消息认证码的特点是:

  • 消息认证码使用密钥对消息进行加密,生成固定长度的认证码,发送者和接收者需要共享密钥。

  • 消息认证码是单向函数,不可逆,无法从认证码反推原始消息。

  • 消息认证码碰撞概率极低,即不同的消息产生相同的认证码的概率极小,碰撞概率可忽略不计。

  • 消息认证码计算速度快,适合大规模数据处理。

  • 消息认证码可以验证消息的完整性和真实性,防止数据被篡改或伪造。

  • 常见的消息认证码算法有HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA3、HMAC-SM3等

  • 消息认证码常用于数据认证、数据完整性验证等场景。

消息认证码构造:

其中,为密钥(不公开), 为消息,为消息认证码算法

消息认证码使用流程:

  • 共享密钥:首先发送者和接受者要共享密钥,可以通过密钥协商协议生成、也可以由一方生成并安全传输给另一方。

  • 发送者计算消息的认证码,并将发送给接受者。

  • 接受者使用重新计算消息的消息认证码, 并比较, 如果相等则表示消息是完整的。

对称密码

对称密码(Symmetric Encryption)是一种加密技术,使用相同的密钥对数据进行加密和解密,是最早的加密技术之一。对称加密的特点是加密和解密使用相同的密钥,速度快,适合大规模数据加密。

image

对称加密的特点是:

  • 对称加密使用相同的密钥对数据进行加密和解密,发送者和接收者需要共享密钥。

  • 对称加密速度快,适合大规模数据加密。

  • 常见的对称加密算法有DES、3DES、AES、RC4、IDEA、国密SM4等

  • 对称加密常用于数据加密、数据保护、数据传输等场景。

对称加密一般分为两大类:分组密码和流密码。分组密码是将明文分成固定长度的数据块,每个数据块使用相同的密钥进行加密,常见的分组密码有DES、IDEA、AES、SM4等。流密码是将明文和密钥进行按位异或运算,逐位加密,常见的流密码有RC4等。

特性分组密码流密码
加密方式将明文分成固定长度的块进行加密逐位对明文进行加密
密钥长度密钥长度与明文分组长度一致,较短密钥序列长度与明文长度一致,较长
应用场景适用于需要高安全性的场景,如数据存储和网络通信适用于需要高速加密和解密的场景,如无线通信和VPN
效率可以并行对多个分组进行加密和解密,效率较高逐位进行加密和解密,处理长明文时效率较低
安全性提供较高的安全性,但密钥管理困难安全性较高,但存在潜在的安全隐患,如重合攻击

分组密码有多种加密模式,对比如下:

分组加密模式优点缺点备注
ECB
电子密码本模式简单、快速、支持并行计算重复明文反映在密文中
不抵御重放攻击不应使用
CBC
密文分组链接不反映明文重复
支持解密并行计算解密时错误传播
加密不支持并行计算不推荐
CFB
密文反馈无需填充
支持解密并行计算加密不支持并行计算
错误传播不推荐
OFB
输出反馈无需填充
预先加密解密不支持并行计算
主动攻击可反转比特不推荐
CTR
计数器无需填充
预先加密解密
支持并行计算主动攻击可反转比特推荐
GCM (Galois/Counter模式)无需填充
结合计数器模式和AEAD认证机制,提供加密和数据完整性验证; </br> 高效且安全,适合需要认证的场景。实现相对复杂。推荐

在实际应用中,分组加密模式CBC和CTR使用较为广泛,但目前来说GCM在整体表现上更加优异,推荐使用GCM分组加密模式。

对称加密构造:

  • 加密

  • 解密

其中:为密钥,为明文,为密文,为加密算法,为解密算法,为用于认证的额外数据。

对称加密使用流程:

  • 共享密钥:首先发送者和接受者要共享密钥,可以通过密钥协商协议生成、也可以由一方生成并安全传输给另一方。

  • 发送者使用密钥对明文进行加密,生成密文,并将发送给接受者。如果要对数据进行认证,还需要提供额外的认证数据。

  • 接受者使用密钥对密文进行解密,还原明文,并验证认证数据,确保数据的完整性和真实性。

非对称密码

非对称密码: 非对称密码(Asymmetric Encryption)是一种加密技术,使用一对密钥(公钥和私钥)对数据进行加密和解密,是现代密码学的重要组成部分。非对称加密的特点是加密和解密使用不同的密钥,安全性高,适合密钥分发和数字签名。

image

非对称密码的特点是:

  • 非对称加密(公钥加密)使用一对密钥(公钥和私钥)对数据进行加密和解密,发送者和接收者分别持有公钥和私钥,公钥用于加密,私钥用于解密。

  • 数字签名使用一对密钥(公钥和私钥)对数据进行签名和验证,发送者和接受者分别持有私钥和公钥,私钥用于签名,公钥用于验证。

  • 公钥加密速度慢,不适合大规模数据加密,多用于数字信封、密钥协商。

  • 常见的公钥加密算法有RSA、ElGamal、ECC等

  • 常见的数字签名算法有RSA、Elgamal、ECDSA、DSA、Schnorr等

  • 非对称密码常用于密钥协商、数据传输、身份鉴别等

公钥加密构造:

  • 加密:

  • 解密:

其中:为公钥,为私钥,为明文,为密文,为加密算法,为解密算法。

公钥加密使用流程:

  • 密钥分发:接受者生成一对密钥(公钥和私钥),将公钥发送给发送者,私钥保密。

  • 加密:发送者使用接受者的公钥对明文进行加密,生成密文,并将发送给接受者。

  • 解密:接受者使用自己的私钥对密文进行解密,还原明文。

数字签名构造:

  • 签名:

  • 验证:

其中:为公钥,为私钥,为消息,为签名,为签名算法,为验证算法。

数字签名使用流程:

  • 密钥分发:发送者生成一对密钥(公钥和私钥),将公钥发送给接受者,私钥保密。

  • 签名:发送者使用自己的私钥对消息进行签名,生成签名,并将发送给接受者。

  • 验证:接受者使用发送者的公钥对消息和签名进行验证,验证通过则表示消息是真实的。

数字证书

数字证书(Digital Certificate)是一种用于证明公钥拥有者身份的数字文件,通常由第三方机构(CA)颁发,用于保护公钥的安全性和真实性。数字证书包含公钥、证书持有者信息、证书颁发机构信息、证书有效期等信息。

数字证书一般采用X.509标准格式, 以下是一个数字证书示例:

➜ cat tmp.crt   -----BEGIN CERTIFICATE-----   MIIDCzCCArGgAwIBAgIDCzvxMAoGCCqBHM9VAYN1MIGKMQswCQYDVQQGEwJDTjEQ   MA4GA1UECBMHQmVpamluZzEQMA4GA1UEBxMHQmVpamluZzEfMB0GA1UEChMWd3gt   b3JnMS5jaGFpbm1ha2VyLm9yZzESMBAGA1UECxMJcm9vdC1jZXJ0MSIwIAYDVQQD   ExljYS53eC1vcmcxLmNoYWlubWFrZXIub3JnMB4XDTIxMDcwODAyMTk0M1oXDTI2   MDcwNzAyMTk0M1owgZAxCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAw   DgYDVQQHEwdCZWlqaW5nMR8wHQYDVQQKExZ3eC1vcmcxLmNoYWlubWFrZXIub3Jn   MQ8wDQYDVQQLEwZjb21tb24xKzApBgNVBAMTImNvbW1vbjEudGxzLnd4LW9yZzEu   Y2hhaW5tYWtlci5vcmcwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAASVkTdOzqcQ   gcUapVaZLdY0voaLwJLC4VsW8TLUSlf2fB2Svv1ziLIu0820B0Hy2srmbGsv4p8z   YzzUJieqVkmfo4H9MIH6MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUA   MCkGA1UdDgQiBCC0EHcZQ5jKeAZup7zn93OK3hzDrfzo5cAjP8coQ6dvijArBgNV   HSMEJDAigCD1tn8t4FRAXu6Gcn9qDx6BkI1n5Ngyrz4FD6i7jL5tTjBOBgNVHREE   RzBFgg5jaGFpbm1ha2VyLm9yZ4IJbG9jYWxob3N0giJjb21tb24xLnRscy53eC1v   cmcxLmNoYWlubWFrZXIub3JnhwR/AAABMC8GC4EnWI9kCx6PZAsEBCAwYjA3YzU4   Mjc1ZGE0YWY0YjQ1M2U0Mjg5OTA1N2I5ZTAKBggqgRzPVQGDdQNIADBFAiB7+V4u   TvnhR+oM05uZ45MaswjiKXPQvuzoMwDh14i63gIhAJxQnggig2UXg9Pz9ptU+k40   R36JDCfTS4w308er0ylX   -----END CERTIFICATE-----      ➜  openssl x509 -in tmp.crt -noout -text   Certificate:       Data:           Version: 3 (0x2) # 证书版本           Serial Number: 736241 (0xb3bf1) # 证书序列号           Signature Algorithm: SM2-with-SM3 # 签名算法           Issuer: C=CN, ST=Beijing, L=Beijing, O=org1, OU=root-cert, CN=ca..org # 颁发者           Validity               Not Before: Jul  8 02:19:43 2021 GMT # 有效期开始时间               Not After : Jul  7 02:19:43 2026 GMT # 有效期结束时间           Subject: C=CN, ST=Beijing, L=Beijing, O=org1, OU=common, CN=common1.org # 主体           Subject Public Key Info: # 公钥信息               Public Key Algorithm: id-ecPublicKey                   Public-Key: (256 bit)                   pub:                       04:95:91:37:4e:ce:a7:10:81:c5:1a:a5:56:99:2d:                       d6:34:be:86:8b:c0:92:c2:e1:5b:16:f1:32:d4:4a:                       57:f6:7c:1d:92:be:fd:73:88:b2:2e:d3:cd:b4:07:                       41:f2:da:ca:e6:6c:6b:2f:e2:9f:33:63:3c:d4:26:                       27:aa:56:49:9f                   ASN1 OID: SM2 # 公钥算法           X509v3 extensions: # 证书扩展信息               X509v3 Key Usage: critical # 密钥用途                   Digital Signature, Key Encipherment, Certificate Sign, CRL Sign               X509v3 Extended Key Usage: # 扩展密钥用途                   Any Extended Key Usage               X509v3 Subject Key Identifier: # 主体密钥标识符                   B4:10:77:19:43:98:CA:78:06:6E:A7:BC:E7:F7:73:8A:DE:1C:C3:AD:FC:E8:E5:C0:23:3F:C7:28:43:A7:6F:8A               X509v3 Authority Key Identifier: # 颁发者密钥标识符                   F5:B6:7F:2D:E0:54:40:5E:EE:86:72:7F:6A:0F:1E:81:90:8D:67:E4:D8:32:AF:3E:05:0F:A8:BB:8C:BE:6D:4E               X509v3 Subject Alternative Name: # 主体备用名称                   DNS:chainmaker.org, DNS:localhost, DNS:common1.org, IP Address:127.0.0.1               2.87.88.2020.11.30.2020.11.4:                   0b07c58275da4af4b453e42899057b9e       Signature Algorithm: SM2-with-SM3 # 签名算法       Signature Value: # 签名值,用于验证证书的真实性           30:45:02:20:7b:f9:5e:2e:4e:f9:e1:47:ea:0c:d3:9b:99:e3:           93:1a:b3:08:e2:29:73:d0:be:ec:e8:33:00:e1:d7:88:ba:de:           02:21:00:9c:50:9e:08:22:83:65:17:83:d3:f3:f6:9b:54:fa   

从上面我们可以看到数字证书包含了以下关键信息:

  • 证书版本、序列号、签名算法、颁发者、有效期、主题、公钥信息等。

  • 证书扩展信息,如密钥用途、扩展密钥用途、主题密钥标识符、颁发者密钥标识符、主题备用名称等。

  • 证书签名算法和签名值,用于验证证书的真实性。

数字证书的颁发

数字证书的颁发一般由证书颁发机构(Certificate Authority, CA)负责,CA是一种可信的第三方机构,负责验证证书持有者的身份,签发数字证书,并提供证书撤销服务。数字证书的申请、颁发、撤销等我们称之为PKI体系(Public Key Infrastructure)。

PKI体系如下:

image

主要流程介绍:

  • 1-1初始化:证书申请者本地生成一对密钥(公钥和私钥),并生成证书请求(CSR),包含公钥、证书持有者信息等。

  • 1-2证书申请:证书申请者将证书请求(CSR)发送给RA,申请数字证书。

  • 1-3验证身份:RA对证书申请者的身份进行验证,包括个人身份、组织身份、域名身份等。

  • 1-4签发证书:RA将验证通过的证书请求发送给CA。

  • 1-5证书签发:CA对证书请求进行签名,生成数字证书。

  • 1-6证书颁发:CA将数字证书发送给证书申请者。

  • 2-1出示数字身份:证书持有者在通信时,使用私钥签名消息,并出示数字证书。

  • 2-2验证数字身份:通信对方(验证者)使用CA根证书验证数字证书的真实性,然后获取数字证书中的公钥并验证签名。

  • 2-3数字身份验证通过:数字证书&数字签名验证通过表明证书持有者的身份是真实的,验证者可以信任对方。

需要注意的是,在实际的PKI建设中:

  1. RA和CA大多数情况下是同一个机构,RA负责验证证书申请者的身份,CA负责签发数字证书。

  2. CA可以是根CA、中间CA,根CA负责签发中间CA的证书,中间CA负责签发终端用户的证书。所以数字证书的信任链是根CA->中间CA->终端用户多级结构。

  3. 证书撤销:数字证书的有效期有限,如果证书持有者的私钥泄露或者证书信息发生变更,需要撤销数字证书。CA会维护一个证书撤销列表(CRL),用于记录已经撤销的证书。在验证者验证数字证书时,会检查CRL列表,确保数字证书没有被撤销。

  4. 数字证书申请者可以选择自己生成密钥对,也可以选择CA生成密钥对,然后由CA在颁发证书时一同发送给申请者。

数字信封

数字信封(Digital Envelope)是一种用于保护数据机密性的加密技术,通常使用对称加密和非对称加密相结合的方式,实现数据的加密和解密。数字信封的基本思想是使用对称加密算法对数据进行加密,然后使用非对称加密算法对对称加密密钥进行加密,最后将加密后的数据和加密后的密钥一起发送给接收者。

image

数字信封的特点是:

  • 数字信封使用对称加密算法对数据进行加密,速度快,适合大规模数据加密。

  • 数字信封使用非对称加密算法对对称加密密钥进行加密,解决了密钥分发的问题。

  • 数字信封常用于大数据共享、数据传输、数据存储等场景。

数字信封的构造:

  • 生成数字信封(SEAL)

  • 打开数字信封(OPEN)

其中:为对称加密密钥,为公钥,为私钥,为明文,为密文,为加密后的对称加密密钥,为对称加密算法,为对称解密算法,为非对称加密算法,为非对称解密算法。为可选参数,用于认证的额外数据。

数字信封使用流程:

  • 公钥分发:数据接受者拥有一对密钥(公钥和私钥),将公钥发送给数据发送者。

  • 生成数字信封:数据发送者生成对称加密密钥,使用对明文进行加密,生成密文,然后使用接受者的公钥对进行加密,生成加密后的密钥。并将发送给接受者。

  • 打开数字信封:数据接受者使用自己的私钥对进行解密,获取对称加密密钥,然后使用对密文进行解密,还原明文。

密钥协商

密钥协商:密钥协商(Key Agreement)是一种用于双方协商共享密钥的技术,通常使用非对称加密算法实现,用于解决密钥分发的问题。密钥协商有多种算法,如DH算法、ECDH算法、ECDHE算法、RSA算法等,其中DH算法和ECDH算法是最常用的密钥协商算法、ECDHE算法是最安全密钥协商算法,它们都基于Diffie-Hellman协议,如下:

Diffie-Hellman协议:

image

密钥协商的特点是:

  • 密钥协商使用非对称加密算法协商共享密钥,解决了密钥分发的问题。

  • Diffie-Hellman密钥交换算法大多基于离散对数问题,安全性高。

  • Diffie-Hellman密钥交换算法有很多变体,可以实现前向保密,如ECDHE具有前向保密性。

  • 密钥协商常用于TLS/SSL协议、IPSec协议、SSH协议等。

  • 存在中间人攻击问题

中间人攻击问题:

image

说明:

  • Eve攻击者可以截获并中断Alice和Bob的直接通信,充当中间人

  • Eve攻击者可以伪装成Bob,向Alice发送自己的公钥,同时伪装成Alice,向Bob发送自己的公钥

  • Alice和Bob分别使用Eve的公钥生成共享密钥,Eve可以解密和篡改Alice和Bob之间的通信

中间人攻击的解决方案:

  • 数字证书:Alice和Bob使用CA颁发的数字证书验证对方的身份,防止中间人攻击

  • 数字签名:Alice和Bob使用私钥对消息进行签名,接收方使用公钥验证签名(该公钥来自对方的数字证书),确保消息的真实性

  • 密钥协商:Alice和Bob使用密钥协商算法协商共享密钥,确保通信的安全性

SSL/TLS

SSL/TLS(Secure Sockets Layer/Transport Layer Security)是一种用于保护网络通信安全的加密协议,通常用于Web浏览器和Web服务器之间的安全通信。SSL/TLS协议使用对称加密、非对称加密、数字证书、数字信封以及密钥协商等技术,实现数据的加密、身份验证、数据完整性验证等功能。

SSL/TLS相关介绍可以参考之前的文章:

  • TLS原理与实践(一)

  • TLS原理与实践(二)

  • TLS原理与实践(三)tls1.3

  • TLS原理与实践(四)国密TLS

常见密码技术和推荐

密码技术国际算法/协议国产算法/协议推荐备注
哈希函数MD5、SHA1、SHA2系列、SHA3系列SM3SHA2、SHA3、SM3区块链主要使用SHA3系列的Keccak-256,主流的互联网系统使用SHA2-256
消息认证码HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA3HMAC-SM3HMAC-SHA256、HMAC-SM3无
对称密码DES、3DES、AES、IDEASM4AES、SM4AES为美国国家密码标准,当前使用最广泛的对称密码算法
非对称密码RSA、ElGamal、ECC系列SM2ECC系列、SM2SM2也是一种基于ECC的密码算法,此类算法密钥短、效率高,是目前主流的非对称密码算法;
此外RSA在金融系统以及较早建立的IT系统中也较为常见
数字证书X.509标准X.509标准X.509标准数字证书仅为一种数据格式规范,不单独涉及密码算法
数字信封对称密码和非对称密码算法的组合算法SM4和SM2的组合算法AES-ECC组合,SM4-SM2组合无
SSL/TLSTLS1.1、TLS1.2、TLS1.3GMTLS1.1TLS1.2、TLS1.3、GMTLS1.1TLS1.2是当前最常见的TLS协议;
TLS1.3具有更高的安全性和握手效率,并且支持扩展国密算法;
GMTLS1.1是国产唯一的TLS协议,但国内还未普及;

结语

本文主要介绍了密码技术的应用背景和发展历程,并针对现代密码学中最常用的基础密码技术和应用进行了详细介绍,包括哈希函数、消息认证码、对称加密、非对称加密、数字证书、数字信封、密钥协商、SSL/TLS等,希望对大家有所帮助。

密码技术具有很深的理论基础,本文的内容主要针对入门级别,更深入的内容需要大家进一步学习和探索。密码学是信息安全的基础,掌握密码学的基础知识对于理解信息安全技术和应用非常重要。

参考文献

  • 【1】维基百科-哈希函数

  • 【2】维基百科-消息认证码

  • 【3】维基百科-对称密码

  • 【4】维基百科-非对称密码

  • 【5】维基百科-数字证书

  • 【6】百度百科-数字信封

  • 【7】TLS原理与实践

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划

  2. 配套视频教程

  3. SRC&黑客文籍

  4. 护网行动资料

  5. 黑客必读书单

  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

密码学基本理论 密码学基础知识、密码体制分类、常见密码算法、Hash函数与数字签名、密钥管理与数字证书、安全协议、密码学网络安全应用 阅读详情

相关推荐

现代密码学(Introduction to Modern Cryptography)

现代密码学三个基本原则: 1.Formulation of exact definitions 2.Reliance on precise assumptions 3.Rogorous proofs of security

ma_sherlock的博客 4544

密码学基础知识总结

密码学、Diffiie-Hellam、DH、SHA1、SHA256、SM1、SM2、SM9、对称加密、非对称加密、分组加密、流密码、BLS短签名

qq_41977843的博客 2万+

Beyond the Spec: Decoding Samsung‘s LPDDR6 Sub-Channel and Wide-NRZ Innovations

本文深入解析了三星LPDDR6内存的两大核心技术:Sub-Channel架构与Wide-NRZ信号技术。Sub-Channel架构通过将物理通道划分为多个独立子通道,实现了内存访问的细粒度控制,大幅提升了能效,尤其适用于AI与边缘计算场景。Wide-NRZ则通过增加并行数据线而非采用PAM4,在提升带宽的同时保持了优异的信号完整性与低功耗特性。

weixin_29209801的博客 136

密码学简述(非常详细),零基础入门到精通,看这一篇就够了

密码学简述(非常详细),零基础入门到精通,看这一篇就够了

分享Python知识 1万+

深入RK3588嵌入式Linux开发:uboot源码定制化移植实战

本文详细介绍了RK3588嵌入式Linux开发中,如何绕过庞大的官方SDK,从官方仓库获取纯净U-Boot源码并进行定制化移植的完整实战流程。内容包括编译环境搭建、交叉工具链配置、源码结构解析、设备树(Device Tree)修改、环境变量定制、编译脚本编写以及常见问题调试技巧,旨在帮助开发者深入理解系统引导过程,掌握为定制硬件适配U-Boot的核心技能。

weixin_29169505的博客 423

WPS JS宏实战:批量调整200个Word表格格式的避坑指南(附完整代码)

本文提供了一份详尽的WPS JS宏实战指南,针对批量调整大量Word表格格式的需求。文章深入解析了如何利用JS宏自动化设置字体、行距和边框,并重点解决了常见的“首行访问报错”等核心难题,附有可直接使用的完整代码,帮助用户显著提升文档处理效率。

weixin_29280219的博客 430

一文入门现代密码学,从零基础到精通,收藏这篇就够了!

密码技术最早应用于军事,并随着社会和信息技术的发展不断演变。密码技术的发展背景:军事和外交:密码技术的起源可以追溯到古代,最早的密码用于军事和外交通信,以保护敏感信息不被敌方获取。例如,古希腊的斯巴达使用简单的替换密码,而凯撒密码则是古罗马的一种著名加密方法。商业秘密:随着商业活动的增加,商人们也开始使用密码来保护交易信息和商业秘密。计算机和网络的兴起:20世纪中叶,计算机技术的快速发展和互联网的普及使得信息的传输和存储变得更加便捷,但同时也带来了信息安全的挑战。

Javachichi的博客 1450

Bugku中的source

进入环境后 我们首先查看源码可以得到一个flag 这肯定是个假的(已经提交过了确实是个假的) 题目提示要用Linux 这里使用的是kali 我们首先dirsearch一下这个网站 可以看到有.git文件泄露 也可以点开那个链接但是在里面没有找到flag 然后选择下载这个.git文件 然后进入这个文件夹 输入git reflog查看文件状态 可以看到有四个都有flag is here 一个一个查看git show 然后在40c6d51中发现了我们需要的fl

A272036149的博客 1011

现代密码学教程,零基础入门到精通,收藏这篇就够了

目录密码学总结第一章——只因础模型与概念1.1 密码学五元组(结合🐏皮卷)1.2 Dolev-Yao威胁模型1.3 攻击类型1.4 柯克霍夫原则(Kerckhoffs’s principle)1.5 对称、非对称加密1.6 密码的目标1.7 保密通信模型第二章——古典密码2.1 仿射密码2.2 Hill密码例题0 ——解同余方程组例题1——仿射密码例题2——希尔密码第三章——DES算法IP置换E扩展S盒压缩P盒置换秘钥生成分组加密扩散与混淆3DES第四章——高级加密标准4.1 x乘法4.2 AES算法。

Libra1313的博客 1953

Altair HyperWorks 2022.3.0 Suite下载

Altair HyperWorks开发团队提供了新的一流技术,以设计和优化高性能、高效和创新的产品,并发布了HyperWorks 2021.2套件。与所有新版本一样,这个版本包含了新特性、增强功能,并修复了前一个版本中用户报告的各种问题,提供了总体上更稳定的体验。链接: https://pan.baidu.com/s/1rYietmQLQUboHiJzYoE9WQ?pwd=m9yh 提取码: m9yh 复制这段内容后打开百度网盘手机App,操作更方便哦。

weixin_48469365的博客 2127

黑金AXU9EG开发板深度学习部署全流程解析

本文详细解析了黑金AXU9EG开发板的深度学习模型部署全流程,从环境搭建、模型转换到上板验证,提供了实用的技术指导和优化技巧。该开发板基于Xilinx Zynq UltraScale+ MPSoC架构,特别适合边缘计算场景,通过FPGA加速实现高效AI推理。

weixin_29062613的博客 447

【2025版】一文入门现代密码学,从零基础到精通,收藏这篇就够了!

密码技术最早应用于军事,并随着社会和信息技术的发展不断演变。密码技术的发展背景:军事和外交:密码技术的起源可以追溯到古代,最早的密码用于军事和外交通信,以保护敏感信息不被敌方获取。例如,古希腊的斯巴达使用简单的替换密码,而凯撒密码则是古罗马的一种著名加密方法。商业秘密:随着商业活动的增加,商人们也开始使用密码来保护交易信息和商业秘密。计算机和网络的兴起:20世纪中叶,计算机技术的快速发展和互联网的普及使得信息的传输和存储变得更加便捷,但同时也带来了信息安全的挑战。

喜欢Python编程的程序员柚柚呀 1085

USB2.0基础知识总结

目录 1、协议层: 1.1、域分类 1.2 、USB传输方式: 1、协议层: 域和包定义:包是一次传输的单位,每个包由多个域组成; USB中是按照LSB进行字节传输; 1.1、域分类 1.1.1: 同步域(SYNC field) 所有的包都开始于同步域,在低速和全速通信中SYNC field用7个0和1个1来表示。 由于USB2.0使用了NRZI编码(0用翻转来表示,1用不翻转表示),所以00000001就是上图那样。 ...

qq_32938605的博客 4409

现代密码学-密码学概论与基本知识(非常详细)从零基础到精通,收藏这篇就够了!

本文或本专栏针对现代密码学,传统密码有提及,但不会深入,想深入了解,请移步其他作者的专栏。算法没有自己实现,基本是采用Go语言去调库,感兴趣的读者请自行阅读crypto等标准库源代码。

Libra1313的博客 1008

紫光展锐面试——FPGA/IC设计面试面经案例总结

自我介绍;研究生的主要研究方向是什么?为什么想要应聘数字芯片相关的工作?简单介绍下数字IC设计流程。逻辑综合主要做什么?你有实际做过逻辑综合工作吗?你了解SS corner和FF corner吗?综合时应该使用哪个corner?综合时需要考虑hold吗?为什么?提高时钟频率对setup和hold有什么影响?为什么?hvt、rvt/svt、lvt有什么区别?c40、c50是指什么概念?有什么区别?你对EDA工具有过了解吗?

FPGA/MATLAB学习教程/源码/项目合作开发 1563

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

密码学属于什么专业(非常详细),零基础入门到精通,看这一篇就够了

密码学属于信息安全专业。

Spontaneous_0的博客 1286

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

一文读懂密码基础,从零基础到精通,收藏这篇就够了!

佛系随性笔记,记录最好的自己!个人水平比较有限,每篇都尽量以白话+图文的方式去说明原理。01什么是密码?密码就是一种用于保护信息安全、确保信息机密性和完整性的加密方式。从广义上讲,密码可以是字符、数字、符号或它们的组合,通过特定的规则或算法进行变换,只有掌握密钥的人能够理解其真实含义。举两个栗子:这里的藏头诗"芦俊义杀人"是一个暗号,暗示了行动计划的关键人物和行动内容。2、阿塔兰塔密码:是一种古老的希伯来字母替换密码,其中明文的每个字母被其在字母表中的反向字母替换。

喜欢Python编程的程序员柚柚呀 1678

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

密码学基础之进制与编码,(非常详细)从零基础到精通,收藏这篇就够了!

第二颗🌰,现在我们设 ,有 ,其中的每一个元素我们用两个十六进制字符来表示,即 ,然后拼接。转化为十进制就是 ,不过由于256进制下的一个元素又是有两个16进制字符表示的,所以其实整个 也可以看作是 16 进制数,以第一个元素为例, ,于是 也可以记为。对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。这也是耗费了大白近四个月的时间,吐血整理,文章非常非常长,觉得有用的话,希望粉丝朋友帮忙点个**「分享」

leah126的博客 835

密码学,零基础入门到精通,收藏这篇就够了!!!

身份基加密(IBE)属性基加密(ABE)全同态加密动态加密联邦学习智能安全量子计算区块链格密码。

logic1001的博客 1070
上一篇: 关于Windows提权,这些事项你要注意,(非常详细)从零基础到精通,收藏这篇就够了
下一篇: IT运维、网络工程师失业后可以尝试的18个副业方向!(非常详细)从零基础到精通,收藏这篇就够了!
程序员_大白
博客等级 码龄5年 1万+粉丝 4001原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值