Zama:链上隐私新标准

news2024/9/20 16:04:19

1. 引言

揭示 Web3 中全同态加密的潜在用例,并深入研究 Zama 的四种主要开源产品:

  • TFHE-rs
  • Concrete
  • Concrete ML
  • fhEVM

众所周知,在当今时代,数据隐私问题与互联网诞生以来一样普遍。仅 Yahoo!、Equifax 和 Marriott 的数据泄露就导致了近10 亿美元的法律和解费用。IBM 最近发布的行业报告Cost of a Data Breach Report 2023显示,2023 年数据泄露的全球平均成本为 445 万美元,三年内增长 15%。

具体来说,在Web3中,零知识证明(ZKP)和可信执行环境(TEE)等技术已被用于保护用户数据。然而,最近,完全同态加密 (FHE) 已成为许多以隐私为中心的工具的流行替代品(和补充)。FHE 是一种加密形式,允许在数据保持加密状态的同时对数据执行计算。考虑到2023 年基于基础设施的项目在区块链行业中处于领先地位,平均每月融资额为 2.07 亿美元,预计新的 FHE 项目将很好地适合这一类别,并将基础设施融资规模扩大到 2024 年。

2. 何为Zama?

Zama 是一家总部位于巴黎的远程友好公司,致力于为 Web2 和 Web3 应用程序提供开源 FHE 工具。其构建了多个开源产品,使开发人员可以更轻松地将 FHE 用于区块链和人工智能等领域的各种用例。Zama 已成功完成三轮融资,迄今为止筹集了 5000 万美元。他们最近一轮融资是 2022 年 2 月由 Protocol Labs 领投的 4200 万美元 A 轮融资。【2024年3月再度获得7300万美金A轮融资。】

为了直接展示 FHE 的强大功能,Zama 在其 Huggingface profile上创建了一些用户友好的 FHE 程序:

  • 第一个程序是情感分析工具。其采用短文本作为输入,使用 FHE 对其进行加密,分析加密的消息,然后告知文本的情绪 - 表明消息的​​积极或消极程度。
  • 另一个程序是图像过滤工具。其将图像作为输入,使用 FHE 对其进行加密,对加密图像应用过滤器,然后提供过滤后的图像作为输出。
  • 最后一个程序是一个健康预测工具:用户输入他们的症状,然后使用 FHE 进行加密。该程序分析这些加密的症状并告知最可能的健康问题。

Zama 的四种主要产品有:

  • TFHE-rs
  • Concrete
  • Concrete ML
  • fhEVM

3. TFHE-rs

Zama 的第一个开源工具是 TFHE-rs,为“Fast Fully Homomorphic Encryption over the Torus using Rust”的简称。

开发人员有多种方案来实现 FHE,这些方案在各方面可能有所不同,如它们所基于的数学原理和性能速度。FHE 的一个特定版本在“torus”上运行并且速度“fast”。通俗地说,torus就是一个甜甜圈。从形式上来说,它是类似于甜甜圈的几何形状的数学术语。TFHE-rs 采用与 tori(复数 torus)相关的数学结构和公式进行加密。

有趣的是,使用 tori 循环表示数字可以提高 FHE 方案的性能速度。这就是为什么它被称为“Fast Fully Homomorphic Encryption over the Torus.”。TFHE-rs 采用 Rust 编程语言编写,由缩写词中的“-rs”后缀表示。这是 Rust 库的典型扩展,类似于“.jpeg”用于图像文件。

在这里插入图片描述

Zama TFHE-rs 库的优势之一是其功能范围,包括:

  • Rust 和 C API:该库提供与 Rust 和 C 编程语言兼容的接口。这使得 FHE 对于开发人员来说更易于访问且用途更广泛。
  • 客户端 WebAssembly API:此功能允许开发人员直接在浏览器中执行 JavaScript 以外的语言代码,其速度几乎与在本机环境中运行它们一样快。它是一个有用的 API,因为它允许开发人员将 TFHE-rs 用于 Web 应用程序。

TFHE-rs 的一个重要特征是它对量子计算机的抵抗力,量子计算机比传统计算机强大几个数量级,并且可以破解特定的加密方案。TFHE-rs 能够抵御量子威胁,因为它的安全性基于一个名为“Learning with Errors”(LWE) 的密码学难题。”

