web3:同态加密

news2024/11/15 12:41:21

web3相关学习一并收录至该博客:web3学习博客目录大全

目录

  • 同态加密概念
  • 同态加密具体如何定义?
  • 主流同态加密算法原理
    • 乘法同态加密算法
      • ① RSA算法
        • 一些基本的数学知识
        • RSA的具体过程
          • 秘钥的产生
          • 加密
          • 解密
          • 验证了 RSA 算法的乘法同态性
          • java代码简单实现
          • python代码简单实现
      • ② ElGamal算法
    • 加法同态加密算法
      • python代码简单实现
    • 有限全同态加密算法
  • 同态加密的优势
    • 非全同态加密存在的问题
      • 1.非通用计算
      • 2.计算逻辑的暴露
      • 3.多轮次交互
      • 4.可信执行环境
  • 标准化进展
    • 1.半同态加密标准化
    • 2.全同态加密标准化
  • 同态加密应用场景
    • 1. 外包计算
    • 2. 模型训练
    • 3. 联合风控
    • 4. 金融工程
  • 参考

同态加密概念

同态加密(Homomorphic Encryption,简称HE)是很久以前密码学界就提出来的一个Open
Problem。早在1978年,Ron Rivest, Leonard Adleman, 以及Michael L.
Dertouzos就以银行为应用背景提出了这个概念[RAD78]。其中Ron Rivest和Leonard
Adleman分别就是著名的RSA算法(一种非对称加密算法)中的R和A。至于中间的S,Adi
Shamir,现在仍然在为密码学贡献新的工作。

什么是同态加密?
提出第一个构造出全同态加密(Fully Homomorphic Encryption)[Gen09]的Craig Gentry给出的直观定义最好:

A way to delegate processing of your data, without giving away access to it.
一种在不放弃访问权限的情况下委托数据处理的方法。

这是什么意思呢?一般的加密方案关注的都是数据存储安全。即,我要给其他人发送数据,或者要在计算机上存数据,需要对数据进行加密后再发送或者存储。没有密钥的用户,不可能从加密结果中得到有关原始数据的任何信息。只有拥有密钥的用户才能够正确解密,得到原始的内容。我们注意到,这个过程中用户是不能对加密结果做任何操作的,只能进行存储、传输。对加密结果做任何操作,都将会导致错误的解密,甚至解密失败。

同态加密方案关注的是数据处理安全。同态加密提供了一种对加密数据进行处理的功能。也就是说,其他人可以对加密数据进行加工处理,但是加工处理过程不会泄露任何原始内容。同时,拥有密钥的用户对加工处理过的数据进行解密后,得到的正好是明文数据处理后的结果。


🙋‍♂️个🌰理解

有个A用户买到了一大块金子,她想让工人把这块金子打造成一个项链。但是工人在打造的过程中有可能会偷金子啊,因此能不能有一种方法,既让工人可以对金块进行加工(delegate
processing of your data),又无法得到任何金子(without giving away access to it)

A可以这么做:
● 将金子锁在一个密闭的盒子里面,这个盒子安装了一个手套。
● 工人可以带着这个手套,对盒子内部的金子进行处理。但盒子是锁着的,工人不仅拿不到金块,连处理过程中掉下的任何金子都拿不到。
● 加工完成后。A拿回这个盒子,把锁打开,就得到了金子。

这个盒子的样子大概是这样的:
在这里插入图片描述
这里面的对应关系是:
● 盒子:加密算法
● 盒子上的锁:用户密钥
● 将金块放在盒子里面并且用锁锁上:将数据用同态加密方案进行加密
● 加工:应用同态特性,在无法取得数据的条件下直接对加密结果进行处理
● 开锁:对结果进行解密,直接得到处理后的结果


同态加密具体如何定义?

我们以云计算应用场景为例:
在这里插入图片描述
Alice通过Cloud,以同态加密(以下简称HE)处理数据的整个处理过程大致是这样的:

  1. Alice对数据进行加密。并把加密后的数据发送给Cloud;
  2. Alice向Cloud提交数据的处理方法,这里用函数f来表示;
  3. Cloud在函数f下对加密数据进行处理,并且将处理后的结果发送给Alice;
  4. Alice对数据进行解密,得到结果。

据此,我们可以很直观的得到一个HE方案应该拥有的函数:

KeyGen函数:密钥生成函数。这个函数应该由Alice运行,用于产生加密数据Data所用的密钥Key。当然了,应该还有一些公开常数PP(Public Parameter);
Encrypt函数:加密函数。这个函数也应该由Alice运行,用Key对用户数据Data进行加密,得到密文CT(Ciphertext);
Evaluate函数:评估函数。这个函数由Cloud运行,在用户给定的数据处理方法f下,对密文进行操作,使得结果相当于用户用密钥Key对f(Data)进行加密。
Decrypt函数:解密函数。这个函数由Alice运行,用于得到Cloud处理的结果f(Data)。


那么, f函数应该是什么样子的呢?根据函数f的限制条件不同,HE方案实际上分为了两类:
全同态加密(Fully Homomorphic Encryption,简称 FHE):这意味着HE方案支持任意给定的f函数,只要这个f函数可以通过算法描述,用计算机实现。显然,FHE方案是一个非常棒的方案,但是计算开销极大,暂时还无法在实际中使用。
类同态加密(Somewhat Homomorphic Encryption,简称 SWHE) 或部分同态加密(partial homomorphic encryption, 简称PHE):这意味着HE方案只支持一些特定的f函数。SWHE方案稍弱,但也意味着开销会变得较小,容易实现,现在已经可以在实际中使用。


主流同态加密算法原理

满足有限运算同态性而不满足任意运算同态性的加密算法称为半同态加密。典型的半同态加密特性包括乘法同态、加法同态、有限次数全同态等。

乘法同态加密算法

简单理解:

  • 原始数据: x 1 , x 2 \begin{matrix} x_1,x_2 \end{matrix} x1x2
  • 通过对原始数据加密(这里简化举例为三次方)
    • x 1 \begin{matrix} x_1 \end{matrix} x1加密后数据为: x 1 3 x_1^3 x13
    • x 2 \begin{matrix} x_2 \end{matrix} x2加密后数据为: x 2 3 x_2^3 x23
  • 对加密数据做乘法处理:则 ( x 1 3 ) ∗ ( x 2 3 ) (x_1^3)*(x_2^3) (x13)(x23),即 ( x 1 ∗ x 2 ) 3 (x_1*x_2)^3 (x1x2)3
  • 对加密数据处理结果用解密(这里简化举例为开根号)

在实际应用中,密文乘法同态性的需求场景不多,因此乘法同态性通常偶然存在于已有的经典加密算法中。满足乘法同态特性的典型加密算法包括1977年提出的RSA公钥加密算法和1985年提出的ElGamal公钥加密算法等。

① RSA算法

RSA算法是最为经典的公钥加密算法,至今已有40余年的历史,其安全性基于大整数分解困难问题。在实际应用中,RSA算法可采用RSA_PKCS1_PADDING、RSA_PKCS1_OAEP_PADDING等填充模式,根据密钥长度(常用1024位或2048位)对明文分组进行填充,而只有不对明文进行填充的原始RSA算法才能满足乘法同态特性。由于原始的RSA不是随机化加密算法,即加密过程中没有使用随机因子,每次用相同密钥加密相同明文的结果是固定的。因此,利用RSA的乘法同态性实现同态加密运算会存在安全弱点,攻击者可能通过选择明文攻击得到原始数据。

一些基本的数学知识

  • 质数(素数) p:只有1和他本身能被自己整除。
  • 互质:如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系,比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。
  • 欧拉函数φ(n):小于n的正整数中,与n互质的整数的个数。例如φ(8)=4(因为小于8的正整数中只有1,3,5,7与8互质)
    • 若n为质数,则φ(n)=n-1
    • n如果可以分为两个质数(p,q)的乘积,则φ(n)=φ(p*q)=φ§φ(q)=(p-1)(q-1)
  • 欧拉定理:如果两个正整数a和n互质,则:a^φ(n)≡1 mod n。特别的,当n为质数时: a^(n-1)≡1 mod n
  • 模反元素: 如果两个正整数a和n互质,那么一定可以找到整数b,满足:a×b≡1 mod n(ab-1 被n整除,或者说ab被n除的余数是1)这时,b就叫做a的"模反元素"。

RSA的具体过程

假设alice想要通过rsa算法在公网上,将消息加密传递给bob,他们应该怎么做呢?分为以下几个步骤:
1.bob生成公私钥,将公钥在网上公开,私钥自己保存
2.alice通过bob的公钥加密明文消息m,得到密文c,并将密文c传递给bob
3.bob用自己的私钥解密密文c,得到明文m

