蓝桥杯 — — RSA解密

RSA解密

友情链接:RSA解密

题目:

请添加图片描述

思路:

对于这道题目,给出了三个已知量n d C,要我们进行解密,对于解密的公式 X = C e m o d n X = C^e \mod n X=Cemodn来讲,我们有唯一的参数e是未知的,因此问题就转化为了如何求解e的值,对于求解e的值,题目给出的有用条件:找到两个质数p q使其满足 d = p ⋅ q d = p \cdot q d=pq d m o d ( p − 1 ) ⋅ ( q − 1 ) = 1 d \mod {(p - 1) \cdot (q - 1)} = 1 dmod(p1)(q1)=1,即d(p - 1)·(q - 1)互质,然后给出 ( d ⋅ e ) m o d ( ( p − 1 ) ⋅ ( q − 1 ) ) = 1 (d\cdot e) \mod ((p - 1)\cdot (q - 1)) = 1 (de)mod((p1)(q1))=1。使用更易懂的公式可表述为: d ⋅ e − k ( ( p − 1 ) ⋅ ( q − 1 ) ) = 1 ,(其中 k 是一个未知量) d\cdot e - k((p - 1)\cdot (q - 1)) = 1,(其中k是一个未知量) dek((p1)(q1))=1,(其中k是一个未知量),意思是:对于 d ⋅ e d \cdot e de,可以减去 k k k ( p − 1 ) ⋅ ( q − 1 ) (p - 1)\cdot (q - 1) (p1)(q1),使得最后的差值为 1 1 1

对公式 d ⋅ e − k ( ( p − 1 ) ⋅ ( q − 1 ) ) = 1 ,(其中 k 是一个未知量) d\cdot e - k((p - 1)\cdot (q - 1)) = 1,(其中k是一个未知量) dek((p1)(q1))=1,(其中k是一个未知量) 的理解:

举个例子:假设 d ⋅ e = 16 d \cdot e = 16 de=16 ( p − 1 ) ⋅ ( q − 1 ) = 5 (p - 1)\cdot (q - 1) = 5 (p1)(q1)=5,我们要求 ( d ⋅ e ) m o d ( ( p − 1 ) ⋅ ( q − 1 ) ) = 1 即 16 m o d 5 = 1 (d\cdot e) \mod ((p - 1)\cdot (q - 1)) = 1 ~~~ 即16 \mod 5 = 1 (de)mod((p1)(q1))=1   16mod5=1,这个意思是使16除以5的余数为1,因为除法和减法有着非常大的联系(除以一个数的值等于减去这个数的次数,余数等于相减之后的差值),因此我们可以从新将其写为 16 − k ⋅ 5 = 1 16 - k\cdot 5 = 1 16k5=1,即16 减去多少个5后值为1

为了方便书写,我们设 φ = ( p − 1 ) ⋅ ( q − 1 ) \varphi = (p - 1)\cdot(q - 1) φ=(p1)(q1),这样公式就又化简为了 d ⋅ e − k φ = 1 ,(其中 k 是一个未知量) d\cdot e - k\varphi = 1,(其中k是一个未知量) dekφ=1,(其中k是一个未知量),由于又涉及到了两个新的未知量 φ \varphi φ k k k,要想求出 e e e,我们需要提前求出 φ \varphi φ k k k,对于k,暂时无法直接求出,因为并没有足够的信息能够求出这个值(在下面会使用到扩展欧几里得算法进行求解),对于 φ \varphi φ,其中又包含了两个参数pq,对于pq的求解,我们可以使用枚举的思想,利用给出的公式 d = p ⋅ q d = p \cdot q d=pqp q都是质数这两个条件进行求解。


求解参数 p p p 和参数 q q q

一个规律是:对于一个数,如果这个数是由两个质数相乘得来的,那么这个数的因子只包含1它本身以及相乘而来的两个质数。如: 35 = 5 × 7 35 = 5 \times 7 35=5×7,那么35的因子有1 35 5 7这四个数。