LWE 难题是指数学挑战:

  • 其中给定一组线性方程,求解这些方程在计算上是困难的,因为它们被设计为产生包含误差的结果。

因此,确定实际的解决方案并支撑密码学的安全性是具有挑战性的。一个简单的类比如下:假设你品尝了一道意大利面,并试图仅根据其味道来推断其成分及其数量。最重要的是,想象一下,每次你把意大利面拧到叉子上时,我都会在你的嘴里加一点盐或糖,故意误导你。在这个类比中,方程类似于成分,误差类似于意外的盐或糖,解决 LWE 问题类似于猜测精确的配方。
在这里插入图片描述

为了安全起见,LWE 需要在加密过程中向消息添加随机错误或噪声。然而,随着执行更多的计算,每次计算都会累积额外的噪声或错误。某些计算步骤可能会比其他步骤产生更多的噪音。如,密文(加密数据)的乘法会导致每个计算步骤的噪声几乎呈指数增长,而密文的加法会导致噪声大致呈线性增长。当只需要几次计算时,这种噪声水平是可以控制的,但经过多次分析后,噪声可能变得如此突出,以至于原始数据变得难以理解。数据实际上已丢失。
在这里插入图片描述

为了保持可接受的噪声水平以成功实施 FHE,TFHE-rs 利用了一种称为“Programmable Bootstrapping可编程引导”的技术。该方法通过花费计算能力来刷新和减少噪声来减轻噪声。想象一下这个过程就像在一台旧收音机上听音乐一样,随着时间的推移,静电会累积,使声音变得不太清晰。可通过快速关闭并重新打开收音机来消除静电。在这个类比中,加密的数据被比作音乐,错误/噪音象征着静电,而引导则被比作重新启动收音机。
在这里插入图片描述
可编程引导有一定的局限性:

  • 需要强大的计算能力。
  • 由于其实施所需的时间,降低了处理速度。
  • 其应用程序必须根据所执行的计算具体情况进行定制。

Zama 通过采用“并行性”来提高可编程引导的效率,从而缓解了这些限制。并行性涉及同时执行多个计算,以防止连续计算顺序可能发生的数据失真。实现这一点需要配备先进硬件和软件的计算机。值得庆幸的是,微软和英特尔等公司多年来致力于开发此类功能,作为 DPRIVE 计划的一部分。

实际上,使用 TFHE-rs 需要用户生成两个密钥:

  • 客户端密钥:客户端密钥是私有的,由用户用来加密其数据。
  • 服务端密钥:服务端密钥是公开的,允许在不泄露其内容的情况下处理加密数据。
    • 一旦完成对用户的加密数据的操作,就会产生加密结果,只有用户可以使用客户端密钥解密。

在这里插入图片描述

4. Concrete

Zama 开发的另一个核心工具是 Concrete,这是一个开源框架,可以简化开发人员创建 FHE 程序的挑战性过程。Concrete 包括一个 TFHE(Fast Fully Homomorphic Encryption over the Torus)编译器作为该框架的一部分。该编译器将常规编程代码转换为计算机可以使用 FHE 执行的可执行指令。这对于开发人员来说是个好消息,因为他们可以像平常一样编写代码,并且只需使用 Concrete 进行微小的调整即可确保他们的程序完全同态加密。

如前所述,对 FHE 加密数据执行计算可能会引入显著的噪声,从而导致错误。Concrete 的默认错误概率非常低,每 100,000 次执行中只有 1 次产生错误输出。开发人员可以灵活地修改此错误概率的参数。然而,将错误概率降低到低于此默认设置需要更多的计算资源,并显著降低性能速度。相反,增加错误概率可以提高性能。
在这里插入图片描述

构建 FHE 程序的开发人员可以使用多种选项来优化计算以提高效率:

  • 降低精度:涉及程序和数据中的舍入数字。
  • 减少可编程自举:虽然可编程自举对于提高准确性很有价值,但可以通过尽可能少地使用它来实现最佳效率。
  • 增加并行化:这一策略涉及将程序分成可以并发处理的更小的段,而不是一次性执行整个程序。

5. Concrete ML

Zama 的第三个重要 FHE工具Concrete ML 简介:

  • 这个开源机器学习推理框架基于 Concrete 构建,融合了 AI 和 FHE。

