RSA加密算法解析

news2024/11/16 9:53:08

目录

RSA加密

数学原理

证明:

欧拉函数

欧拉定理

模反元素

模运算

指数运算

同余

欧几里德算法GCD

填充(padding)

对称加密的应用工作流程

非对称加密的应用工作流程

1)加密过程

2)解密过程

代码实现

密码学知识扩展

加密体制

 如何破解包括恺撒密码在内的单字母替换密码?

RSA安全性 


RSA加密

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的

RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制

非对称加密(分公钥和私钥,不是依靠同一个密码来加解密),依靠随机填充(padding)可以达到:同一个明文、同一个公钥每次生成不同的密文,而私钥能正确解开密文

私钥加密,公钥解密 (私钥在服务器端,公钥在客户端);[为什么](RSA的公钥和私钥到底哪个才是用来加密和哪个用来解密? - 知乎用户的回答 - 知乎 https://www.zhihu.com/question/25912483/answer/252031361)

RSA密钥长度越长约安全:1024、2048、3072….

数学原理

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥

一个正整数可以分解为两个互质数相乘,本质就是一个超大数运算,基于大合数的分解这一数学难题

1. n=p1*p2,取两个大的质数,相乘得到n。

        n就是密钥,n的长度就是密钥的长度

2. 对p1,p2两个质数,带入欧拉函数 得:

        φ(p1)=p1-1 ;φ(p2)=p2-1

        再两者相乘得到 n的欧拉函数

        φ(n)=φ(p1*p2)=φ(p1)φ(p2)=(p1-1)(p2-1)

3. 随机选择一个整数E,条件是1< e < φ(n),且e与φ(n) 互质,即满足gcd(e,φ(n))=1

        (注意:e的选取是很容易的,例如,所有大于p和q的素数都可用)

4. 计算e对于φ(n)的模反元素d

        ed=1(mod φ(n));e*d能被φ(n)+1整除 (d+dn都是φ(n)的模反元素)

5. 将n和e封装成公钥,n和d封装成私钥(d是最关键的密钥分量)

公钥=(n,e)

私钥=(n,d)

加密:

M^e=C(mod n)   

解密:

C^d=M(mod n)

证明:

M=C^d mod n     代换 C= M^e mod n

=(M^e mod n)^d mod n=M^ed mod n

由 ed = kφ(n)+1

=M^kφ(n)+1mod n = M ?

若 M和n互素 由欧拉定理

M^φ(n)=1 (mod n)

M^kφ(n)=1 (mod n) 两边同乘 M

M^kφ(n)+1=M (mod n) => M=C^d mod n

若不互素,gcd(m,n)≠1

(若mn互素gcd(m,pq)=1意味着m既不是p的倍数也不是q的倍数)

有n=p*q,即gcd(m,pq)≠1

设m=tp; gcd(m,q)=1 由欧拉定理 m^φ(q)=1(mod q)

m^kφ(q)=1(mod q) #1的任意次幂都是1,不管这个式子多少次幂 都等于 1(mod p)

[m^kφ(q)]^φ(p) = 1(mod q)

m^kφ(q)φ(p)=1(mod q)

m^kφ(q)φ(p)=m^kφ(n)=1 mod q 两边在同乘m

m^kφ(n)+1=m mod q =》 M^kφ(n)+1mod n = M 得证

个人理解,n是两边都有的,具体加密中的p,q不知道,一个很大的数,想确定一对p*q=n很难(就算是质数也很难,因为数量真的很多) 用e加密,e是随机取的,用d解密 d是根据e和φ(n)算出来的 ,φ(n)是通过p和q算出来的 所以想破解d是很难的,关于怎么加密解密的过程, 注意点:M=C^d mod n 与C= M^e mod n的代换、ed的产生、1的n次幂还是1、以及欧拉定理 a^φ(n)=1 (mod n) 的同乘M  

欧拉函数

定义:欧拉函数(Euler's totient function),即φ(n),表示的是小于等于n的数中,和n互质的数的个数。 如φ(1)=1

欧拉方程有两个性质对RSA算法来说是特别重要的。

当n是质数的时候,显然有φ(n)=n-1 (费马小定理)这是由于n的唯一因子是1和n,因此,n与之前的所有n-1个正整数都是互素的。

另一个有趣的性质是对于任意小于n且与n互素的正整数a,都有aφ(n) mod n = 1。例如,14 mod 8 = 1, 34 mod 8 = 1, 54 mod 8 = 1, 74 mod 8 = 1。对上述方程两边都乘以a,得到:a*(aφ(n) mod n)=a,或者aφ(n)+1 mod n = a

欧拉定理

欧拉定理表明,若​​n​​,​​a​​为正整数,且​​n,a互质​​,则以下公式成立:

即:a的φ(n)次方 被 n整除余1

例:2和5互质,φ(5)=4,2的4次方是16,减去1等于15更好被5整除。

那么根据欧拉函数的特例,质数p 的 φ(p1)=p1-1 得 

模反元素

如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab被n+1整除,或者说ab被n除的余数是1。这时,b就叫做a的“模反元素”。

ab=1(mod n)

例: a=3,n=4

(3b-1)%4=0 ;3b= k4 +1 ;ab=k*n+1 ; (k≥1为任意整数)

故b=7或者3

显然模反元素不止一个,即如果b是a的模反元素,则b+kn都是a的模反元素(k为正整数)

可以看出,a的 φ(n)-1 次方,就是a对模数n的模反元素a{^{\varphi(n)}}=a*a{^{\varphi(n)-1}} \equiv 1(mod n)

模运算

让m去被n整除,只取所得的余数作为结果,就叫做模运算。10 mod 4=2;8 mod 3=2;

指数运算

 指数运算又称乘方计算,计算结果称为幂。nm指将n自乘m次。把nm看作乘方的结果,叫做”n的m次幂”或”n的m次方”。其中,n称为“底数”,m称为“指数”。

同余

数学上,当两个整数除以同一个整数,若得相同余数,则二整数同余。即两个整数a,b,它们除以正整数m所得的余数相等。从特例来解释:b是a模m的余数

给定一个正整数m,如果两个整数a和b满足a-b能被m整除,即(a-b) mod m=0, 那么就称整数a与b对模m同余,记作a≡b (mod m),同时可成立a mod m=b


欧几里德算法GCD

欧几里德算法是用来求两个正整数最大公约数的算法
计算公式gcd(a,b) = gcd(b,a mod b)

填充(padding)

是为了解决每次加密,明文不变,密文也不变的情况。

要遵循欧拉定理的数学公式,对明文长度是有要求的,必须是16的整数倍,不是整数倍就需要填充到那么长,如果刚好是16的倍数也需要再填充。

一开始是固定的填充 比如 明文+0000达到规定长度

后面出现了新的填充模式,每次的填充值随机的变化,但是是有规则的,还是可以用私钥解开

比如 明文+123456

好处在于让加密后的密文每次不一样,不管填充模式怎么变,填充值是什么,只要我通过相同的填充模式去解密,就能把不断变化的明文解出来。

填充模式: NoPadding、OAEPPadding、PKCS1Padding等,PKCS#1的padding就占用了11个字节

公钥和私钥使用不一样的填充模式会导致解密的失败

NoPadding的填充模式不安全(就是填0)

对称加密的应用工作流程

对称加密:DES,AES

DES.encrypt(明文,密钥) 加密——》密文

客户端(加密) ——》传输——》服务器(解密)

DES.decrypt(密文,密钥) 解密 ——》明文

非对称加密的应用工作流程

非对称加密:RSA

RSA.encrypt(明文,公钥,填充值) 加密——》密文

客户端(公钥加密) ——》传输——》服务器(私钥解密)

RSA.decrypt(密文,私钥,填充方式) 解密——》明文

1)加密过程

加密时首先将明文比特串分组,使得每一个分组对应的十进制数小于n,即分组长度小于\log_{2}n,然后对每个明文分组M{_{i}}做加密运算,具体过程分为如下步骤:

 

(1)获得接收方公钥(e,n);

(2)把消息M分组为长度为L(L< \log_{2}n)的消息分组M=M{_{1}}M{_{2}}...M{_{t}}

(3)使用加密算法C_{i}=C_{i}^{e}(mod n)(1 \leq i \leq t)计算出密文C=C{_{1}}C{_{2}}...C{_{t}};

(4)将密文C发送给接收方;

2)解密过程