利用这个规律,我们可以设计出如下算法:

// 寻找pq的值
void Find(long long n, long long &p, long long &q){int ans;for(long long i = 2;i * i <= n;i ++){if(n % i != 0){continue;}p = i;q = n / p;}return ;
} 

如此我们便找到了两个参数pq,接下来便到了真正要求解参数e的时候了我们得到了参数 φ \varphi φ,因此原公式 d ⋅ e − k φ = 1 d\cdot e - k\varphi = 1 dekφ=1,只剩下了两个参数k,和我们需要的参数e,这就变为了求解一个二元一次方程组,对于二元一次方程组,要想求出两个未知量,我们至少需要直到两个等式关系,但是这里我们只知道了一组等式关系,因此无法使用常规的思想进行求解。但是观察到等式右边的值为1,如果了解扩展欧几里得算法的小伙伴就会想到,这个方程可以使用扩展欧几里得的方法进行求解。

扩展欧几里得算法

对于扩展欧几里得算法,百度上是这样解释的。

请添加图片描述

对于公式: a x + b y = gcd ⁡ ( a , b ) ax + by = \gcd(a, b) ax+by=gcd(a,b)gcd(a, b)表示ab的最大公约数。一个理解方式是:如果ab是整数,那么一定存在整数xy,能使得公式 a x + b y = gcd ⁡ ( a , b ) ax + by = \gcd(a, b) ax+by=gcd(a,b)成立。换句话说:如果公式 a x + b y = C ax + by = C ax+by=C成立,那么 C C C一定是 gcd ⁡ ( a , b ) \gcd (a,b) gcd(a,b)的若干倍。

对于扩展欧几里得算法由如下公式:

公式推导:

a 1 ⋅ x 1 + b 1 ⋅ y 1 = gcd ⁡ ( a 1 , b 1 ) a_1 \cdot x_1 + b_1 \cdot y_1 = \gcd (a_1, b_1) a1x1+b1y1=gcd(a1,b1)
a 2 = ( b 1 ) ⋅ x 2 + b 2 = ( a 1 % b 1 ) = ⋅ y 2 = gcd ⁡ ( a 2 , b 2 ) a_2=(b1) \cdot x_2 + b_2 = (a_1 \% b_1) = \cdot y_2 = \gcd (a_2, b_2) a2=(b1)x2+b2=(a1%b1)=y2=gcd(a2,b2)
a 3 = ( b 2 ) ⋅ x 3 + b 3 = ( a 2 % b 2 ) ⋅ y 3 = gcd ⁡ ( a 3 , b 3 ) a_3 = (b2) \cdot x_3 + b_3 = (a_2 \% b2) \cdot y_3 = \gcd (a_3, b_3) a3=(b2)x3+b3=(a2%b2)y3=gcd(a3,b3)
⋮ \vdots
a i − 1 = ( b i − 2 ) ⋅ x i − 1 + b i − 1 = ( a i − 2 % b i − 2 ) ⋅ y i − 1 = g c d ( a i − 1 , b i − 1 ) a_{i-1} = (b_{i - 2})\cdot x_{i - 1} + b_{i - 1} = (a_{i - 2} \% b_{i - 2}) \cdot y_{i - 1} = gcd(a_{i - 1}, b_{i - 1}) ai1=(bi2)xi1+bi1=(ai2%bi2)yi1=gcd(ai1,bi1)
a i = ( b i − 1 ) ⋅ x i + b i = ( a i − 1 % b i − 1 ) ⋅ y i = g c d ( a i , b i ) a_i = (b_{i - 1})\cdot x_i + b_i = (a_{i - 1} \% b_{i - 1}) \cdot y_i = gcd(a_i, b_i) ai=(bi1)xi+bi=(ai1%bi1)yi=gcd(ai,bi)
⋮ \vdots
a n − 1 = ( b n − 2 ) ⋅ x n − 1 + b n − 1 = ( a n − 2 % b n − 2 ) ⋅ y n − 1 = g c d ( a n − 1 , b n − 1 ) a_{n-1} = (b_{n - 2})\cdot x_{n - 1} + b_{n - 1} = (a_{n - 2} \% b_{n - 2}) \cdot y_{n - 1} = gcd(a_{n - 1}, b_{n - 1}) an1=(bn2)xn1+bn1=(an2%bn2)yn1=gcd(an1,bn1)
a n = ( b n − 1 ) ⋅ x n + b n = ( a n − 1 % b n − 1 ) ⋅ y n = g c d ( a n , b n ) a_n = (b_{n - 1})\cdot x_n + b_n = (a_{n - 1} \% b_{n - 1}) \cdot y_n = gcd(a_n, b_n) an=(bn1)xn+bn=(an1%bn1)yn=gcd(an,bn)