Concrete ML 的价值在于:

  • 它能够让传统数据科学家和 AI 工程师将 FHE 集成到他们的机器学习模型中,而无需事先了解密码学。这些开发人员可以继续使用他们通常使用的熟悉工具,如 scikit-learn 和 PyTorch,因为它们与 Zama 的开源框架集成。

以下是使用 Concrete ML 将标准机器学习模型转换为可以对加密数据进行推断的模型的高级概述:

  • 在未加密数据上训练模型:使用未加密数据训练模型,就像使用传统机器学习模型一样。
  • 模型的量化:通过 Concrete ML,实现量化方案。此过程涉及将小数和浮点值转换为整数,鉴于 Concrete ML 目前只处理整数,这是至关重要的一步。
  • 编译为 FHE:量化后,Zama 的编译器将标准程序代码转换为能够解释加密数据的代码,确保 FHE 兼容性。

尽管 Zama 在创建专为机器学习定制的 FHE 工具方面取得了显著进步,但仍然存在某些局限性。

  • 可能已经想到的一个突出限制是需要对未加密的数据进行训练。目前,Concrete ML 仅支持 FHE 进行推理。尽管 FHE 取得了许多进步,但距离能够在加密数据上训练机器学习模型还有一段距离。
  • 另一个限制是需要量化方案。Concrete ML 仅使用 16 位整数而不是小数进行操作。这带来了挑战,因为许多模型,特别是复杂的深度学习模型,通常依赖于十进制精度。这些精确的数字必须被量化并转换为整数,这可能会导致细节丢失和模型性能变差。Concrete ML 配备了内置量化算法,使开发人员无需从头开始量化过程。然而,它还允许开发人员创建自己的量化算法,使他们能够调整功能并尝试最大限度地减少细节损失并优化性能。

尽管存在这些限制,但也不全是厄运和悲观。即使以目前的形式,Concrete ML 也展示了各种令人兴奋的机器学习演示。其中包括加密图像过滤、信用评分、基于用户提示(如 GPT-2)的隐私保护文本生成,以及旨在从短文本中评估情绪情绪的程序。

6. fhEVM

区块链存在一个突出的不可能三角。通过在链上存储数据,区块链通过固有的透明度促进信任。为了缓解这种情况,许多旨在保护隐私的协议将数据存储在链外。然而,这种方法消除了合约的可组合性,阻止了某些智能合约的交互,因为它们并不全部在链上。这些考虑引出了一个问题:如何在保证机密性的同时将数据存储在链上?

作为回应,Zama推出了fhEVM(以太坊虚拟机上的全同态加密)。

  • fhEVM 是一种协议,使开发人员能够在链上执行机密智能合约。这种设置是理想的,因为它确保智能合约保持可组合性,允许彼此交互,同时保留链上数据的机密性。
  • 此外,fhEVM 还整合了 Zama 的 TFHE-rs 库(前面讨论过),并引入了新的 TFHE Solidity 库。这个新库非常有用,因为它允许开发人员使用 Solidity(以太坊区块链上广泛认可的编程语言)来计算加密数据。

fhEVM 的高级概述是它使用全局公钥,允许所有协议用户使用 FHE 加密链上数据。采用这种方法的主要原因是,它使多个用户(每个用户的数据都保密)能够使用智能合约相互交互。

由于fhEVM使用非对称加密,因此有两个密钥:

  • 公钥:该密钥公开存储在链上,所有用户都使用它来加密其数据并对加密数据进行计算。
  • 私钥:该密钥具有解密数据的能力。它不属于任何单个用户,而是在网络中的验证器节点之间分配所有权。对于要解密的数据,多个验证者必须合作并批准此操作。这种协作批准被称为“阈值协议”。这种方法通过去中心化来增强安全性,防止恶意滥用密钥。

尽管加密数据的密钥是公开的并且网络中的任何人都可以使用,但仍采取预防措施来防止恶意行为。要将加密数据添加到区块链并在其上进行计算,用户必须提交两件事:

  • 其希望添加到区块链的加密数据。
  • A zero-knowledge proof of plaintext knowledge(ZKPoK)。通过 ZKPoK,用户向网络证明他们知道他们所引入的加密数据的内容(以未加密形式)。零知识证明是一种密码学方法,可在不泄露特定信息的情况下验证该信息的知识。

