密码学在区块链隐私保护中的应用学习

身份隐私保护技术

混淆服务

  • 混淆服务的目的在于混淆消息双方的联系(如 图 2 所示)。当发送方需要告知接收方消息 M 时, 它会首先用接收方的公钥 KB 加密 M,并在密文后 附带真实接收地址 R。为了借助第三方(图 2 中的 混淆服务器)的能力隐藏交易双方的关联性,发送 方会继续用第三方的公钥 KI 做第二重加密,并将结果(见下方公式的箭头左侧)提交给第三方。

  • 当第三方接收到若干密文后,分别进行解密以获取原始密文,并根据解密出来的地址进行转发 ; 接收方收到消息后可自行解密获知消息 M。整个过程用加密方式保证接收方地址不可见,用双重随机数保证每次会话之间不可链接。当第三方处理的交易达到一定数量时,可以有效实现消息来源与目的地之间关系的混淆。
  • 这种方式部署简单,且与区块链有很好的兼容性,因此得到广泛采用。现有的研究进展主要集中在中心化混淆和分布式混淆两个方面。

中心化混淆

  • 中心化混淆是指混淆服务由单一实体提供,例 如单个服务器、企业等。
  • 目前有多家网站提供有偿 混淆服务,例如 Onionbc、Bitcoin Fog、Bitmixer 等。 他们可以有效隐藏交易地址,但是存在一定的缺陷: (1) 服务提供商本身是潜在的攻击者,存在支付抵赖等欺诈风险 ;(2) 处于中间位置的混淆服务提供商有机会知道并记录交易双方的信息。

第一个问题的解决措施

  • 针对第一个问题,即交易的公平性。
  • 条件执行是可行的方式之一。它设定当且仅当混淆服务商诚实执行混淆服务后,才可以获得服务费,否则什么都得不到。格雷戈里·麦克斯韦 (Gregory Maxwell) 为比特币设计了 CoinSwap 协议 ,允许交易发起者设定哈希锁关联到特定的赎回脚本,防止数字资产被窃取。
  • 另一种解决方法是可信审计,即混淆服务器留下可信凭证,若出现违规行为则可以进行有效追责。例如 Mixcoin基于签名机制保证审计过程的不可抵赖性。
  • 2015 年发布的达世币 (Dash) 尝 试从经济学角度解决中心化混淆方案面临的隐私泄 露问题。该方案中,混淆节点负责汇集并生成混淆 方案,通过预付保证金的方式提高违规代价。
  • 然而, 这几种方案中混淆服务器仍掌握着交易地址间的关联信息

第二个问题的解决措施

  • 盲签名是解决第二个问题的有效方法之一,一 般包括 3 个阶段 :盲化(使用随机盲化因子隐藏消息),签名(签名者对盲化后的消息做签名),去盲化(去掉盲化因子,提取出对消息的有效签名)。此类签名的特点是待签名的消息对签名者不可见。因 此,Blindcoin[4] 将盲签名的思想引入 Mixcoin 中, 既可提供对不当行为的审计凭证,又可以保证混淆 服务器无法分辨所签交易接收方的地址是哪个,从而保证地址信息的隐私性。然而,这种机制要求交易金额必须是固定的,且这种方案无法避免混币节 点的违规行为。
  • TumbleBit[5] 首次同时实现了交易不可链接性 和防资产盗窃。它的思路是利用安全两方计算来 保证用户隐私和交易公平性,主要包括 3 个步骤 : (1) Puzzle-Promise 阶段,接收方与混淆服务器建立 托管交易,加密赎回脚本,并将密文盲化后转交给 发送方。(2) 发送方与混淆服务器执行安全两方计算完成解密。在该过程中,发送方会采用条件交易的方式保证双方的公平性。(3) 接收方将答案去盲化, 赎回托管交易。

问题

  • 上述中心化的混淆方案具有易操作性,但是普遍存在 3 个弊端 :(1) 时延较长,需等待足够多的混 淆请求者,以保证混淆效果 ;(2) 集中式的混淆服务器易遭受拒绝服务 (DoS) 攻击 ;(3) 实际应用中需要支付额外的混淆费用。