由欧几里得算法(即:辗转相除法)可以知道: gcd ⁡ ( a i − 1 , b i − 1 ) = gcd ⁡ ( a i , b i ) \gcd (a_{i - 1}, b_{i - 1}) = \gcd (a_i, b_i) gcd(ai1,bi1)=gcd(ai,bi),即无论ab的值是什么,其最大公因数永远是相等的。

因此可以得到: a i = ( b i − 1 ) ⋅ x i − 1 + b i = ( a i − 1 % b i − 1 ) ⋅ y i − 1 = a i − 1 = ( b i − 2 ) ⋅ x i + b i − 1 = ( a i − 2 % b i − 2 ) ⋅ y i a_i = (b_{i - 1})\cdot x_{i - 1} + b_i = (a_{i - 1} \% b_{i - 1}) \cdot y_{i - 1} = a_{i-1} = (b_{i - 2})\cdot x_i + b_{i - 1} = (a_{i - 2} \% b_{i - 2}) \cdot y_i ai=(bi1)xi1+bi=(ai1%bi1)yi1=ai1=(bi2)xi+bi1=(ai2%bi2)yi

因为: a % b = a − a b × b a \% b = a - \frac{a}{b} \times b a%b=aba×b,带入到上述公式中得可以得到: a i − 1 ⋅ x i − 1 + b i − 1 ⋅ y i − 1 = b i − 1 ⋅ x i + ( a i − 1 − ( a i − 1 / b i − 1 ) × b i − 1 ) ⋅ y i a_{i - 1} \cdot x_{i - 1} + b_{i - 1} \cdot y_{i - 1} = b_{i - 1} \cdot x_i + (a_{i - 1} - (a_{i - 1} / b_{i - 1}) \times b_{i - 1}) \cdot y_i ai1xi1+bi1yi1=bi1xi+(ai1(ai1/bi1)×bi1)yi,整理可得: a i − 1 ⋅ x i − 1 + b i − 1 ⋅ y i − 1 = a i − 1 ⋅ y i + b i − 1 ⋅ ( x i − a i − 1 b i − 1 ⋅ y i ) a_{i - 1} \cdot x_{i - 1} + b_{i - 1} \cdot y_{i - 1} = a_{i - 1} \cdot y_i + b_{i - 1} \cdot (x_i - \frac{a_{i - 1}}{b_{i - 1}}\cdot y_i) ai1xi1+bi1yi1=ai1yi+bi1(xibi1ai1yi)

可以发现如下规律:

x i − 1 = y i x_{i - 1} = y_i xi1=yi

y i − 1 = x i − a i − 1 b i − 1 ⋅ y i y_{i - 1} = x_i - \frac{a_{i - 1}}{b_{i - 1}}\cdot y_i yi1=xibi1ai1yi

并且由欧几里得算法可以得到:最后 b n = 0 b_n = 0 bn=0 a n = g c d ( a , b ) a_n = gcd(a, b) an=gcd(a,b)