提交这两项后,网络将验证加密数据及其相应的零知识证明。如果验证成功,fhEVM 将加密数据存储在链上并提供句柄(对该数据的引用)。如果验证失败,则加密数据不会添加到区块链中。

验证至关重要。它确保尝试在区块链上添加和使用加密数据的个人无法盗用他人的加密数据并将其呈现为自己的数据。回想一下,fhEVM 在链上存储加密数据以供公众查看。因此,虽然任何人都可以在没有适当验证系统的情况下尝试与此加密数据进行交互,但他们不会成功地将其用于意外目的。

此外,fhEVM 通过使用指向加密数据的句柄来增强其安全性。这使得 fhEVM 可以跟踪添加的加密数据,特别是在执行可能产生新加密值的操作时。当然,当发生这种情况时,句柄和数据之间的映射会被更新。这种方法的安全优势是确保仅使用合法获取的数据,因为 fhEVM 仅在数据通过验证阶段后才添加句柄。

解密时,解密数据有两种可能的结果:

  • 1)公开显示解密:验证者达到阈值协议时的标准方法是公开解密数据并将记录保存在区块链上。见下图:
    在这里插入图片描述

  • 2)私人解密:另一方面,如果用户希望维护其数据的机密性并且不将其公开显示在区块链上,他们可以选择该选项。网络中的validators达成阈值协议,并允许用户获取其数据而无需在链上泄露数据。这是通过使用用户而不是分布式网络拥有的一组不同的加密密钥将原始数据重新加密为新的加密版本来实现的。验证者使用用户的公钥来执行此操作,然后,将这些新加密的数据链下发送给用户,他们可以使用相应的私钥对其进行解密。通过这种方法,用户可以访问原始内容,而无需将其暴露在链上。见下图:
    在这里插入图片描述

7. 使用 Zama 工具的 Web3 应用程序