分布式混淆

  • 为了减轻因集中式构架带来的单点威胁,同时节约混淆成本,研究人员开始思考分布式的交易混淆模式,即由多个互相不完全信任的对等实体共同执行匿名交易发布,而无需第三方代理。
  • 目前主流 的解决方法有 CoinJoin[6] 和安全多方计算 (MPC)。
  • CoinJoin[6] 的核心思想是“寻找志同道合者一 起交易”。图 3 可以直观地解释 CoinJoin 的思路。

  • 现有由两笔交易 A → C 和 B → D 待支付(图 3 左 侧),CoinJoin 将这两笔交易揉在一起形成一笔 2 输 入、4 输出的交易,外部观察者是无法分辨出这两笔交易的。CoinJoin 因其与比特币的高度兼容性(仅 需利用修改比特币协议的多重签名机制),提出之后很快被应用于工程上,例如 Dark Wallet、Joinmarket 等。 但是 CoinJoin 机制还留有 3 个值得改进的地方 : 1. 缺乏内部不可链接性。以图 3 为例,参与者 A 和 C 是明确知道对方交易信息的。随着参与者数量增多,遭受 Sybil 攻击的可能性也会提高(即某参与者是恶意攻击者假扮的)。 2. 易受 DoS 攻击。此类 DoS 攻击是指攻击者 通过拒绝签署赎回脚本,导致整个交易无法赎回, 由于比特币交易不可撤销,这种攻击很可能会造成严重的资产损失。 3. 从实用的角度来讲,CoinJoin 受制于参与者人数,若人数过少,则无法达到匿名性要求 ;若人数过多,则通信开销呈指数级增长,且提高了被 DoS 攻击的风险。 随后的方案针对这三个问题进行了改进 :Coin- Shuffle[7] 采用层层加密和随机置换的方式洗牌输出 地址,即便是参与者也不知道交易地址间的关联性。 但是,这种方案以高通信和计算成本为代价,同时 对因攻击者拒绝签署赎回脚本而造成损失的状况仍 束手无策。
  • 安全多方计算指的是参与者在无须归集私有数据的情况下完成协同计算,同时保护各数据所有方的原始数据隐私。CoinParty[8] 就是基于安全多方计 算优化分布式混淆过程的一种改进协议,设定交易 的赎回脚本须参与方执行门限签名, 容忍一定数量节点的失效或恶意操作, 可以有效对抗 Sybil 或 DoS 攻击。

环签名

  • 分布式混淆机制需要等待其他参与者一起执行混淆协议,这个过程取决于何时找到具有共同交易意愿的人, 因此等待时延难以预计。而环签名机制,允许用户在无需其他“环”成员 在线的情况下,自行签名,且关于公钥的信息隐藏于整个“环”中,有效保障了签名的身份隐私需求。

原理解释

  • 一般环签名的思路如下图所示,假定“环”中有n 个成员(各自拥有一对公私钥),签名者 A 使 用公钥集合{pk1, …, pkn}和自己的私钥ski产生签名。 这个签名的某个参数根据一定规则呈环状,环签名 由此得名。验证者只能够验证签名结果的合法性, 但无法确定真正的签名者。通过此方法,签名者可 以自由指定自己的匿名范围,并且无须等待环成员在线,可以提供非常优美的匿名性保护。
  • 可链接环签名是环签名的一个变种,设计初期是为了满足同一个签名者签相同消息时的追责需求,例如匿名投票。在环签名的基础结构之上,每 个签名还附带有标签 T=(issue, PK),其中 PK 表示图 4 的环成员公钥集合,issue 是选票的标签。

  • 验证者使用 T=(issue, PK) 而非 PK 来验证环签名,此时可以保证 : 1. 由不同的标签 T 产生的任何签名都是不可链接的 ;2. 用相同的 T 签两个不同的消息,可以及时被发现(即可链接性),但仍可隐藏真实身份。