(1)接收方收到密文C=C{_{1}}C{_{2}}...C{_{t}};

(2)使用私钥d逐一恢复明文分组M , M_{i}=c_{i}^{d}(mod n)(1 \leq i \leq t)

(3)得明文消息 M=M{_{1}}M{_{2}}...M{_{t}}

有些明文太长了 常见处理手法是:非对称加密(对称加密(明文))


代码实现

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKCS1_v1_5
import rsa
import base64

#传入长度 注册一个key对象
key=RSA.generate(1024)
#设置一个公钥
pubkey=key.publickey().export_key()
print("pub key:",pubkey)
print("pub len:",len(pubkey))
#设置一个私钥
privkey=key.export_key()
print("pri key:",privkey)
print("pri len:",len(privkey))
#导入公钥  注册一个RSA对象
rsa_key=RSA.importKey(pubkey)
print("n:",rsa_key.n)
print("e:",rsa_key.e)

#传入RSA对象  创建一个PKCS1填充模式的 加密对象
cipher=Cipher_PKCS1_v1_5.new(rsa_key)
#明文
text="hello rsa"
#加密
cipher_text=cipher.encrypt(text.encode())
print("cipher_text:",cipher_text)
print("len:",len(cipher_text))

#导入私钥  注册一个RSA对象
rsa_key=RSA.importKey(privkey)
#解密
cipher=Cipher_PKCS1_v1_5.new(rsa_key)
plaintext=cipher.decrypt(cipher_text,None).decode(encoding='utf-8')
print("plaintext:",plaintext)