基于 Zama 对 EVM 兼容 FHE 协议的独特实现,其在白皮书中揭示了几个令人兴奋的应用程序。

  • 1)Confidential Tokens
    以太坊区块链上的 ERC-20 代币通常是公开存储的,允许任何人访问钱包中的代币余额和之前交易的详细信息等信息。从保密的角度来看,这并不理想,因为它将使人们能够根据钱包活动模式或可能连接钱包的任何 KYC 协议来推断一个人的真实身份特征。
    使用 fhEVM,用户可以创建具有加密余额功能的 ERC-20 代币,这样它们就不会出现在钱包中。对于观察你钱包历史记录详细信息的人来说,余额会显示为加密的乱码,但token会像平常一样发挥作用。为了实现这一点,开发人员必须用完全同态加密的版本替换典型的运算和整数。
    Confidential Tokens有几个有趣的应用。以加密货币支付员工工资的公司可以使用加密货币来防止同事看到彼此的工资。在 DeFi 世界中,可以设计新协议来实施借贷、借贷和流动性挖矿等典型活动,但允许这些操作秘密进行。

  • 2)盲拍
    盲拍是一种拍卖方式,人们私下提交出价,确保其他出价者和拍卖师都不知道任何出价的金额。一旦收集到所有出价,它们就会被揭晓,出价最高者获胜。盲拍是确定拍卖物品实际价值的宝贵工具,因为鼓励人们根据他们个人分配给物品的价值进行投标,而不是受到其他投标人的影响。
    对于许多开发商来说,实施链上盲拍一直是一个挑战。两种主要方法是使用 ZKP 和a two-step process,每种方法都有缺点。

    • ZKP 方法:开发者可以使用 ZKP 来保证投标数据的机密性,但这需要将投标数据存储在链外,从而引入了有关投标数据存储位置的新的机密性问题。
    • 两步法:在这种方法中,参与者在拍卖期间将其实际出价的加密哈希发送到智能合约。投标结束后,拍卖进入揭晓阶段,每个投标人都会披露其确切的投标金额。为了确保参与者不会更改其出价金额,智能合约会计算所显示出价的哈希值,该哈希值应与之前提交的哈希值相匹配。这种方法的局限性在于,恶意行为者可以故意发送出价,但在揭示阶段却没有认领它们。这给拍卖带来了挑战,因为无法确定无人认领的出价是否是从未有人认领的合法中标出价,或者是否是由意图扰乱拍卖的恶意行为者提交的。

    使用 fhEVM,可以使用智能合约公平地设计盲目拍卖(见2023年7月博客Onchain Blind Auctions Using Homomorphic Encryption and the fhEVM),从而无需依赖受信任的第三方来管理拍卖。通过使用机密代币,个人可以将加密的出价发送到盲拍智能合约。合约通过比较加密的出价来确定获胜者,并且只显示获胜的出价。由于智能合约仅以加密形式比较投标,因此未中标的投标的隐私保持不变。

  • 3)Confidential DAOs
    去中心化自治组织 (Decentralized Autonomous Organizations,DAO) 是由其选民共同治理的组织。DAO 使用智能合约使其成员能够透明、公平地就如何使用国库资金做出集体决策。为了做出决策和转移资金,成员通常会提交提案,选民可以投票批准或反对。如果提案获得足够的支持,则会获得批准,并且智能合约会自动从财政部转移资金。
    DAO 主要由两个主要智能合约组成:Governor 合约和 Token 合约。Governor合约处理与治理相关的活动,如创建和提交提案、对提案进行投票、计票以及在获得多数票时执行操作。Token合约监督与代币相关的活动,如记录代币持有者和管理操作,如在成员之间发行、销毁或转移代币。
    由于 DAO 主要依靠持有代币来决定成员的投票权,因此经常会出现权威偏见(所谓权威偏见,参看2023年7月23日博客 Minimizing biases during proposal execution),因为拥有大量代币的人通常在投票中具有更大的影响力。有时,成员会跟随大股东的意见进行投票,而不是根据他们的真实信仰进行投票。这可能会导致投票结果出现偏差,而不是达成真正的共识。
    使用 fhEVM(详情见2023年10月12日博客 Confidential DAO Voting Using Homomorphic Encryption),DAO 现在可以建立具有保密投票的治理系统,这有助于消除影响投票决策的偏见。这些“机密 DAO”可以维护代币所有权和投票等组件的秘密。将传统 DAO 转变为机密 DAO 的过程非常简单。它涉及用使用 FHE 加密值的机密副本替换传统的Governor和Token合约。
    图9

  • 4)Decentralized Identifiers 去中心化标识符(DID):
    从历史上看,网络上的人物依赖于中央集权机构来构建维护电子邮件地址或网站域名等标识符的系统。然而,DID 提供了另一种方法,个人可以在去中心化网络的支持下在网络上可靠地识别自己的身份。个人可以控制他们的标识符和数据,执行诸如更新标识符之类的操作,而无需依赖权威来执行此操作。
    过去,由于公共区块链的保密性限制,创建安全的 DID 一直具有挑战性。然而,借助 Zama 的工具,人们可以在区块链上以加密且安全的方式存储敏感信息,并获得由去中心化网络支持的在线标识符的所有权。
    如,医院可以加密敏感数据,如患者的 COVID-19 历史记录,并将其存储在区块链上的智能合约中。将来,如果像旅行社这样的授权方想要验证一个人过去是否感染过 COVID-19 的信息,而不透露有关患者的其他敏感信息,他们可以向智能合约发送查询。使用 FHE,合约可以确定(是/否)响应,而无需透露有关患者的其他识别信息。

8. Zama核心团队介绍

Zama 的联合创始人是 Rand Hindi 博士(首席执行官)和 Pascal Paillier 博士(首席技术官)。

  • Rand Hindi 博士
    Rand Hindi 是人工智能、区块链和医疗科技等深科技领域的企业家和投资者。14 岁时,他创立了 Planet Ultra,这是一家将巴黎年轻人联系起来的社交网络初创公司。他还创立了 Snips,这是一种支持隐私的解决方案,供公司将语音助手集成到他们的产品中。Rand拥有计算机科学学士学位和博士学位。伦敦大学学院生物信息学博士。

  • Pascal Paillier博士
    Pascal是一位企业家和研究员,在密码学领域拥有超过 25 年的经验。他撰写了数十篇研究论文,主题包括同态加密、嵌入式安全和匿名凭证。Pascal在 CryptoExperts 担任首席执行官十年,这是一家总部位于巴黎的初创公司,致力于推动密码学的发展。他拥有工程学位和博士学位。巴黎高科电信的密码学专业。