CryptoNote 和 Monero

  • 区块链有防双重支付的需求,因此若想使用环签名保护签名者的身份隐私,就需要采用可链接环签名的思路(见图 5)。在 CryptoNote[9] 中,签名者 使用一次性私钥生成密钥镜像,作为 T 中的 issue附在交易赎回脚本中。若同一交易赎回两次,则可 以被及时发现并判定无效。

  • 除了使用可链接环签名保证发送方的身份隐私外,CryptoNote 在接收端设定每笔交易仅使用一次 性公私钥对(如图 6 所示的一次性支付 (one-time payment) 机制),即交易的输出目的地址是一个仅可以由发送方和接收方生成的公钥地址,该地址中 包含有随机数,交易赎回后即丢弃,保证交易目标地址不会重复。 但 CryptoNote 明文形式的交易金额会削弱匿名性效果。因此,2014 年公布的 Monero 币借鉴 CryptoNote 的思想,结合可链接自发匿名环签名 (MLSAG) 和机密交易 (Confidential Transaction, CT), 设计环上的机密交易 RingCT[10],把交易金额隐藏在同态密文之后,同时实现了身份隐私和交易隐私。

非交互式零知识证明

  • 非交互式零知识证明 (Non-Interactive Zero- Knowledge proof, NIZK) 是零知识证明的一种,支持 证明者在不提供任何有用信息的情况下,向验证者 证明某论断。这个过程不需要双方同时在线交互, 因此非常适合应用于区块链中进行匿名的消息验证。

原理解释

  • 一般的 NIZK 形式化定义为 :假定概率多项 式时间算法 (P, V) 分别代表证明者和验证者,那么 对于任意安全参数为 k 的描述 ℒ⊆NP,若 (P, V) 是 NIZK 系统,则需满足以下 3 个性质 :

正确性

  • 对于任意 x∈ℒ 及其特定证据 w, 满足如下的公式所示,即若 P 知道论断 x 的证据 w,则一定能通过有 效算法使 V 相信它。

完备性

  • 对于任意 x∉ℒ 和概率多项式算法 P*,满足如下的公式,即若 x 是错误论断,则一定不存在有效算法使 V 相信它

零知识性

  • 对于任意 x ∈ ℒ 和特定证明 w, 存在概率多项式时间模拟器 S 使得以下两组分布计 算不可区分 :

  • 即验证者看到的信息也可以通过一个概率多项 式时间模拟器来模拟,验证者没有获得任何额外信 息。描述中 p(·) 代表多项式,R 代表 NIZK 系统中 的公共参考串 (Common Reference String, CRS)。

Zerocoin 和 Zerocash

  • Zerocoin首次将 NIZK 应用于区块链,让区块链节点在不知道具体交易内容的情况下验证交易的有效性,既保留区块链互相不信任的个体间的共 识达成问题,又可以保护用户隐私。其主要思想类 似于分布式混淆机制,交易前首先熔铸一个数字货 币,然后用一个等价的全新数字货币兑换,其中熔 铸数字货币的真实性和有效性由 NIZK 系统来验证。 具体过程可以形式化为“熔铸→公布→兑换” 三个步骤。
  • 例如 :A 打算向 B 支付一个数字货币。 首先,A 计算随机序列号 sn,用陷门 r 对它做承诺, 得到 cm(该承诺值仅可以通过 (sn, r) 来打开,但无 法计算出 (sn, r))。然后,A 发布带有 cm 的熔铸交易, 区块链节点对执行共识算法进行验证和记录。B 在 做数字货币兑换时需要提供关于如下论断的零知识 证明 π :1, 公共账本中有某个特定的承诺 cm ; 2, B 知道该承诺对应的陷门 r,打开为 sn。 如果 cm 的验证是正确的,并且 sn 未被使用过, 则 B 可以赎回一个新的数字货币 ;否则本次兑换将 因为验证失败而被拒绝。在这个场景中,A 熔铸的 数字货币与 B 赎回的数字货币并无任何关联,这是因为零知识证明 π 保证不会泄露关于 cm 或 sn 的任 何有效信息。