密码学知识扩展

加密体制

凯撒密码

        凯撒密码,或称恺撒加密、恺撒变换、变换加密,是一种替换加密的技术,以罗马共和时期恺撒的名字命名,恺撒曾用此方法对重要的军事信息进行加密,恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。即明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文,是最简单且最广为人知的加密技术之一。

其基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。位数就是凯撒密码加密和解密的密钥。
例子如下:

凯撒当时就是按照字母按顺序后推3位,只需简单地统计字频就可以破译。现今又叫“移位密码”,只不过移动的位数不一定是3位而已。我们知道字母有26位置,那么我们一个字母除了本身的位置还有25个位置可以做位移

 

那么我们拿到密文,即使没有密匙也能尝试将它破解出来,因为凯撒移位密码只有25种密匙,最多就是将这25种可能性挨个检测一下可以了,这就是我们所说的暴力破解法。

你可能要说了那这个加密强度很低啊,是的因为刚才说的仅仅是按顺序往后位移。因此,为了使密码有更高的安全性,单字母替换密码就出现了。

只需重排密码表二十六个字母的顺序,允许密码表是明码表的任意一种重排,密钥就会增加到四千亿亿亿多种,我们就有超过4×1027种密码表。破解就变得很困难。

如:

明码表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

密码表 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M

明文 F O R E S T

密文 Y G K T L Z

公钥密码体制        

在公钥体制中,加密密钥不同于解密密钥。人们将加密密钥公之于众,谁都可以使用;而解密密钥只有解密人自己知道。迄今为止的所有公钥密码体系中,RSA系统是最著名、使用最广泛的一种。

发展历程

1976年提出公共密钥密码体制,其原理是加密密钥和解密密钥分离。这样,一个具体用户就可以将自己设计的加密密钥和算法公诸于众,而只保密解密密钥。任何人利用这个加密密钥和算法向该用户发送的加密信息,该用户均可以将之还原。公共密钥密码的优点是不需要经安全渠道传递密钥,大大简化了密钥管理。它的算法有时也称为公开密钥算法或简称为公钥算法。

1978年提出公共密钥密码的具体实施方案,即RSA方案。