如果我们知道了gcd(a, b),那么我们可任意设定 y n y_n yn的值,因为 y n y_n yn的参数 b n = 0 b_n = 0 bn=0,并且设定 x n x_n xn的值为 g c d ( a , b ) gcd(a, b) gcd(a,b),再利用上面得到的规律,可以递归的求解出 x 1 x_1 x1 y 1 y_1 y1的值。举例:对于 a n = ( b n − 1 ) ⋅ x n + b n = ( a n − 1 % b n − 1 ) ⋅ y n = g c d ( a n , b n ) a_n = (b_{n - 1})\cdot x_n + b_n = (a_{n - 1} \% b_{n - 1}) \cdot y_n = gcd(a_n, b_n) an=(bn1)xn+bn=(an1%bn1)yn=gcd(an,bn),我们可以求解出 x n x_n xn y n y_n yn(因为这两个值是设定出来的),然后 x n − 1 = y n y n − 1 = x n − a n − 1 b n − 1 ⋅ y n x_{n - 1} = y_n~~~y_{n - 1} = x_n - \frac{a_{n - 1}}{b_{n - 1}}\cdot y_n xn1=yn   yn1=xnbn1an1yn,如此便可递归的求解出 x 1 x_1 x1 y 1 y_1 y1了。

因为公式 d ⋅ e − k φ = 1 d\cdot e - k\varphi = 1 dekφ=1 d d d φ \varphi φ是互质的,也就是 gcd ⁡ ( d , φ ) = 1 \gcd(d, \varphi) = 1 gcd(d,φ)=1,正好可以使用扩展欧几里得算法进行求解这个二元一次方程组,相当于已经知道了 gcd ⁡ ( d , φ ) \gcd(d, \varphi) gcd(d,φ)的值, d ⋅ e − k φ = gcd ⁡ ( d , φ ) = 1 d\cdot e - k\varphi = \gcd(d, \varphi) = 1 dekφ=gcd(d,φ)=1

代码实现:

long long ex_gcd(long long a, long long b, long long &x, long long &y){   // 这里的参数x,y一定要用引用的方式传参if(!b){  // 如果b == 0, 表明已经递归到最后一个了,就设定y = 0, x = 1(表示a和b的最大公因子)x = 1;y = 0;return a;   // 到达最后一个公式后就进行返回a,a表示的是第一个式子的最大公因子}long long d = e_gcd(b, a % b, x, y);  // 记录下一个式子的返回的a的值,因为是递归的关系,最终记录的是最后一个式子的a的值。long long t = x;   // 使用临时变量记录一下下一个式子得到的x的值x = y;  // 更新当前式子的x的值y = t - a / b * y;  // 更新当前式子的y的值return d;  // 最后返回d,d的值是由最后一个公式的a的值进行传递过来的,即(a, b)的最大公因子
}

如此我们便可以求得ek,的值了,如果上述代码返回的不是1,即(a, b)的最大公因子不是1,说明没有解,即:ab的最大公因子不是1,那么就直接输出-1,如果返回的是1,表明有解,并且已经求出解了,即:e = x, k = y。为了防止e为负数,需要对计算出的结果做如下运算: e = ( e m o d φ + φ ) m o d φ e = (e \mod \varphi + \varphi) \mod \varphi e=(emodφ+φ)modφ

如何理解公式 e = ( e m o d φ + φ ) m o d φ e = (e \mod \varphi + \varphi) \mod \varphi e=(emodφ+φ)modφ呢?

通俗的解释:

因为e满足公式 e ⋅ d ≡ 1 m o d φ ( n ) e\cdot d \equiv 1 \mod \varphi(n) ed1modφ(n) ,也就是 e ⋅ d e\cdot d ed1在模 φ \varphi φ下余数相等,因此为了确保e为正值,我们可以利用公式 e = ( e m o d φ + φ ) m o d φ e = (e \mod \varphi + \varphi) \mod \varphi e=(emodφ+φ)modφ来使e保持 0 − φ 0 - \varphi 0φ的范围内,举个例子:如果 a = -3b = 17m = 5,那么 − 3 ≡ 17 ( m o d 5 ) -3 \equiv 17 \pmod{5} 317(mod5),因为 -3 除以 5 的余数为 217 除以 5 的余数也为 2,为了保证a为正值,我们可以令: ( − 3 m o d 5 + 5 ) m o d 5 = ( 2 + 5 ) m o d 5 = 2 (-3 \mod 5 + 5) \mod 5 = (2 + 5) mod 5 = 2 (3mod5+5)mod5=(2+5)mod5=2。得到 a = 2 a = 2 a=2,并且a5进行取余得到的结果也为2