秘钥的产生
  • bob选择两个保密的大质数p和q(这里假设是p=61,q=53)
    • 计算n=p×q=61×53=3233,φ(n)=φ(p*q)=φ§φ(q)=(p-1)(q-1)=60×52=3120
      • 这里 n的长度就是秘钥的长度 。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。
  • 选一个整数e,满足1< e < φ(n),且e与φ(n) 互质
    • bob就在1到3120之间,随机选择了17。(实际应用中,常常选择65537。)
  • 求解e关于φ(n)的模反元素d(由于e与φ(n)互质,所以d一定存在)
    • ed ≡ 1 (mod φ(n)) 等价于 ed - 1 = kφ(n),这里就是17d-1 =3120k,求得(d,k)=(2753,-15),即 d=2753。
  • n和e封装成公钥,n和d封装成私钥
    • 这个例子中 n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)
加密

假设alice要向bob发送明文信息m,则用bob的公钥 (n=3233,17,e=17) 对m进行加密。
并且加密时必须将明文进行比特串分组,保证每个分组对应的十进制数小于n,即保证m<n。
c ≡ m^e (mod n)
这里m假设是65,那么可以算出下面的等式:65^17 ≡ 2790 (mod 3233)
于是,c等于2790,alice就把2790发给了bob

解密

bob拿到c(2790)以后,就用自己的私钥(n=3233, d=2753) 进行解密。
m ≡ c^d (mod n)
那么,bob算出 2790^2753 ≡ 65 (mod 3233)
因此,bob知道了alice加密前的原文就是65

验证了 RSA 算法的乘法同态性

给出两个明文m1和m2,使用上述方法加密后得到两个密文,
c1= E(m1) =m1^𝑒 (𝑚𝑜𝑑 𝑛),
c2= E(m2) = m2^𝑒 (𝑚𝑜𝑑 𝑛),

将两个密文相乘得到:c1∗ c2= E(m1) ∗E(m2) = m1^𝑒∗ m2^𝑒 (𝑚𝑜𝑑 𝑛),
由于E(m1m2) = (m1m2)(𝑚𝑜𝑑 𝑛),所以可以得出E(m1m2) = E(m1) ∗ E(m2)

验证了 RSA 算法的乘法同态性。

java代码简单实现
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Random;

public class RSATest {
    public static void main(String[] args) throws Exception{
        // 1. 生成RSA密钥对
        // 获取指定算法的密钥对生成器
        KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
        // 初始化密钥对生成器(指定密钥长度, 使用默认的安全随机数源)
        gen.initialize(512);
        // 随机生成一对密钥(包含公钥和私钥)
        KeyPair keyPair = gen.generateKeyPair();
        // 获取 公钥 和 私钥
        RSAPublicKey pubKey = (RSAPublicKey)keyPair.getPublic();
        RSAPrivateKey priKey = (RSAPrivateKey)keyPair.getPrivate();
        // 获得公私钥 和 公共模数
        BigInteger E = pubKey.getPublicExponent();
        BigInteger D = priKey.getPrivateExponent();
        BigInteger N = pubKey.getModulus();
        System.out.println("E:" + E);
        System.out.println("D:" + D);
        System.out.println("N:" + N);

        BigInteger m1 = BigInteger.valueOf(new Random().nextInt(Integer.MAX_VALUE));
        BigInteger m2 = BigInteger.valueOf(new Random().nextInt(Integer.MAX_VALUE));

        // 加密
        BigInteger C1 = m1.modPow(E, N);
        BigInteger C2 = m2.modPow(E, N);
        // 密文相乘
        BigInteger C = C1.multiply(C2).mod(N);
        // 解密
        BigInteger Mc = C.modPow(D, N);
        // 验证
        BigInteger val = m1.multiply(m2);
        System.out.println("原始数据数据m1:" + m1 + ",m2:" + m2);
        System.out.println("m1加密后数据C1:" + C1);
        System.out.println("m2加密后数据C2:" + C2);
        System.out.println("C:" + C);
        System.out.println("Mc:" + Mc);
    }
}
python代码简单实现
import rsa
import rsa.core