问题

  • 但是 Zerocoin 并不完善,依旧存在一些值得改 进的地方 : 1. 在上述示例中,A 也知道 sn 和陷门 r,有可 能在 B 兑换之前先执行兑换过程,或者当 B 继续做 数字货币交易时,通过追踪 sn 来发现 B 的交易信息。 2. 匿名交易的面额固定,缺乏应用的灵活性。 3. 交易直接公布在公共账本中,未对交易数据 隐私做特殊保护。 Zerocash 针对上述问题进行了改进,配合 zk- SNARK (zero-knowledge Succinct Non-Interactive Arguments of Knowledge) 和加密方案同时保护身份 和交易隐私。

交易隐私保护技术

  • 当前区块链中实现交易隐私保护的两项密码技 术有 :非交互式零知识证明和同态技术。

非交互零知识证明

  • Zerocash[12] 首次应用 zk-SNARK 提供完全的用 户隐私化和交易信息隐藏化。
  • 与 Zerocoin 相比,它 的优势体现在以下 3 个方面。
  • 1. zk-SNARK 具有简洁性,即验证者只需要少 量计算就可以完成验证 ;非交互性,即整个证明过 程仅需交换少量信息。这两个性质对于区块链非常 友好,因为区块链上节点众多,为了能够快速达到 共识,计算复杂度和通信成本都不能过大。
  • 2. 修改数字货币承诺的生成方案,并使用伪随 机函数来确定支付目标地址和序列号,即当数字货 币兑换后,接收方会用私钥产生全新的序列号 sn’, 确保即使发送者知道之前的 sn,仍然无法跟踪或兑 换该数字货币。
  • 3. 支持任意金额的区块链交易,且通过加密技 术保证交易金额、交易随机数、交易目标地址等信 息的隐蔽性。同时,为了验证交易,会在零知识证 明中增加关于交易金额有效性的验证。

问题

  • 以太坊 (Ethereum) 目前也在试图把 Zerocash 的 隐私交易功能作为一个预编译合约链接到智能合约中,即 ZoE (Zcash over Ethereum) 工程,不过即使做了预编译优化,它能提供的隐私验证能力也非常 有限。Hawk 则是一个完全采取 zk-SNARK 的区 块链智能合约部署系统,保证了数据和计算过程在 链上的隐私性和可用性,在保险、股票等金融领域 有着广泛的应用前景。

同态加密技术

  • 同态密码是一类保持密文延展性的加密方案, 支持将密文操作映射到原始数据上,具有天然的数 据隐私性保护。以场景为例,参与方 A 拥有数据 {x1, …, xn},参与方 B 拥有计算逻辑 f(·),二者想共 同计算 f(x1, …, xn)。定义 E(·)/D(·) 为一组同态加密 方案的加 / 解密算法。首先,A 分别对数据进行加密, 将加密结果 {E(x1), …, E(xn)} 发送给 B。此时 B 按照 f 的计算逻辑执行运算得到 = f(E(x1),…,E(xn)),将 返回给 A。这时,A 使用解密算法对结果进行解密, 就可以获得计算结果 f(x1, …, xn)。 在这个过程中,B 仅拥有密文且无法获知 A 的数据,有效保证了数据的隐私性。区块链隐私保护中常用 的同态密码技术有 Pedersen 承诺和 Paillier 加密。

Pedersen 承诺

  • Monero 基于机密交易机制保 证交易数据的隐私性,该机制使用 到的核心技术之一就是 Pedersen 承 诺。在机密交易中,交易金额提交 到区块链前首先由随机盲化因子进 行承诺。在交易验证过程中,由 于 Pederson 承诺的同态性,可以分 别计算交易的输入和输出密文的总 和,通过验证“所有输入输出的总 和是否为关于 0 的承诺”来验证交 易金额的有效性。此时交易发起者 仅需要证明他知道承诺对应的随机数,这个证明可以使用一个标准的零知识证明来实 现,整个过程不会泄露交易的实际金额或其他交易 数据。