1991年提出的DSA算法也是一种公共密钥算法,在数字签名方面有较大的应用优势。

 如何破解包括恺撒密码在内的单字母替换密码?

 方法:字母频度分析

 “如果我们知道一条加密信息所使用的语言,那么破译这条加密信息的方法就是找出同样的语言写的一篇其他文章,大约一页纸长,然后我们计算其中每个字母的出现频率。我们将频率最高的字母标为1号,频率排第2的标为2号,第三标为3号,依次类推,直到数完样品文章中所有字母。然后我们观察需要破译的密文,同样分类出所有的字母,找出频率最高的字母,并全部用样本文章中最高频率的字母替换。第二高频的字母用样本中2号代替,第三则用3号替换,直到密文中所有字母均已被样本中的字母替换。”

尽管我们不知道是谁发现了字母频度的差异可以用于破解密码。但是9世纪的科学家阿尔·金迪在《关于破译加密信息的手稿》对该技术做了最早的描述。

以英文为例,首先我们以一篇或几篇一定长度的普通文章,建立字母表中每个字母的频度表。

在分析密文中的字母频率,将其对照即可破解。

虽然设密者后来针对频率分析技术对以前的设密方法做了些改进,比如说引进空符号等,目的是为了打破正常的字母出现频率。但是小的改进已经无法掩盖单字母替换法的巨大缺陷了。到16世纪,最好的密码破译师已经能够破译当时大多数的加密信息。

局限性:

短文可能严重偏离标准频率,假如文章少于100个字母,那么对它的解密就会比较困难。

而且不是所有文章都适用标准频度:

1969年,法国作家乔治斯·佩雷克写了一部200页的小说《逃亡》,其中没有一个含有字母e的单词。更令人称奇的是英国小说家和评论家吉尔伯特·阿代尔成功地将《逃亡》翻译成英文,而且其中也没有一个字母e。阿代尔将这部译著命名为《真空》。如果这本书用单密码表进行加密,那么频度分析破解它会受到很大的困难。

一套新的密码系统由法国外交家维热纳尔(Blaise de Vigenère)于16世纪末确立。其密码不再用一个密码表来加密,而是使用了26个不同的密码表。这种密码表最大的优点在于能够克制频度分析,从而提供更好的安全保障。

RSA安全性 

  • 密码学知识扩展:

  • 加密体制:

    • 凯撒密码:

      凯撒密码,或称恺撒加密、恺撒变换、变换加密,是一种替换加密的技术,以罗马共和时期恺撒的名字命名,恺撒曾用此方法对重要的军事信息进行加密,恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。即明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文,是最简单且最广为人知的加密技术之一。

      其基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。位数就是凯撒密码加密和解密的密钥。 例子如下:

       

凯撒当时就是按照字母按顺序后推3位,只需简单地统计字频就可以破译。现今又叫“移位密码”,只不过移动的位数不一定是3位而已。我们知道字母有26位置,那么我们一个字母除了本身的位置还有25个位置可以做位移

  那么我们拿到密文,即使没有密匙也能尝试将它破解出来,因为凯撒移位密码只有25种密匙,最多就是将这25种可能性挨个检测一下可以了,这就是我们所说的暴力破解法。 

  你可能要说了那这个加密强度很低啊,是的因为刚才说的仅仅是按顺序往后位移。因此,为了使密码有更高的安全性,单字母替换密码就出现了。

  只需重排密码表二十六个字母的顺序,允许密码表是明码表的任意一种重排,密钥就会增加到四千亿亿亿多种,我们就有超过4×1027种密码表。破解就变得很困难。

  如:

  明码表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

  密码表 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M

  明文 F O R E S T

  密文 Y G K T L Z