9. 展望

Zama 做了值得称赞的工作,为将 FHE 集成到 Web3 应用程序奠定了基础并建立了开源工具。已经看到其他有前途的 Web3 项目使用这些工具来构建他们的产品,Fhenix最近宣布自己是第一个完全同态加密驱动的区块链。随着 Zama 不断完善其工具,更多公司将集成这些框架来构建令人兴奋的新产品,从而显著增强 Web3 世界的隐私性。随着这些发展的展开,在线数据隐私的新标准将会建立。

参考资料

[1] 2023年10月13日博客Zama: A New Standard for Confidentiality on the Blockchain

FHE系列博客

  • 技术探秘:在RISC Zero中验证FHE——由隐藏到证明:FHE验证的ZK路径(1)
  • 基于[Discretized] Torus的全同态加密指引(1)
  • 基于[Discretized] Torus的全同态加密指引(2)
  • TFHE——基于[Discretized] Torus的全同态加密 代码解析
  • 技术探秘:在RISC Zero中验证FHE——RISC Zero应用的DevOps(2)
  • FHE简介
  • Zama TFHE-rs
  • Zama TFHE-rs白皮书(1)
  • Zama TFHE-rs白皮书(2)
  • ZK系统内隐私 VS. FHE系统内隐私
  • ZK vs FHE

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

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

相关文章

【C++ leetcode】双指针问题

1. 611. 有效三角形的个数 题目 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 题目链接 . - 力扣(LeetCode) 画图 和 文字 分析 判断是否是三角形要得到三边,由于遍历三边要套三层循环&#x…

C语言编译链接(个人笔记)

编译链接 程序的翻译环境和执行环境1.翻译环境2.运行环境 预处理1.预处理的符号2.宏和函数对比3.#undef4.条件编译4.1比较常见的条件编译指令 5.文件包含 笔试题 程序的翻译环境和执行环境 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执…

Cascaded Zoom-in Detector for High ResolutionAerial Images

代码地址 https://github.com/akhilpm/dronedetectron2 摘要 密集裁剪是一种广泛使用的方法来改进这种小物体检测,其中以高分辨率提取和处理拥挤的小物体区域。然而,这通常是通过添加其他可学习的组件来实现的,从而使标准检测过程中的训练和…

SpringBoot-04 | spring-boot-starter-logging原理原理

SpringBoot-04 | spring-boot-starter-logging原理原理 第一步:springboot加载factories文件第二步:构造监听器第三步:注册监听器到Spring中第四步:开始加载日志框架第五步:加载日志框架logback-spring.xml第六步&…

python矢量算法-三角形变化寻找对应点

1.算法需求描述 现有随机生成的两个三角形A与B,在三角形A中存在Pa,使用算法计算出三角形B中对应的点Pb 2.python代码 import numpy as np # 计算三角形A的面积 def area_triangle(vertices): return 0.5 * np.abs(np.dot(vertices[0] - vertices[…

人机交互三原则,网络7层和对应的设备、公钥私钥

人机交互三原则 heo Mandel提出了人机交互的三个黄金原则,它们强调了相似的设计目标,分别是: 简单总结为:控负持面–>空腹吃面 1,用户控制 2,减轻负担 3,保持界面一致 置用户于控制之下&a…

3新 IT 技术深刻变革,驱动实体经济进入智能化时代

技术进步和创新是实体经济转型升级的内生 源动力,是企业数字化转型的核心工具,有 助于“降本增效提质”目标的达成。自 20 世 纪 90 年代至今,我国快速完成信息化的大规 模建设,典型数字化技术已发展成熟并充分 融合进企业日…

ARMday7

VID_20240322_203313 1.思维导图 2.main.c #include"key_inc.h" //封装延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}} } int main() {//按键中断的初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf(&q…

Go语言学习04~05 函数和面向对象编程

Go语言学习04-函数 函数是一等公民 <font color"Blue">与其他主要编程语言的差异</font> 可以有多个返回值所有参数都是值传递: slice, map, channel 会有传引用的错觉函数可以作为变量的值函数可以作为参数和返回值 学习函数式编程 可变参数 func s…

Java代码基础算法练习-递归求数-2024.03.22