Paillier 加密

  • Paillier 是基于复合剩余类基本假设的同态加 密方案,它的加 / 解密形式简单,且密文无噪声。 Wang 等学者 [14] 使用 Paillier 加密方案构造了针对比 特币的隐私交易系统,其中交易金额使用 Paillier 进 行隐蔽性保护,零知识证明用于检查加密后金额的 有效性(即确保交易金额为正,并验证输入之和等 于输出之和)。这些交易就像密封的资产信封,可 以合并、分离或使用,并且保持金额不可见。 另一个基于 Paillier 构造的区块链隐私计算工程 是由矩阵元公司推出的计算平台 PlatON。该平台重 点针对以太坊的余额模型进行数据隐私保护,设计 并部署基于 Paillier 的用户账户余额的密态更新,并 提出一种新的非交互式零知识证明方案 [15],用于验 证密态交易数据的合法性。然而,这种方案解密的 时候需要求解椭圆曲线离散对数问题,在交易金额较大的时候解密性比较差。

总结与展望

  • 1. 可扩展性和经济性 如表 1 所示,中心化 和分布式混淆方法都会产生额外的等待延迟,Zero- cash 的证明平均生成时间约为 2 分钟,CryptoNote 中匿名交易签名的大小与参与者的数量成正比,这 意味着存储和通信成本也会随匿名集的增大而增 加。因此,如何优化组合现有的隐私保护方案或设 计低成本的密码方案是一个值得研究的方向。
  • 2. 弱假设下的强隐私保护 分布式混淆假 设一定比例的参与者是诚实的,以缓解 Sybil 攻击 的危害 ;zk-SNARK 需要第三方生成初始化电路 ; Hawk 中每个智能合约都需要一个独立的可信的初 始化进程。从优化安全性模型的角度来看,新的隐 私保护方案需要尽量少的安全性假设,从而增强实 际隐私保护效果。
  • 3. 兼容性 区块链有两种主流的交易模式 : 比特币为代表的 UTXO 和以太坊为代表的 AC- COUNT。现有方案大多针对 UTXO 模型(链式结构) 进行隐私保护。在 ACCOUNT 模型中,账户为全球 状态,交易决定账户状态,相互之间没有联系。此 时混淆交易地址无法达到隐私效果,因此隐私保护 方法与 ACCOUNT 架构兼容是一项新的待解决问题。
  • 4. 合法监管性 区块链的隐私保护是一把“双 刃剑”。一方面,诚实用户希望拥有信息的隐私性 ; 另一方面,恶意实体可能滥用隐私保护机制进行某 些非法交易。因此,区块链隐私需要具备条件性, 即权威机构可以被授权跟踪目标用户的区块链行 为,并收集他 / 她已经传播的所有消息,但该用户 的敏感信息仍然受到保护。
  • 区块链概念自提出至今一直受到学术界和产业界的广泛关注。它提供了一种完全分布式的、不可 篡改的数据存储、共享和同步方式,非常适用于大 型分布式互联网交互系统(例如物联网或供应链系 统)。近几年,全行业都在寻求如何使用区块链来 解决各领域存在的痛点。 但是,在互联网时代,数据即资产。日益增长 的隐私保护需求是区块链落地实用前必须面对并解 决的问题之一。希望本文能为区块链相关隐私问题 的探索提供引导与启发。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

值类型和引用类型的区别

一、定义 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变。 值类型表示复制一个当前变量传给方法,当你在这个方法中改变…

面向区块链的高效物化视图维护和可信查询论文学习

物化视图介绍 如何维护物化视图仍旧是一个开放问题.在关系数据库中,增量刷新的物化视图维护策略可划分为立即维护和延迟维护两大类.立即维护策略的优点是实现较为简单,在单数据源下不 存在一致性问题;然而该策略将物化视图维护过程嵌入到更新事务之中,延长了更新事务的提交时间…

密码学数字信封的介绍

对称密码和非对称密码 对称密码:加解密运算非常快,适合处理大批量数据,但其密码的分发与管理比较复杂非对称密码:公钥和私钥分离,非常适合密钥的分发和管理 数字信封的定义 如果将对称密码算法和非对称密码算法的优点…

Android设计模式之——状态模式

一、介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。状态模式和策略模式的结构几乎完全一样,但它们的目的、本质却完全不一样。状态模式的行为是平行的、不可替换的,策略模式的行为是彼此独立、可相互替换的。用一句话来…