- 公钥密码体制

  在公钥体制中,加密密钥不同于解密密钥。人们将加密密钥公之于众,谁都可以使用;而解密密钥只有解密人自己知道。迄今为止的所有公钥密码体系中,RSA系统是最著名、使用最广泛的一种。

  ### 发展历程

  1976年提出公共密钥密码体制,其原理是加密密钥和解密密钥分离。这样,一个具体用户就可以将自己设计的加密密钥和算法公诸于众,而只保密解密密钥。任何人利用这个加密密钥和算法向该用户发送的加密信息,该用户均可以将之还原。公共密钥密码的优点是不需要经安全渠道传递密钥,大大简化了密钥管理。它的算法有时也称为公开密钥算法或简称为公钥算法。

  1978年提出公共密钥密码的具体实施方案,即RSA方案。

  1991年提出的DSA算法也是一种公共密钥算法,在数字签名方面有较大的应用优势。
  • 如何破解包括恺撒密码在内的单字母替换密码?

    • 方法:字母频度分析

      “如果我们知道一条加密信息所使用的语言,那么破译这条加密信息的方法就是找出同样的语言写的一篇其他文章,大约一页纸长,然后我们计算其中每个字母的出现频率。我们将频率最高的字母标为1号,频率排第2的标为2号,第三标为3号,依次类推,直到数完样品文章中所有字母。然后我们观察需要破译的密文,同样分类出所有的字母,找出频率最高的字母,并全部用样本文章中最高频率的字母替换。第二高频的字母用样本中2号代替,第三则用3号替换,直到密文中所有字母均已被样本中的字母替换。”

      尽管我们不知道是谁发现了字母频度的差异可以用于破解密码。但是9世纪的科学家阿尔·金迪在《关于破译加密信息的手稿》对该技术做了最早的描述。

      以英文为例,首先我们以一篇或几篇一定长度的普通文章,建立字母表中每个字母的频度表。

      在分析密文中的字母频率,将其对照即可破解。

      虽然设密者后来针对频率分析技术对以前的设密方法做了些改进,比如说引进空符号等,目的是为了打破正常的字母出现频率。但是小的改进已经无法掩盖单字母替换法的巨大缺陷了。到16世纪,最好的密码破译师已经能够破译当时大多数的加密信息。

    • 局限性:

      短文可能严重偏离标准频率,假如文章少于100个字母,那么对它的解密就会比较困难。

      而且不是所有文章都适用标准频度:

      1969年,法国作家乔治斯·佩雷克写了一部200页的小说《逃亡》,其中没有一个含有字母e的单词。更令人称奇的是英国小说家和评论家吉尔伯特·阿代尔成功地将《逃亡》翻译成英文,而且其中也没有一个字母e。阿代尔将这部译著命名为《真空》。如果这本书用单密码表进行加密,那么频度分析破解它会受到很大的困难。

      一套新的密码系统由法国外交家维热纳尔(Blaise de Vigenère)于16世纪末确立。其密码不再用一个密码表来加密,而是使用了26个不同的密码表。这种密码表最大的优点在于能够克制频度分析,从而提供更好的安全保障。

  • RSA安全性:

    一个现代密码体制必须能经得住训练有素的密码分析家借助计算机寻找秘密密钥的攻击或用某些其他方法试破密文的攻击。在RSA体制中,如果密码分析家(知道公开密钥e和n)能把n分解成p和q,那么他就可以计算出F(n),接着找出秘密密钥分量d。

    在已知n和e的情况下即(公钥),能否推导出d?

    (1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。

    (2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。

    (3)n=pq。只有将n因数分解,才能算出p和q。

    • 但RSA应用中,不可能跟我们举例子一样那么小,而且大整数的因数分解,是一件非常困难的事情,例如:

      12301866845301177551304949 58384962720772853569595334 79219732245215172640050726 36575187452021997864693899 56474942774063845925192557 32630345373154826850791702 61221429134616704292143116 02221240479274737794080665 351419597459856902143413

    没法对这个整数进行因数分解,过于大了,而且目前破解的只有暴力破解,所以RSA才号称是目前地球上最安全的算法。

一些其他的参考

现代密码学(四)——RSA密码体制_简述rsa密码体制_Quincy678的博客-CSDN博客

数据加密--详解 RSA加密算法 原理与实现

阮一峰先生的两篇文章《RSA算法原理(一)》、《RSA算法原理(二)》

现代密码学|RSA加密算法及其数学基础_哔哩哔哩_bilibili

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

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

相关文章

亚马逊云科技出海日倒计时,潮向新世界,亮点抢先知

数字化浪潮之下&#xff0c;中国企业的全球化步伐明显提速。从“借帆出海”到“生而全球化”&#xff0c;中国企业实现了从传统制造业“中国产品”出口&#xff0c;向创新“中国技术”和先导“中国品牌”的逐步升级。 作为全球云计算的开创者与引领者&#xff0c;亚马逊云科技…

org.apache.commons.io.monitor+logback.xml+vue实时显示当前日志信息

使用记录&#xff1a; 第一&#xff1a; 刷新页面导致session问题 可以在java的session中记录&#xff0c;如果是同一个客户重新链接的话&#xff0c;直接返回java的session的数据ssemiter给前端&#xff0c;前端自动接着获取日志。 ssemiter&#xff1a;详情自行百度ssemit…

墨天轮专访TDengine陶建辉:坚持做难而正确的事,三次创业成就不悔人生

导读&#xff1a; 时序数据库&#xff08;Time Series Database&#xff09;在最近几年被越来越多的用户接受并使用&#xff0c;并有广泛的应用场景。云原生时序数据库 TDengine 一直稳居墨天轮时序数据库榜首&#xff0c;其近期的海外发展也初见成效。本期&#xff0c;墨天轮技…

Mybatis(黑马程序员)

1. Mybatis基础操作 1.1 需求 需求说明&#xff1a; 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求&#xff0c;完成员工管理的需求开发。 通过分析以上的页面原型和需求&#xff0c;我们确定了功能列表&#xff1a; 查询 根据主键ID查询条件查询 新增 更新 …

分享几个实用又有趣的工具类网站

今天来给大家分享几个众多网友们推荐的&#xff0c;实用又有趣的工具类网站 DeepL翻译&#xff1a;免费的在线翻译网站&#xff0c;大名鼎鼎的翻译神器 DeepL&#xff0c;翻译准确、语句通顺&#xff0c;效果相当好。 https://www.deepl.com/translator BgSub 消除或者替换图…

几句话说清楚数据库的基本范式

第一范式 1NF&#xff1a;属性不能再被拆分。 人(身份证号, 姓名, 性别, 联系方式) 不满足 1NF因为联系方式包含了电话号码、电子邮箱、微信、QQ 等人(身份证号, 姓名, 性别, 电话号码) 满足 1NF 第二范式 2NF&#xff1a;不存在非主属性对主键的部分函数依赖关系。 R(A, B,…

替换jar包中的yml,class等文件的方法

文章目录 1.使用场景2.先准备好待替换的文件3.下载服务器上的jar包4.解压出来指定的文件5.将文件打入jar包6.查看是否替换成功 1.使用场景 由于线上项目中突然爆出一个bug问题&#xff0c;影响到用户使用&#xff0c;但是 线上的jar包版本&#xff0c;已经是很久的了&#xff…

rpmbuild编译安装制作rpm包

什么是rpm包? rpm 相当于windows中的安装文件,它会自动处理软件包之间的依赖关系。 rpm优点: 包管理系统简单,通过几个命令就可以实现包的安装、升级、卸载。 安装速度比源码包快的多。 缺点: 经过编译,不能看到源代码,功能选择不如源码灵活。依赖性强。 首先说一下流程…

基于RPC协议的接口自动化测试可以用Python语言实现

基于RPC协议的接口自动化测试可以用Python语言实现。下面是实现步骤&#xff1a; 1、安装依赖库&#xff0c;如protobuf、grpc。 2、编写.proto文件定义接口参数和返回值。 3、使用protoc编译.proto文件生成Python代码。 4、编写客户端代码调用远程接口进行测试。 具体实现…

C++【红黑树封装mapset】

文章目录 前言&#xff08;一&#xff09; 修改原红黑树&#xff08;1&#xff09;逐步修改并调试运行&#xff08;2&#xff09;红黑树的迭代器&#xff08;3&#xff09;最后一步最重要的 二、源代码压缩包 前言 我们在开始之前&#xff0c;首先要明白一点&#xff0c;前面我…

一文带你了解MySQL之事务隔离级别和MVCC

目录 一、数据准备二、事务隔离级别2.1 事务并发执行遇到的问题2.2 SQL标准中的四种隔离级别2.3 MySQL中支持的四种隔离级别 三、MVCC3.1 版本链3.2 ReadView3.2.1 READ COMMITTED3.2.2 REPEATABLE READ 3.3 MVCC小结 四、关于purge五、总结 一、数据准备 为了我们学习的顺利进…

一篇文章搞懂CMake(gcc、g++、cmake解释)

一篇文章搞懂CMake &#xff08;gcc、g、cmake解释&#xff09; 这里写目录标题 一篇文章搞懂CMake &#xff08;gcc、g、cmake解释&#xff09;gccgcmake1. CMake 流程如何使用cmake&#xff1f;简单的CMake.txt文件 参考 gcc gcc命令来自英文词组“GNU Compiler Collection”…

4.C++多线程-- unique_lock(类模板)

1.unique_lock 1. unique_lock<mutex> myUniLock(myMutex); 完全可以取代lock_guard 2. unique_lock 也可以使用----std::adopt_lock 3.使用adopt_lock&#xff0c;之前要先使用lock. 4.std::chrono::milliseconds my_sleepTime(20000)//20000毫秒 std::this_thread:…

运维小白必学篇之基础篇第十一集:系统进程实验

系统进程实验 实验作业&#xff1a; 1、利用top命令查看当前系统进程&#xff0c;要求没5秒刷新一次&#xff0c;分别按照CPU使用率&#xff0c;内存使用量&#xff0c;CPU使用时间&#xff0c;PID分别排序一次 每5秒刷新一次&#xff1a;top -d 5 按照CPU使用率排序&#xf…

【python】如何入门python?

文章目录 前言一、为什么学习Python&#xff1f;二、学习Python的前置条件三、入门Python的步骤3.1 安装Python3.2 安装Python开发环境3.3 学习Python基础语法3.4 编写你的第一个Python程序3.5 学习Python的高级特性3.6 使用Python库和框架 四、Python入门的资源五、常见的Pyth…

allure报告中如何让测试步骤更清晰

一、allure step测试用例步骤说明 allure step编写测试用例有两种方式 1、with allure.step()用在测试用例中 公共方法代码&#xff1a; # common_fucntion.py import allure import pytest from common.tools.log_util import LoggerrunlogLogger().get_log流程性的用例&a…

【FMC129】 基于JESD204B接口的8通道125MSPS 16位AD采集FMC子卡

板卡概述 FMC129是一款8通道125MHz采样率16位AD采集FMC子卡&#xff0c;符合VITA57.1规范&#xff0c;可以作为一个理想的IO模块耦合至FPGA前端&#xff0c;8通道AD通过高带宽的FMC连接器&#xff08;HPC&#xff09;连接至FPGA从而大大降低了系统信号延迟。 该板卡支持板上可编…

git commit之前,没有pull最新代码,导致无法push代码如何解决?——git三板斧

一、报错&#xff1a; 如果在 git commit 之前没有 pull 最新代码&#xff0c;再进行 push 操作可能会出现冲突&#xff0c;导致无法 push 代码。此时&#xff0c;git 会提示类似以下的错误信息&#xff1a; error: failed to push some refs to gitgithub.com:username/repo…

OSSIM进行主机漏洞扫描(03)

OSSIM进行主机漏洞扫描方式 按照如图选择&#xff0c;ENVIRONMENT–SCAN JOBS–NEW SCAN JOB进入新增页面 其中各选项含义如下 Job Name:扫描任务名称。 Select Sensor:扫描的嗅探器。 Profile:扫描的类型&#xff0c;包括Deep- Non destructive Full and Slow scan(深入)、D…

【完整版】2023二级建造师《建筑实务》真题答案解析(2天考3科)

2023二级建造师考试将在6月3日、4日举行&#xff0c;2023二建《市政实务》考试时间&#xff08;2天考3科&#xff09;&#xff1a;6月4日 9:00-12:00&#xff0c; 考后甘建二将及时发布2023年二建市政实务真题及答案解析&#xff0c;敬请关注 2天考3科地区&#xff1a;四川、山…