# pip install rsa
(public_key, private_key) = rsa.newkeys(256)
print('1.密钥生成')
print('生成公钥')
print('public key:', public_key)
print(public_key.n,public_key.e)
print()
print('生成私钥')
print('private key:', private_key)
print(private_key.n,private_key.d)
print()
print('2.加密')
enc1 = rsa.core.encrypt_int(2, public_key.e, public_key.n)
print('加密3 结果 enc1:  ' + str(enc1))
enc2 = rsa.core.encrypt_int(20, public_key.e, public_key.n)
print('加密15 结果 enc2:  ' + str(enc2))
print()
result = enc1 * enc2
print('3.同态运算')
print('相乘 result=' + str(enc1) + ' * ' + str(enc2) + '=' + str(result))
print()
decrypt_result = rsa.core.decrypt_int(result, private_key.d, public_key.n)
print('4.解密:' + str(decrypt_result))
print()

② ElGamal算法

ElGamal算法是一种基于Diffie-Hellman离散对数困难问题的公钥密码算法,可实现公钥加密和数字签名功能,同时满足乘法同态特性。ElGamal是一种随机化加密算法,即使每次用相同密钥加密相同明文得到的密文结果也不相同,因此不存在与RSA算法类似的选择明文攻击问题,是ISO同态加密国际标准中唯一指定的乘法同态加密算法。

加法同态加密算法

Paillier算法是1999年提出的一种基于合数剩余类问题的公钥加密算法,也是目前最为常用且最具实用性的加法同态加密算法,已在众多具有同态加密需求的应用场景中实现了落地应用,同时也是ISO同态加密国际标准中唯一指定的加法同态加密算法。此外,由于支持加法同态,所以Paillier算法还可支持数乘同态,即支持密文与明文相乘。

python代码简单实现

import random

import phe
from phe import EncodedNumber, paillier
from phe.util import invert, powmod, getprimeover, isqrt
import numpy as np

# test
if __name__ == "__main__":
    public_key, private_key = paillier.generate_paillier_keypair(n_length=10)
    print('pub', public_key.g, public_key.n)
    print('priv', private_key.p, private_key.q)
    A=[3,32]
    print('A', A)
    enA=[public_key.encrypt(x) for x in A]
    print(enA[0].ciphertext(False))
    print(enA[0].ciphertext(False).bit_length())
    B=[4,16]
    print('B', B)
    enB=[public_key.encrypt(x) for x in B]
    print(enB[0].ciphertext(False))
    print(enB[0].ciphertext(False).bit_length())
    en=np.add(enA,enB)
    print(en[0].ciphertext(False))
    print(en[0].ciphertext(False).bit_length())
    for x in en:
        print(private_key.decrypt(x))

  

有限全同态加密算法

2005年提出的Boneh-Goh-Nissim方案是一种基于双线性映射的公钥密码方案,支持任意次加法同态和一次乘法同态运算。方案中的加法同态基于类似Paillier算法的思想,而一次乘法同态基于双线性映射的运算性质。由于双线性映射运算会使得密文所在的群发生变化,因此仅能支持一次乘法同态运算,但仍支持对乘法后的密文进一步作加法同态运算。


同态加密的优势

我们当前的技术体系,建立在密码学基础上,工程中会用到很多密码学组件,非对称加密、可交互加密等,在这层之上,构建了很多安全算子,例如同态加密、不经意传输、秘密分享等。
在这里插入图片描述

非全同态加密存在的问题

1.非通用计算

非通用计算标准,需要根据具体的问题双方来制定不同的计算标准。概括来说就是一事一协议,新的计算需要在合作各方去使用同一个协议。一事一协议这种非通用计算,使用当前密码学技术来构建算子在工程实践中并非理想的解决方案。

2.计算逻辑的暴露

计算逻辑暴露的问题跟一事一协议紧密相关,两个数据拥有方需要遵循同一协议来计算某些结果。例如一个数据拥有方想要跟对方比较一个统计值的大小,它需要告诉对方要用到一个比较大小的协议。对方确认自己拥有同样的协议之后,才可能执行比较操作。
这样的话,任何参与方的计算过程中,计算逻辑都会暴露给其他参与方,参与者无法对计算逻辑本身进行保护。虽然计算逻辑听起来并不重要,但实际上在真实的金融场景中,一些模型及方法的计算逻辑可能是公司的核心机密,所以计算逻辑暴露对隐私计算来说是一个很重要的问题。

3.多轮次交互