Android设计模式之——责任链模式

一、介绍 责任链模式(Iterator Pattern),是行为型设计模式之一。什么是”链“?我们将多个节点首尾相连所构成的模型称为链,比如生活中常见的锁链,就是由一个个圆角长方形的铁环串起来的结构。对于链式结构…

目前基于区块链的档案防篡改系统的设计如何实现防篡改

架构设计图 分析 为了保障档案数据的安全性和隐私性,存储档案附件和档案属性存储加密存储在私有IPFS集群,档案的IPFS地址和数字指纹存储在私有区块链上。公有区块链定期存储和检查私有区块链最新不可逆区块的高度和哈希值,以保障私有区块链上…

IPFS的文件存储模式

IPFS是如何进行文件存储的 IPFS采用的索引结构是DHT(分布式哈希表),数据结构是MerkleDAG(Merkle有向无环图) DHT(分布式哈希表) 参考链接MerkleDAG(Merkle有向无环图) 参考链接MerkleDAG功能…

Android设计模式之——解释器模式

一、介绍 解释器模式(Interpreter Pattern)是一种用的比较少的行为型模式,其提供了一种解释语言的语法或表达式的方式,该模式定义了一个表达式接口,通过该接口解释一个特定的上下文。在这么多的设计模式中&#xff0c…

在Docker里面安装Ubuntu,并且使用ssh进行连接

创建Ubuntu镜像 1,拉取Ubuntu系统的镜像 docker pull ubuntu2、查看拉取是否成功 docker images3,运行容器 docker run --name 新建的容器的名字 -ti -v /AAA:/BBB -d -p 3316:22 ubuntu(这个是镜像的名字)宿主机根目录中的AAA文件夹就映射到了容器…

Android设计模式之——命令模式

一、介绍 命令模式(Command Pattern),是行为型设计模式之一。命令模式相对于其他的设计模式来说并没有那么多的条条框框,其实它不是一个很”规范“的模式,不过,就是基于这一点,命令模式相对于其…

Android设计模式之——观察者模式

一、介绍 观察者模式是一个使用率非常高的模式,它最常用的地方是GUI系统、订阅——发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说&#xff0…

Android设计模式之——备忘录模式

一、介绍 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时说的”后悔药“。备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存…

C++ using的三种使用策略以及具体的用法

Using的使用方法 1,命名空间的使用 为了防止代码冲突,都会使用到命名空间。假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分他们,我们在使用名字之外,不得不使用一些额外的信息&#…

Android设计模式之——迭代器模式

一、介绍 迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一。迭代器模式算是一个比较古老的设计模式,其源于对容器的访问,比如Java中的List、Map、数组等&#xff0c…

Android设计模式之——模板方法模式

一、介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变…

Android设计模式之——访问者模式

一、介绍 访问者模式是一种将数据操作与数据结构分离的设计模式,它是《设计模式》中23种设计模式中最复杂的一个,但它的使用频率并不高,正如《设计模式》的作者GOF对访问者模式的描述:大多数情况下,你不需要使用访问者…

Android设计模式之——中介者模式

一、介绍 中介者模式(Mediator Pattern)也称为调解者模式或调停者模式,Mediator本身就有调停者和调解者的意思。 在日常生活中调停者或调解者这个角色我们见得比较多的是“和事老”,也就是说调解两个有争端的人的角色&#xff0…

Java基础——虚拟机结构

一、Java平台结构图二、JVM、JRE和JDK关系JVM:Java Virtual Machine(Java虚拟机),负责执行符合规范的Class文件 JRE: Java Runtime Environment (java运行环境),包含JVM和类库 JDK&a…

C++:MAC安装Boost库文件并且使用CLion开发

boost的filestem库 C在17版本的标准库中引入了一个filesystem库,用来处理文件路径,以及文件访问。很多编译器对filesystem库的支持还不是很好。为了解决这个问题,可以临时使用boost::filesystem来替代。其实C17标准中的filesystem库就是从bo…

Java基础——Java异常处理机制

一、引言 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不信?那你看看下面的代码…