任务描述&#xff1a; 利用递归函数调用方式&#xff0c;将所输入的5个字符&#xff0c;以相反顺序打印出来。 任务要求&#xff1a; 代码示例&#xff1a; package march0317_0331;import java.util.Scanner;/*** m240322类&#xff0c;提供了一个反转输入字符串前5个字符的…

MySQL数据库概念及MySQL的安装

文章目录 MySQL数据库一、数据库基本概念1、数据2、数据表3、数据库4、数据库管理系统&#xff08;DBMS&#xff09;4.1 数据库的建立和维护功能4.2 数据库的定义功能4.3 数据库的操纵功能4.4 数据库的运行管理功能4.5 数据库的通信功能&#xff08;数据库与外界对接&#xff0…

下载 macOS 系统安装程序的方法

阅读信息&#xff1a; 版本&#xff1a;0.4.20231021 难度&#xff1a;1/10 到 4/10 阅读时间&#xff1a;5 分钟 适合操作系统&#xff1a;10.13, 10.14, 10.15, 11.x, 12.x&#xff0c;13.x, 14 更新2023-10-21 添加Mist的介绍支持版本的更新&#xff0c;13.x&#xff0…

博途PLC 模拟量批量转换FC(PEEK指令应用)

单通道模拟转换FC S_ITR请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/121347697https://rxxw-control.blog.csdn.net/article/details/121347697模拟量输出FC S_RTI https://rxxw-control.blog.csdn.net/article/details/121394943

python+requests接口自动化测试实战

环境说明&#xff1a; 1.WIN 7, 64位 2.Python3.4.3 &#xff08;pip-8.1.2&#xff09; 3.Requests —>pip install requests 4.Unittest —>unittest 框架是python自带的单元测试框架&#xff0c;python2.1及其以后的版本已将unittest作为一个标准块放入python开发包中…

java目标和(力扣Leetcode106)

目标和 力扣原题 问题描述 给定一个正整数数组 nums 和一个整数 target&#xff0c;向数组中的每个整数前添加 ‘’ 或 ‘-’&#xff0c;然后串联起所有整数&#xff0c;可以构造一个表达式。返回可以通过上述方法构造的、运算结果等于 target 的不同表达式的数目。 示例 …

Linux:执行命令的命令eval与Bash解析命令的方式

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 eval命令用于接收参数&#xff0c;并将这些参数作为一行命令执行&#xff0c;这也许会使人困惑&#xff0c;为什么我不能直接执行命令而需要使用eval命令间接执行呢&…

海内外媒体发稿助力中国品牌扬帆“出海”

在“走出去”国家战略的指引下&#xff0c;借着加入世贸的东风&#xff0c;越来越多中国企业扬帆出海&#xff0c;在学习中融入&#xff0c;在融入中超越&#xff0c;在波折中发展&#xff0c;在发展中共赢。《财富》&#xff15;&#xff10;&#xff10;强企业排行榜上&#…

网工内推 | 数通工程师,IE认证优先,五险一金,绩效奖

01 星网信通 招聘岗位&#xff1a;数通产品经理 职责描述&#xff1a; 1、售前技术支持&#xff1a;技术交流、产品选型报价、方案制作等工作&#xff1b; 2、招投标支持&#xff1a;项目招标参数撰写、标书质疑、应标文件技术部分撰写及资质文件归纳准备、现场讲标及技术澄清…

鸿蒙开发案例:【图像加载缓存库ImageKnife】

专门为OpenHarmony打造的一款图像加载缓存库&#xff0c;致力于更高效、更轻便、更简单。 简介 OpenHarmony的自研版本&#xff1a; 支持内存缓存&#xff0c;使用LRUCache算法&#xff0c;对图片数据进行内存缓存。支持磁盘缓存&#xff0c;对于下载图片会保存一份至磁盘当…

第十四届蓝桥杯JavaB组省赛真题 - 阶乘求和

/ 10^9考虑前九位&#xff0c;% 10^9保留后9位 解题思路: 求获取结果的后九位数字&#xff0c;需要对10^9取余&#xff0c;因为202320232023这个数字的阶乘太大&#xff0c;必须要减少计算量&#xff0c;因为当一个整数乘以10^9后对其取余&#xff0c;那么结果都为0。 所以我…