在进行多协议交互时,其网络通信和交换的频次也会更加频繁,就会对网络带宽、网速和网络的稳定性产生较高要求
在一些金融场景中,参与方与金融机构之间往往通过专线连接信息系统,当数据传输量较大,交换频次非常多时,往往出现整个计算流程被拖得较慢。另外当网络交换频次非常多时,对网络稳定性要求就比较高,断连、延迟等网络波动可能会使计算过程出现失败。

4.可信执行环境

面对上述多轮次交互带来的网络带宽、网速和网络稳定性问题,我们能否采用涉及硬件级安全计算的解决方案,例如使用可信执行环境。在实际业务的方案推进这种可信执行环境落地过程中,施工方可能会遇到一些非技术类问题,实际业务的客户比较关心特殊硬件的成本与安全:

  • 需要特殊硬件支持,部署成本高
  • 可信性依赖于国外硬件厂商

金融机构通常自建处理大数据业务的计算集群,已经投入大量成本,如果要重建一个基于可信执行环境的集群,成本是巨大的。另外,目前可信环境的硬件厂商主要来自国外,例如英特尔、AMD等,仅仅基于厂商的描述,客户无法完全认可这套设备可信性,信任度较低。
所以当我们遇到这类场景,需要解决业务机密问题,同时不能采用可信计算环境的时候,全同态加密就体现出它的优势。


标准化进展

1.半同态加密标准化

2019年5月,国际标准化组织ISO发布了同态加密标准(ISO/IEC 18033-6:2019)。该标准仅涉及半同态加密,具体包含两种较为成熟的半同态加密机制:ElGamal乘法同态加密和Paillier加法同态加密,并规定了参与实体的参数和密钥生成、数据加密、密文数据解密、密文数据同态运算等步骤的具体过程。

2.全同态加密标准化

2017年7月,来自学术界、工业界和政界的相关领域研究人员组成了全同态加密标准化开放联盟HomomorphicEncryption.org,在微软研究院举办了首届全同态加密标准化研讨会,开始共同推进全同态加密标准草案的编写工作,并发布了全同态加密安全标准、API标准、应用标准三份白皮书。迄今为止,HomomorphicEncryption.org在三年内已举办五届全同态加密标准化会议,参与成员包括微软、三星SDS、英特尔、IBM、谷歌、万事达卡等企业,以及NIST、ITU等机构的代表和各大高校的学者。在标准化进展方面,HomomorphicEncryption.org已分别于2018年3月和11月发布和更新了全同态加密标准草案。


同态加密应用场景

目前,同态加密算法已在区块链、联邦学习等存在数据隐私计算需求的场景实现了落地应用。由于全同态加密仍处于方案探索阶段,现有算法存在运行效率低、密钥过大和密文爆炸等性能问题,在性能方面距离可行工程应用还存在一定的距离。因此,实际应用中的同态加密算法多选取半同态加密(如加法同态),用于在特定应用场景中实现有限的同态计算功能。

1. 外包计算

当用户有数据但没算力资源,可利用同态加密技术对其数据进行加密,依靠第三方云厂商的算力资源进行结果计算。这样在不泄露自己数据隐私的前提下得到了自己想要的结果数据。
在这里插入图片描述

2. 模型训练

在模型训练过程中,标签拥有方对自有标签加密后,传输给特征拥有方。由于全同态加密算法允许对密文进行无限次的加法和乘法运算,因此特征拥有方可在密文空间去执行整个训练算法,并将训练好之后的模型返回给特征任务方进行解密。
在该过程中只需要两轮网络通信,免除了一些频繁的网络交互。同时标签拥有方其模型训练完全自主可控,可以对模型进行灵活调整,而不需要与特征拥有方同时具有相同的协议,因此其计算逻辑也不会暴露。
在这里插入图片描述

3. 联合风控

在联合风控场景,数据提供方不希望自己的数据泄露给银行,同时银行也不希望自己的风控规则泄露给数据提供方。在这种情况下,可利用全同态加密对数据提供方的数据和银行风控规则进行加密处理,最后根据计算结构来判定是否放贷。
在这里插入图片描述

4. 金融工程

在金融工程场景,客户不愿意把自己的持仓泄露给券商,而券商也不愿意将他投入巨大资源的金融工程模型泄露给对方。在这种情况下,可利用全同态加密对客户持仓数据进行加密,作为券商金融工程模型的输入,最后将计算得到的模型结果进行解密来进行资本操作。
在这里插入图片描述