较为官方的解释:

保持同余性质:在RSA算法中,ed 必须满足 e ⋅ d ≡ 1 m o d φ ( n ) e\cdot d \equiv 1 \mod \varphi(n) ed1modφ(n) 表示 e ⋅ d e\cdot d ed1在模 φ \varphi φ下余数相等,这是加密和解密正确性的基础。如果 e 为负数,直接取模可能会导致 ed 不满足同余性质。通过使用 e = ( e m o d φ + φ ) m o d φ e = (e \mod \varphi + \varphi) \mod \varphi e=(emodφ+φ)modφ 这样的方法,可以保持 e 在模 φ \varphi φ 下的同余性质不变,同时确保 e为正值。

在数论中,同余性质是指两个整数除以同一个正整数所得的余数相同。形式上,如果两个整数 ab 除以正整数 m 所得的余数相同,则称 ab 在模 m下同余,记作 a ≡ b ( m o d m ) a \equiv b \pmod{m} ab(modm)。例如,如果 a = 7b = 17m = 5,那么 7 ≡ 17 ( m o d 5 ) 7 \equiv 17 \pmod{5} 717(mod5),因为 7 除以 5 的余数为 217 除以 5 的余数也为 2

在求解出e之后,我们可以直接使用公式: X = C e m o d n X = C^e \mod n X=Cemodn,将值进行带入即可,但是又因为 C C C的值非常大,我们需要用到快速幂的方法,又因为快速幂中存在乘法运算,极易导致内存溢出的现象(在很大的数的情况下),因此我们需要在快速幂的基础上使用快速乘的方法进行运算(在计算机中,计算加法的速度往往比计算乘法的速度要快),并且数值都要使用long long的类型。

代码:

// RSA解密
#include<iostream>
#include<math.h>
#include<vector> 
using namespace std;
typedef long long ll;
// 最大公约数
int gcd(int a, int b){return b == 0? a : gcd(b, a % b);
} // 扩展欧几里得算法
long long e_gcd(long long a, long long b, long long &x, long long &y){if(!b){  // 如果b == 0 x = 1;y = 0;return a;}long long d = e_gcd(b, a % b, x, y);long long t = x;x = y;y = t - a / b * y;return d;
}// 快速乘算法
ll FastTimes(ll num, ll times, ll n){ll ans = 0;    // 这里要初始化为0 num %= n;while(times){if(times & 1){ans += num;ans %= n;times --;}else{times >>= 1;num += num;num %= n;}}return ans;
} // 快速幂算法
ll FastPower(ll base, ll index, ll n){ll ans = 1;base %= n;while(index){if(index & 1){ans = FastTimes(ans, base, n);index--;}else{index >>= 1;base = FastTimes(base, base, n);}}return ans;
}// 寻找pq的值
void FindPQ(ll n, ll &p, ll &q){int ans;for(ll i = 2;i * i <= n;i ++){if(n % i != 0){continue;}p = i;q = n / p;}return ;
} int solve(){ll n = 1001733993063167141;ll c = 20190324;ll d = 212353;ll p = -1, q = -1;// FindPQ(n, p, q);  // 找到p q的值p=891234941,q=1123984201;// 找到p 和 q之后继续寻找ell fy = (p - 1) * (q - 1);ll _x, _y;ll gc = e_gcd(d, fy, _x, _y);ll e;if(gc == 1){e = (_x%fy + fy)%fy;}else{return -1;}ll X = FastPower(c, e, n);cout<<X<<endl;return 0;
}signed main(){ios::sync_with_stdio(0);cin.tie(0);ll t = 1; while(t--){solve();}return 0;
} 

在这里插入图片描述

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

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

相关文章

.[[backup@waifu.club]].svh勒索病毒数据怎么处理|数据解密恢复

尊敬的读者&#xff1a; 近年来&#xff0c;随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显&#xff0c;其中勒索病毒成为了一大威胁。.[[backupwaifu.club]].svh、.[[MyFilewaifu.club]].svh勒索病毒就是其中之一&#xff0c;它以其独特的传播方式和恶劣的加密手段…

【论文阅读——Profit Allocation for Federated Learning】

1.摘要 由于更为严格的数据管理法规&#xff0c;如《通用数据保护条例》&#xff08;GDPR&#xff09;&#xff0c;传统的机器学习服务生产模式正在转向联邦学习这一范式。联邦学习允许多个数据提供者在其本地保留数据的同时&#xff0c;协作训练一个共享模型。推动联邦学习实…

山洪灾害防治监测报警系统方案

一、概述 我国是全球地区复杂程度最高的国家之一&#xff0c;多种气候和地形特征&#xff0c;特定的地质环境条件决定了我国地质灾害呈现增长和频发的态势。加之全球气候的变化使得我国极端、恶劣的天气在各地区发生的频率逐渐增高。据统计&#xff0c;在中国有1300多个乡镇&am…

交换机与路由器缓冲区:寻找完美大小

*本文系SDNLAB编译自瞻博网络技术专家兼高级工程总监Sharada Yeluri领英 在路由器和交换机中&#xff0c;缓冲区至关重要&#xff0c;可以防止网络拥塞期间的数据丢失。缓冲区到底要多大&#xff1f;这个问题在学术界和工业界一直备受争议。本文探讨了高端路由器中数据包缓冲的…

PSPICE、Multisim和Saber哪个更适合电路仿真?没想到是它

PSPICE、Multisim和Saber这三个软件都是非常流行的模拟电路仿真工具&#xff0c;它们各自有各自的优缺点&#xff0c;我简单讲一下&#xff1a; PSPICE&#xff1a; 优点&#xff1a; 精度高&#xff1a;PSPICE是专业的电路仿真软件&#xff0c;可以进行高精度的模拟电路仿真…

关于DNS解析那些事儿,了解DNS解析的基础知识

DNS&#xff0c;全称Domain Name System域名系统&#xff0c;是一个将域名和IP地址相互映射的一个分布于世界各地的分布式数据库&#xff0c;而DNS解析就是将域名转换为IP地址的过程&#xff0c;使人们可以轻松实现通过域名访问网站。DNS解析是网站建设非常关键的一步&#xff…

深度学习在三维点云处理与三维重建中的应用探索

目录 点云数据处理 数据清洗 数据降噪和简化 数据配准 特征提取 数据增强 数据组织 性能考量 PointNet PointNet ​编辑 算法问题 改进方法 三维重建 重建算法 架构模块 流程步骤 标记说明 优点和挑战 点云数据处理 数据清洗 去噪&#xff1a;点云数据通常…

数据结构—顺序表(如果想知道顺序表的全部基础知识点,那么只看这一篇就足够了!)

前言&#xff1a;学习完了C语言的基础知识点之后&#xff0c;我们就需要使用我们所学的知识来进一步对存储在内存中的数据进行操作&#xff0c;这时候我们就需要学习数据结构。而这篇文章为数据结构中顺序表的讲解。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以…

一、OpenCvSharp环境搭建

一、Visual Studio 创建新项目 二、选择Windows窗体应用&#xff08;.NET Framework&#xff09; 直接搜索模板&#xff1a;Windows窗体应用(.NET Framework) 记得是C#哈&#xff0c;别整成VB(Visual Basic)了 PS&#xff1a;若搜索搜不到&#xff0c;直接点击安装多个工具和…

MemoryAnalyzer分析OpenJ9上的phd格式文件

在做excel大数据写入时&#xff0c;发生内存泄漏 core.20240412.093703.1.0001.dmp heapdump.20240412.093703.1.0002.phd需要分析heap dump文件 mat本身不支持&#xff0c;需要我们下载插件 https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/runtimes/tools…

同等学力申硕-计算机专业-历年真题及其他资料分享

同等学力申请硕士学位考试是比较适合在职人员的提升学位方式&#xff0c;了解过的人应该都知道&#xff0c;现在社会的竞争压力越来越大&#xff0c;为了提高职业生存能力&#xff0c;提升学位在所难免。 我将与大家分享一份珍贵的复习资料&#xff1a;这不仅是我个人备考的心…

Docker Desktop修改镜像存储路径 Docker Desktop Start ... 卡死

1、CMD执行wsl -l -v --all 2、Clean / Purge data 3、导出wsl子系统镜像: wsl --export docker-desktop D:\docker\wsl\distro\docker-desktop.tar wsl --export docker-desktop-data D:\docker\wsl\data\docker-desktop-data.tar4、删除现有的wsl子系统&#xff1a; wsl -…

Springboot集成RabbitMq+延时队列

1. 引入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2.配置yml 2.1 配置生产者yml spring:rabbitmq:host: localhostport: 5672virtual-host: …

主题换肤操作

有许多项目会遇见有light和dark多种颜色方案展示&#xff0c;如下&#xff1a; 这种是怎么实现的呢&#xff1f; 方案1&#xff1a;采用css变量来实现 /* 默认粉色主题 */ :root {--underline-dark: #000d8a;--gray-light: 229, 233, 240;--gray-dark: 34, 41, 57;--black: 1…

华为远程登陆管理配置:轻松掌握核心要点

实验拓扑及需求 实验步骤 A、配置相关地址及连通性测试 R1&#xff1a; [R1]int GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.12.1 24 R2&#xff1a; [R2]int gi 0/0/0 [R2-GigabitEthernet0/0/0]ip add 192.168.12.2 24 [R2]int gi 0/0/1 […

如何将对象转换成json字符串,以json格式输出,并获取到其中的特定字段

小王学习录 Json格式示例 1&#xff1a;简单的 JSON 对象示例 2&#xff1a;JSON 对象嵌套示例 3&#xff1a;JSON 数组示例 4&#xff1a;混合使用对象和数组 使用Gson将java对象转换成json字符串哪些数据类型的对象可以使用Gson转换为json字符串如何使用Gson将java对象转换成…

go语言学习--3.常用语句

目录 1.条件语句 1.1 if语句 1.2 if-else语句 1.3 switch语句 1.4 select语句 2.循环语句 2.1循环处理语句 2.2循环控制语句 3.go语言关键字 1.条件语句 和c语言类似&#xff0c;相关的条件语句如下表所示&#xff1a; 1.1 if语句 if 布尔表达式 {/* 在布尔表达式为 t…

小红的白色字符串

题目描述 小红拿到了一个字符串&#xff0c;她准备将一些字母变成白色&#xff0c;变成白色的字母看上去就和空格一样&#xff0c;这样字符串就变成了一些单词。 现在小红希望&#xff0c;每个单词都满足以下两种情况中的一种&#xff1a; 1.开头第一个大写&#xff0c;其余为…

echarts折线图自定义打点标记小工具

由于没研究明白echarts怎么用label和lableLine实现自定义打点标记&#xff0c;索性用markPoint把长方形压扁成线模拟了一番自定义打点标记&#xff0c;记录下来备用。&#xff08;markLine同理也能实现&#xff09; 实现代码如下&#xff1a; <!DOCTYPE html> <html…

C#基础--之数据类型

C#基础–之数据类型 在第一章我们了解了C#的输入、输出语句后&#xff0c;我这一节主要是介绍C#的基础知识&#xff0c;本节的内容也是后续章节的基础&#xff0c;好的开端等于成功的一半。在你阅读完本章后&#xff0c;你就有足够的C#知识编写简单的程序了。但还不能使用封装、…