参考

  • 同态加密的实现原理是什么?在实际中有何应用?
  • 同态加密的实现原理是什么?在实际中有何应用?
  • A Homomorphic Encryption Illustrated Primer
  • 同态加密:实现数据的“可算不可见”
  • 同态加密技术及其在云计算隐私保护中的应用
  • 联邦学习之旅】03 同态加密与 Paillier/RSA
  • RSA算法原理(二)
  • 深入理解RSA算法

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

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

相关文章

保时捷狂推NFT,高调喊出打造Web3社区,Web2品牌“天生缺陷”终将折戟沉沙?...

图片来源&#xff1a;由无界 AI 绘画工具生成2023年1月&#xff0c;保时捷中国的公关团队“忙疯”了&#xff0c;一连搞了好几个活动。有展览&#xff0c;媒体连线直播&#xff0c;甚至搞起了一场有圆桌&#xff0c;有嘉宾主题演讲的发布会。目的只有一个&#xff0c;告诉中国用…

6、Ubuntu20的JDKMySQLtomcatRedisNginx安装

安装JDK 这里以安装版本8为例 进入存放jdk目录创建目录 cd /usr/local mkdir jdk cd jdk 把下好的jdk8压缩包拖拽到Ubuntu连接用户下 移动jdk包文件 mv /home/starfish/jdk-8u351-linux-x64.tar.gz . 解压jdk tar -zxvf jdk-8u351-linux-x64.tar.gz cd jdk1.8.0_351/ p…

ubuntu20.04安装搜狗sogou输入法

环境 Ubuntu20.04 Sogou拼音输入法安装过程 Step.1 安装fcitx框架 sudo apt-get update sudo apt-get install fcitx输入winA后&#xff0c;打开Languate Support Keyboard input method system中&#xff0c;选择fcitx 点击Install/RemoveLanguates...&#xff0c;选择Ch…

面向物流行业的文档管理系统

用于运输和物流的 DocuWare 文档管理软件 物流和货运行业的效率激烈战在公路、火车、货船和空中展开。DocuWare 的快速、安全和灵活的文档管理是真正的竞争优势。在您的公司和客户的核心流程中节省新的成本和时间。 一、数字化和文档管理软件改变了物流公司的游戏规则 智能链…

PostgreSQL 技术内幕(五)Greenplum-Interconnect模块

Greenplum是在开源PostgreSQL的基础上&#xff0c;采用MPP架构的关系型分布式数据库。Greenplum被业界认为是最快最具性价比的数据库&#xff0c;具有强大的大规模数据分析任务处理能力。 Greenplum采用Shared-Nothing架构&#xff0c;整个集群由多个数据节点&#xff08;Segm…

mycat数据分片

Mycat是一个彻底开源的&#xff0c;面向企业应用开发的大数据库集群。它的定义是是一个开源的分布式数据库系统&#xff0c;是一个实现了MySQL协议的服务器&#xff0c;前端用户可以把它看作是一个数据库代理&#xff0c;用MySQL客户端工具和命令行访问&#xff0c;而其后端可以…

【题解】2023牛客寒假算法基础集训营1

目录A. World Final? World Cup! (I)思路B. World Final? World Cup! (II)C. 现在是&#xff0c;学术时间 (I)思路D. 现在是&#xff0c;学术时间 (II)思路E. 鸡算几何思路F. 鸡玩炸蛋人思路G. 鸡格线思路H. 本题主要考察了DFS思路I. 本题也主要考察了DFSJ. 本题竟也主要考察…

MySQL详细教程,2023硬核学习路线,看这一篇就够了

文章目录前言1. 数据库的相关概念1.1 数据1.2 数据库1.3 数据库管理系统1.4 数据库系统1.5 SQL2. MySQL数据库2.1 MySQL安装2.2 MySQL配置2.2.1 添加环境变量2.2.2 新建配置文件2.2.3 初始化MySQL2.2.4 注册MySQL服务2.2.5 启动MySQL服务2.3 MySQL登录和退出2.4 MySQL卸载2.5 M…

PR基础知识

sh什么是帧&#xff0c;什么是帧速率&#xff0c;什么是方形像素? 什么叫场序? # 时长 s时i长为视频时间得长度&#xff0c;基本单位为秒。但是在PR软件中。有更为精准得时间单位计算为帧。也就是说把1秒分为若干份。一份就是一帧。一帧也就可以理解为一张图片。 s所以在PR…

联合证券|未来五年是“大信创”发展的关键时期 发展空间广阔

机构指出&#xff0c;展望2023年&#xff0c;信创将从党政信创走向全面信创&#xff08;28N&#xff09;&#xff0c;叠加方针催化及疫情预期转变&#xff0c;泛信创范畴有望成为板块主线&#xff0c;孕育出许多板块的出资机会。 中心逻辑 1、2022年计算机职业大都子板块的增长…

用户行为收集到HIVE

2.3 用户行为收集到HIVE 目标 目标 知道收集用户日志形式、流程知道flume收集相关配置、hive相关配置知道supervisor开启flume收集进程管理应用 应用supervisor管理flume实时收集点击日志 2.3.1 为什么要收集用户点击行为日志 用户行为对于某项目文章推荐来说&#xff0c;至…

京东方尚未成为苹果的最大供应商,但已经享受到果链的好处

在知名分析师郭明錤表示京东方今年将成为苹果iPhone15的OLED面板主力供应商后&#xff0c;业界纷纷期待京东方在中小尺寸OLED面板市场的份额激增&#xff0c;目前虽然京东方尚未真正开始向苹果供应iPhone15的OLED面板&#xff0c;但它已开始享受到果链带来的好处。京东方量产OL…

嵌入式C语言设计模式 --- 装饰器模式

1 - 什么是装饰器模式? 装饰器模式(Decorator Pattern),是结构型设计模式的一种,装饰器模式允许向一个现有的对象添加新的功能,而又不改变其对象结构,这种方式比使用子类继承的方式更加灵活。 装饰,顾名思义,就是在原有事物的基础上,锦上添花地新增某些点缀或功能,…

[ROS2 入门] rqt_console 使用介绍

大家好&#xff0c;我是虎哥&#xff0c;从今天开始&#xff0c;我将花一段时间&#xff0c;开始将自己从ROS1切换到ROS2&#xff0c;在上一篇中&#xff0c;我们一起了解ROS 2中“Actions ”概念&#xff0c;至此最基本的核心基础概念&#xff0c;我们就都分享介绍完毕了&…

③【Spring】整合第三框架的常用机制:FactoryBean

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ FactoryBean 机制一、什么是 FactoryBean &…

Linux:报错“command not found: yum”及yum和apt-get的区别

还是最近的工作总结&#xff0c;使用yum命令安装出现了报错&#xff0c;具体看下面 目录报错原因yum和apt-get的区别yumyum功能yum特点yum常用命令apt-getapt常用命令解决报错 使用命令安装 yum install sysstat结果报错 zsh&#xff1a;command not found: yum 印象中安装命…

Akamai 第三季度 DNS 威胁分析报告

Akamai 如期发布了 2022 年第三季度 DNS 威胁分析报告&#xff0c;基于其海量 DNS 数据对网络钓鱼等攻击威胁进行洞察。 攻击类别 在 2022 年第三季度&#xff0c;数据视野中 10.6% 的设备在季度内至少访问过一次与恶意软件相关的域名。另外&#xff0c;6.3% 的设备访问了钓鱼…

【蓝桥杯】历届真题 左hai子右兄弟(省赛)Java

【资源限制】 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 【问题描述】 对于一棵多叉树&#xff0c;我们可以通过 “左孩子右兄弟” 表示法&#xff0c;将其转化成一棵二叉树。 如果我们认…

leetcode_二叉树

二叉树二叉树理论基础二叉树的递归遍历二叉树的迭代遍历(统一写法&#xff1a;加空指针)二叉树的层序遍历迭代法二叉树的层序遍历II二叉树的右视图N叉树的层序遍历填充每个节点的下一个右侧节点指针二叉树的最大深度层序遍历法&#xff08;迭代&#xff09;后序遍历法&#xff…

SkyWalking全链路监控部署及使用分享

SkyWalking是一款开源的应用性能监控系统&#xff0c;对比阿里云ARMS&#xff0c;可以对应用进行全方位监控&#xff0c;帮助研发人员快速定位出错接口、慢接口、重现调用参数、发现系统瓶颈&#xff0c;从而大幅提升线上问题诊断的效率&#xff0c;本文向大家介绍了Skywalking…