当前位置: 首页 > news >正文

密码学精简版

密码学是数学上的一个分支,同时也是计算机安全方向上很重要的基础原理,设置密码的目的是保证信息的机密性、完整性和不可抵赖性,安全方向上另外的功能——可用性则无法保证,可用性有两种方案保证,冗余和备份,有关特性可见信息安全五大特性。

密码的发展也已由来已久,最早的密码可追溯到罗马时期,计算机诞生前的密码学都称为古典密码,现代密码则分为对称加密和非对称加密两两种,根本区别是解密使用的密钥,对称加密使用同一个密钥进行加密解密,非对称加密使用公钥加密,私钥解密,本文将对主流的算法进行简单介绍,基础概念可见密码算法的概念

古典密码

相关背景和知识也蛮有意思,基本是古代希腊和罗马时因为行政和战争的需要发展而来,详细可见该密码学发展简史和古典密码算法。

数学算法上的最早加密方法是凯撒加密,采用字母后移k位的方法生成密文,数学表示位a+k=m,这种方法如果知道原理其实只要暴力26次就破解了。

仿射密码采用移位密码和乘数密码的组合,字母在移位前先乘一个数,数学表示位ax+b(mod 26)=m,解密过程涉及逆元计算,仅作了解即可,详细方法见仿射密码。

弗吉尼亚密码是凯撒的改进,使用一个字符串进行加密,如code分别对应字母位置3 15 4 5,字母循环与这四个值相加加密。该方法的密钥破解有些困难,但因为密钥固定,而统计分析上句子出现字母频率的排序大致固定,如最常出现的是字母e,若统计中一个字母出现此处最多,则可推断其为e。但因为循环加密,特定字母的统计信息没有决定性作用,此时也可以通过词频统计,详细破解方法可见弗吉尼亚原理及破解。

对称密码

随着计算机的诞生,算力极大增强,古典密码用人手工来算可能很麻烦,但就几十上百种可能性对计算机来说实在是洒洒水,所以产生了保密性更强的对称密码。

DES—数据加密标准

Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。与流密码逐字节加密类似,DES是分组加密的应用,即将明文分成字节块,分别加密后再组合。

DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防对密钥进行逐段破译。

DES将数据分为64位的数据块,与64位的密钥进行运算加密,大致流程图如下:
DES流程图
各步流程为:
1,明文经过IP表置换扩散;
2,分为32位的 L 0 L_0 L0 R 1 R_1 R1
3, L 1 = R 0 L_1=R_0 L1=R0 R 1 = L 0 与 R 0 加密结果的异或 R_1=L_0与R_0加密结果的异或 R1=L0R0加密结果的异或
4,上述过程重复16次,实现混淆目的;
5,获得 L 1 6 和 R 1 6 L_16和R_16 L16R16
6,IP表逆置换获得密文。

详细说明如下:

明文首先经过IP置换,打乱原有顺序,即将对应序列的值移动到表的位置,置换表与逆置换表如下:
置换表与逆置换表
加密F函数过程如下:
1,E扩展,将32位的数据扩展为48位;
将32位数据分成8组,每行四位,每组的前后分别加上该位的上一个字符和下一个字符,就是增加两列,如图所示:
E扩展
2,与48位的密钥异或运算;
3,经S盒压缩数据到32位;
将数据分为8块,每块6位数据,6进4出,每块的头尾两个数转化成十进制数作为列数,中间四个数转化为十进制数作为行数,到S盒中对应查找转化,S盒有8个,进一步增加了保密性,S1盒如下图:
S1盒
这一步是算法中唯一非线性的,最直接的扩散手段。
4,P盒置换32位到32位,是再一次的混淆盒扩散过程。
P盒
再与L异或生成新的R。

最后讲密钥是如何生成的,64位密钥56位参与运算,8位校验位,分别为8,16,24,32,48,64,如何获取56位参与运算?
56位密钥先经过PC1表置换打乱顺序,前28为作为 C C C后28为作为 D D D,然后移位,具体不记得了,但也无伤大雅,再使用PC2表从56位中选48位用于运算。

DES折腾这么多遍,这表那表的,总结起来其实就是两个目的:
1,增加密钥复杂性,减少与密文关联性。又算又选的,让攻击者很难推出具体是那些数字受影响了,从而也就无法从密钥入手破解密文;
2,减少统计分析特征。不断从盒里选取匹配规则,明文多次打乱顺序重新组合,为的就是避免被统计分析猜出可能的字母或单词,减少统计分析破解的可能。

使用在线网站加密输出如下:
在线DES加密
该部分详细内容可见DES核心内容。

AES—高级加密标准

在DES已经被证明不安全的情境下,创造出来替代DES的,也说明到目前为止,AES还是安全的。

该分组密码算法需要明文长度128,密钥长度可以是128、192和256,分别需要进行10、12、14轮计算。该算法将128位明文分成4×4的矩阵,每个块内8位明文,经过初始变换后经过9轮循环(字节代换、行移位、列混合、轮密钥加),最后再经过一轮计算(字节代换、行移位、轮密钥加)后就输出密文,大致流程图如下:
AES加密算法
下面对一些操作详细讲解:
1,初始变换。只需要将明文与密文进行异或操作。
2,字节代换。S盒代换,每个块内8位数据,高4位作为行,低4位作为列,在S盒对应位置替换。
3,行移位。左循环移位,第一行不变,第二行左移一位,第三行左移两位,第四行左移三位。
4,列混合,也称列混淆。该部分是AES中最复杂的部分,左乘一个给定矩阵,但该乘法部署矩阵点积运算,而是基于有限域的计算方法,将点积运算中的+改为异或操作,×转为二进制,即 00000010 ∗ ( a 7 , a 6 . . . a 0 ) 00000010*(a_7,a_6...a_0) 00000010(a7,a6...a0),结果为分段函数,当 a 6 a 5 . . a 0 0 , a 7 = 0 a_6a_5..a_00,a_7=0 a6a5..a00a7=0 ( a 6 a 5 . . a 0 0 ) 异或 ( 00000010 ) , a 7 = 1 (a_6a_5..a_00)异或(00000010),a_7=1 (a6a5..a00)异或(00000010),a7=1
5,轮密钥加。该部分主要涉及轮密钥的生成步骤,即由密钥生成10轮密钥。
原密钥分为 w 0 , w 1 , w 2 , w 3 w_0,w_1,w_2,w_3 w0,w1,w2,w3四个列,计算新的 w i w_i wi使用 w [ i ] = w [ i − 4 ] 异或 w [ i − 1 ] ,当 i 不是 4 的倍数,即 w 5 = w 1 异或 w 4 w_{[i]}=w_{[i-4]}异或w_{[i-1]},当i不是4的倍数,即w_5=w_1异或w_4 w[i]=w[i4]异或w[i1],当i不是4的倍数,即w5=w1异或w4,当 i 是四的倍数, w [ i ] = w [ i − 4 ] 异或 T ( w [ i − 1 ] ) i是四的倍数,w_{[i]}=w[i-4]异或T(w[i-1]) i是四的倍数,w[i]=w[i4]异或T(w[i1]),其中T函数又分为如下步骤:
字循环,4个字节上移一个字节;
字节代换,即S盒代换;
常量异或,给定常量的第j列进行异或,j为当前进行的第j轮。

到此AES密文就可以生成了,更多详细内容可见AES加密算法,写的真的hin好。

同样在线工具生成如图:
AES密文生成

非对称加密

现在更强更神奇的算法是公钥加密,私钥解密,这种算法强度高,无需交换密钥,但是效率实在很低,比对称加密可能要慢一百倍,所以一般仅用于数字签名和密钥交换等领域。

密钥交换协议Diffie-Hellman

对称加密确实已经能保证安全了,但二者的密钥如何确定呢?密钥作为信息如果要在网上传递如何保证安全,再设置密钥保护吗?那这问题就没完没了,我猜是为了解决该问题,诞生了非对称加密。

非对称加密的图示如下:
密钥交换流程图
二者公开选取素数q和原根a,并各自选取私钥 X A 和 X B X_A和X_B XAXBalice计算 Y A = a X A m o d q Y_A=a^{X_A}mod q YA=aXAmodq,Bob计算 Y B = a X B m o d q Y_B=a^{X_B}mod q YB=aXBmodq,二者互相发送消息,再分别计算幂次并取余,获得的就是密钥,这是二者获得的密钥相同,这是因为 ( a x m o d p ) y m o d p = a x y m o d p (a^x mod p)^ymod p=a^{xy}mod p (axmodp)ymodp=axymodp

此时就算信道中有监听者获得了 Y A , Y B Y_A,Y_B YAYB,但因为离散对数难题,他也无法获知私钥,从而也无法获得最终的密钥K。

RSA

这应该是名气最大的一种加密算法了,几乎被人研究透了,当作学习范本再来研究一下吧。

一般流程为:
1,选择大素数p,q;
2,n=p*q;
3,n的欧拉函数, ψ ( n ) = ( p − 1 ) ∗ ( n − 1 ) \psi(n)=(p-1)*(n-1) ψ(n)=(p1)(n1)
4,存在于 ψ ( n ) \psi(n) ψ(n)互素的整数e, 1 < e < ψ ( n ) 1<e<\psi(n) 1<e<ψ(n)
5,计算出e对 ψ ( n ) \psi(n) ψ(n)的模反元素d;
6,公钥e,n
7,私钥d,n
明文M加密 M e m o d n = C M^emod n=C Memodn=C,密文C解密 C d m o d n = M C^dmod n=M Cdmodn=M

该算法的安全性建立在离散对数难题的基础上,即 x = a y m o d p x=a^y mod p x=aymodp当p很大时很难求出y。

数学原理一个个解释,首先是欧拉函数及计算
欧拉函数指小于n的正整数中,与n互素的数的个数,如果n为素数, ψ ( n ) = n − 1 \psi(n)=n-1 ψ(n)=n1,n如果能分解为两个素数之积,即$\psi(n)=\psi(pq)=\psi§\psi(q)=(p-1)*(q-1)$1

模反元素指,当e与 ψ ( n ) \psi(n) ψ(n)互素,一定有一个整数d使 e d − 1 被 ψ ( n ) ed-1被\psi(n) ed1ψ(n)整除,d为e的模反元素,即 e d − 1 = k ψ ( n ) ed-1=k\psi(n) ed1=kψ(n)

证明私钥能解密
C d m o d n = ( M e m o d n ) d m o d n = M e d m o d n m o d n = M k ψ ( n ) M m o d n C^d mod n=(M^e mod n)^d mod n=M^{ed}mod n mod n=M^{k\psi(n)}M mod n Cdmodn=(Memodn)dmodn=Medmodnmodn=Mkψ(n)Mmodn
因为n是很大的数,如果 M k ψ ( n ) = 1 M^{k\psi(n)}=1 Mkψ(n)=1,上式取余的结果就是M,该步骤可由费马小定理证明,且涉及一些数论的知识,详细可见RSA中的数论基础,笔者作为了解,选择只记住结论。

ECC椭圆曲线

椭圆曲线指 y 2 = x 3 + a x + b , 4 a 3 + 27 b 2 ! = 0 y^2=x^3+ax+b,4a^3+27b^2!=0 y2=x3+ax+b,4a3+27b2!=0的方程。

椭圆曲线困难问题

该问题与离散对数和大数分解等问题不同,椭圆曲线利用数形结合的思想建立困难问题,数学形式表达为 Q = k P Q=kP Q=kP,其中P为基点,Q为公钥,k为私钥,但 k P kP kP不是简单数乘运算,而是在椭圆曲线上先建立直线,再找对称点,A+B的示例图如下:
连接AB取与椭圆曲线的交点,再找关于x轴的对称点作为A+B的结果
椭圆曲线加法
如果是A+A时就是A点的切线与椭圆曲线的交点,n个A求和时,下一个落点并没有什么规律,也就是已知A计算nA是简单的,但已知nA求n是复杂的,这是椭圆曲线密码安全性的基础,部分落点展示如下图:落点展示

椭圆曲线加解密过程

1,选取椭圆曲线 E p ( a , b ) Ep(a,b) Ep(a,b)上的一个点作为基点
2,选大数k作为私钥,生成公钥 Q = k P Q=kP Q=kP
3,选取随机数r,密文C明文M,加密 C = ( r P , M + r Q ) C=(rP,M+rQ) C=(rPM+rQ),密文是一个点对
4,解密 M + r Q − k ( r P ) = M + r ( k P ) − k ( r P ) = M M+rQ-k(rP)=M+r(kP)-k(rP)=M M+rQk(rP)=M+r(kP)k(rP)=M

后续还有复杂的数学理论知识,感兴趣可以看椭圆曲线加密算法。

SM2

SM2是我国根据椭圆曲线制定的国家密码标准,相关文件链接可见密码管理局,具体包括数字签名协议,密钥交换协议和公钥密码算法,本文将介绍公钥密码算法。

SM2的私钥为 d B d_B dB,公钥 p B = [ d B ] G p_B=[d_B]G pB=[dB]G,klen为明文长度,G为基点,该方法正向易求,反向难求 d B d_B dB,加密过程如下:
1,密文 C = C 1 ∣ ∣ C 3 ∣ ∣ C 2 C=C_1||C_3||C_2 C=C1∣∣C3∣∣C2,即三部分的拼接,明文M,下面将分别计算 C i C_i Ci
2, C 1 = [ k ] G C_1=[k]G C1=[k]G
3, C 3 = H a s h ( x ∣ ∣ M ∣ ∣ y ) , ( x , y ) = [ k ] p B C_3=Hash(x||M||y),(x,y)=[k]p_B C3=Hash(x∣∣M∣∣y),(x,y)=[k]pB,拼接一段hash值
4, C 2 = M ⊕ t , t = K D F ( x ∣ ∣ y ∣ ∣ k l e n ) C_2=M⊕t,t=KDF(x||y||klen) C2=Mtt=KDF(x∣∣y∣∣klen),KDF为密钥派生函数,用于共享秘密比特串中派生出密钥数据,该函数又需要使用密码杂凑算法 H 2 H_2 H2,具体见下图文件:
密钥派生函数
详细方法都在官方文档中,有兴趣可进一步研究。

哈希函数—SHA1

英文为hash,音译为哈希,也称作散列函数,目的是将不等长的数据转化为等长输出,详细原理可见常见的hash算法及原理。简单来说就是将数据通过哈希函数,映射到类似数组结构的哈希表上,因为数据多可能产生同样的序号,如何处理冲突的哈希值是哈希函数的关键。

通常的哈希是不需要密钥的,只根据消息计算摘要,而几乎不可能逆向推出原消息,可用于验证完整性,该方法还可用于签名等安全机制,消息或文件先进行哈希计算摘要,再使用私钥加密哈希值,接收者公钥解密,重新计算哈希值并比较,一致则说明未被修改过。

MD5易产生碰撞,产生了SHA1,但其安全性还不够,有了更安全但也更慢的SHA2,随着量子计算机的发展,SHA3甚至说可以应对量子计算机的威胁,这都太前端了,民用领域SHA1应该就很足够用了,所以笔者稍微学习了一下该算法。

SHA1中文名安全散列算法,输入一个0到 2 64 2^{64} 264位的消息,固定输出160bit的消息摘要。

首先将明文进行补位,SHA1运算基于长度为512的明文分组,所以需要先将明文M补至512的整数倍,就算消息已经是512的倍数也需要补,直到满足 L m o d 512 = 448 Lmod 512=448 Lmod512=448,余64位用于存消息长度。
具体补的形式是最后一位加1,其余位补足够的0。计算时使用多个512分组散列生成160bit摘要,并参与下一次运算,直到最后,类似链式计算,结构如下图:
SHA1运算
具体运算需要4轮×20个步骤,产生160bit结果存于5个32位的连接变量中,a、b、c、d、e。详细步骤如下:

1,512位的块分为16×32的向量, M [ 0 ] . . . M [ 15 ] M[0]...M[15] M[0]...M[15]扩充到80×32的 W [ 0 ] . . . W [ 79 ] W[0]...W[79] W[0]...W[79]。具体扩充方法为:
W t = M t , 0 < t ≤ 15 W_t=M_t,0<t \le15 Wt=Mt,0<t15
W t = R O T L 1 ( W t − 3 ⊕ W t − 8 ⊕ W t − 14 ⊕ W t − 16 ) , 16 ≤ t ≤ 79 W_t=ROTL^1(W_{t-3}⊕W_{t-8}⊕W_{t-14}⊕W_{t-16}),16\le t\le79 Wt=ROTL1(Wt3Wt8Wt14Wt16),16t79,即异或后左移一位。

2,80轮运算

for t=0 to 79{T=a左移+f(b,c,d)+kt+wte=dd=cc=b左移30位b=aa=T}

其中kt是常量,对应t不同取值不同,ft为分段函数运算。最终 H i = a / b / c . . + H i H_i=a/b/c..+H_i Hi=a/b/c..+Hi实现更新迭代。

总结

本章学习了密码学的两大分类,对称密码和非对称密码,对称密码现在就用AES,非对称最安全的是椭圆曲线,详细实现过程这换那换的其实很麻烦,非数学专业很难理解也记不住,学习算法特性和应用场景即可。

对称密码基本能实现信息的保护,但因为密钥作为信息也要在网络中传递,为了保证密钥的安全,需要使用非对称密码,此外非对称密码还可以实现数字签名鉴权过程。不同于加密过程,散列将不等长消息输出等长摘要,可用于验证完整性。

虽然说是第二次学,但这次零零散散也算折腾八小时,很多算法的具体步骤和原理并没有搞清楚,涉及到较为深入的数论知识实在让人头大。作为一般的程序开发者,甚至安全人员的从业者了解到这也基本够了。

相关文章:

密码学精简版

密码学是数学上的一个分支&#xff0c;同时也是计算机安全方向上很重要的基础原理&#xff0c;设置密码的目的是保证信息的机密性、完整性和不可抵赖性&#xff0c;安全方向上另外的功能——可用性则无法保证&#xff0c;可用性有两种方案保证&#xff0c;冗余和备份&#xff0…...

开源模型迎来颠覆性突破:DeepSeek-V3与Qwen2.5如何重塑AI格局?

不用再纠结选择哪个AI模型了&#xff01;chatTools 一站式提供o1推理模型、GPT4o、Claude和Gemini等多种选择&#xff0c;快来体验吧&#xff01; 在全球人工智能模型快速发展的浪潮中&#xff0c;开源模型正逐渐成为一股不可忽视的力量。近日&#xff0c;DeepSeek-V3和Qwen 2.…...

【51单片机零基础-chapter4:LED数码管】

LED数码管本质是一种廉价的显示器,由多个发光二极管封装组成的8字形器件 如果要显示6,那么需要点亮除了B以外的所有段,并且开发板上默认是共阴极 阳极A->G除了B全点亮,所以7,4,2,1,9,10全接正极:10111110 这个就是段码,表示显示的数据 静态LED显示 开发板上是四个一体…...

【网络】什么是路由协议(Routing Protocols)?常见的路由协议包括RIP、OSPF、EIGRP和BGP

路由协议(Routing Protocols) 像 google map RIP &#xff08;Routing Information Protocol&#xff09;:跳数 超了就废了 OSPF&#xff08;Open Shortest Path First&#xff09; 就好像拿着map找最短距离(跳数) EIGRP&#xff08;Enhanced Interior Gateway Routing Protoco…...

Unity3D ILRuntime开发原则与接口绑定详解

引言 ILRuntime是一款基于C#的热更新框架&#xff0c;使用IL2CPP技术将C#代码转换成C代码&#xff0c;支持动态编译和执行代码&#xff0c;适用于Unity3D的所有平台&#xff0c;包括Android、iOS、Windows、Mac等。本文将详细介绍ILRuntime在Unity3D中的开发原则及接口绑定技术…...

闻泰科技涨停-操盘训练营实战-选股和操作技术解密

如上图&#xff0c;闻泰科技&#xff0c;今日涨停&#xff0c;这是前两天分享布局的一个潜伏短线的标的。 选股思路&#xff1a; 1.主图指标三条智能辅助线粘合聚拢&#xff0c;即将选择方向 2.上图红色框住部分&#xff0c;在三线聚拢位置&#xff0c;震荡筑底&#xff0c;…...

我用AI学Android Jetpack Compose之开篇

最近突发奇想&#xff0c;想学一下Jetpack Compose&#xff0c;打算用Ai学&#xff0c;学最新的技术应该要到官网学&#xff0c;不过Compose已经出来一段时间了&#xff0c;Ai肯定学过了&#xff0c;用Ai来学&#xff0c;应该问题不大&#xff0c;学习过程记录下来&#xff0c;…...

25考研王道数据机构课后习题-----顺序表链表部分

文章目录 1.顺序表题目2.链表相关题目3.我的个人总结 声明&#xff1a;以下内容来自于B站知名up主白话拆解数据结构&#xff0c;望获悉&#xff1b; 1.顺序表题目 下面的这个说的是&#xff1a;下面的哪一个是组成我们的顺序表的有限序列&#xff0c;这个应该是数据元素&#x…...

新能源电动汽车动力电池技术

新能源电动汽车动力电池技术是新能源汽车发展的核心之一&#xff0c;以下是动力电池技术的一些关键方面&#xff1a; 技术进展 能量密度提升&#xff1a;近年来&#xff0c;动力电池的能量密度有了显著提升&#xff0c;从2010年的100Wh/kg提高到2024年的300Wh/kg。能量密度的…...

修复 ITunes 在 Windows 或 Mac 上不断崩溃的问题 [100% 有效]

对于 iDevice 用户来说&#xff0c;只能通过 iTunes 在 iDevice 和计算机之间传输文件的困境一直是一个紧迫的问题。所有 iPhone 用户可能都知道&#xff0c;iTunes 并不是一款高效的应用程序&#xff0c;有时性能会很差&#xff0c;例如在 iDevices 和计算机之间传输文件时不断…...

Android设备使用AOA协议进行主机与配件模式通信

1.使用TYPC-C数据线连接两台华为手机&#xff1a; TYPE-C线&#xff0c;先连接下图右边的ACCESSORY 再连接左边的HOST 此时左边的HOST(白色) 会给右边的ACCESSORY(黑色) 充电 接着打开左连接的HostChart会自动调起授权&#xff0c;然后会启动右边的AccessoryChart USB HOS…...

Python爬虫入门实例:Python7个爬虫小案例(附源码)

引言 随着互联网的快速发展&#xff0c;数据成为了新时代的石油。Python作为一种高效、易学的编程语言&#xff0c;在数据采集领域有着广泛的应用。本文将详细讲解Python爬虫的原理、常用库以及实战案例&#xff0c;帮助读者掌握爬虫技能。 一、爬虫原理 爬虫&#xff0c;又…...

生成对抗网络 (Generative Adversarial Network, GAN) 算法MNIST图像生成任务及CelebA图像超分辨率任务

生成对抗网络 (Generative Adversarial Network, GAN) 算法详解与PyTorch实现 目录 生成对抗网络 (Generative Adversarial Network, GAN) 算法详解与PyTorch实现1. 生成对抗网络 (GAN) 算法概述1.1 生成器与判别器1.2 GAN的优势2. GAN的核心技术2.1 目标函数2.2 生成器2.3 判别…...

快速排序排序方法演示及算法分析(附代码和实例)

基本思想&#xff1a; 任取一个元素&#xff08;比如第一个&#xff09;为中心&#xff0c;称为枢轴&#xff08;pivot&#xff09;所有比它小的元素一律前放&#xff0c;比它大的元素后放&#xff0c;形成左右两个子表对各子表重新选择中心元素并以此规则调整直到每个子表的元…...

库迪困境:供应链补救失效背后的市场错配

作者 | 曾响铃 文 | 响铃说 近日&#xff0c;红餐网证实了库迪咖啡暂停便捷店招商的消息。库迪官方回应称&#xff0c;店中店模式招商只是按下了暂停键&#xff0c;不排除未来重启的可能。 但一批被“暂停”的便捷店加盟商&#xff0c;不知道等不等起库迪的未来重启。 小红…...

解决openpyxl操纵带公式的excel或者csv之后,pandas无法读取数值的问题

1 功能特点 openpyxl&#xff1a; 这是一个专门用于操作Excel文件&#xff08;.xlsx/.xlsm&#xff09;的库。它提供了丰富的功能来读取、写入和修改Excel文件的各个元素&#xff0c;如单元格、行、列、工作表等。例如&#xff0c;可以通过openpyxl轻松地创建一个新的Excel工作…...

基于傅立叶神经网络(FNN)与物理信息神经网络(PINN)求解泊松方程(附Pytorch源代码)

基于傅立叶神经网络(FNN)与物理信息神经网络(PINN)求解泊松方程 一、引言 偏微分方程(Partial Differential Equation, PDE)在科学与工程领域有着广泛的应用。传统数值方法(如有限差分法、有限元法)在求解这类问题时,尽管已经非常成熟,但随着问题复杂度的增加,其计…...

小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式

这一节目标是实现底部推荐商品的结构和样式&#xff0c;由于这里要求横向滚动&#xff0c;所以需要使用上节介绍的 scroll-view 功能&#xff0c;并使用 scroll-x 属性支持横向滚动&#xff0c;推荐商品区域中的每一个商品是一个单独的 view&#xff0c;每个view 中需要写三个组…...

Flink读写Kafka(DataStream API)

在Flink里,已经预定义了kafka connector,使用该connector我们可以读写kafka,并且能实现exactly once的语义。 要使用需要引入相关的maven依赖,在这里,因为读写kafka,就会涉及一个问题,kafka-client和broker的版本兼容问题,不过因为kafka client和broker的双向兼容的良…...

SCAU期末笔记 - 数据库系统概念往年试卷解析

数据库搞得人一头雾水&#xff0c;题型太多太杂&#xff0c;已经准备摆烂了。就刷刷往年试卷&#xff0c;挂不挂听天由命。 2019年 Question 1 选择题 1. R ∩ S R∩S R∩S等于一下哪个选项&#xff1f; 画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩…...

flutter在windows平台中运行报错

PS D:\F\luichun> flutter run当运行flutter项目时&#xff0c;【解决如下报错】 /C:/flutter/packages/flutter/lib/src/painting/star_border.dart:530:27: Error: The getter Matrix4 isnt defined for the class _StarGenerator.- _StarGenerator is from package:flut…...

HTML——75. 内联框架

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>内联框架</title><style type"text/css">iframe{width: 100%;height: 500px;}</style></head><body><!--iframe元素会创建包含…...

python对mongodb的增删查改

python对mongodb的增删查改 1. 安装 pymongo2. 连接 MongoDB3. 创建&#xff08;插入&#xff09;文档插入单个文档插入多个文档 4. 查询文档查询单个文档查询多个文档复杂查询嵌套查询分页条件查询&#xff08;通用模版&#xff09; 5. 更新文档更新单个文档更新多个文档更新嵌…...

【JS】期约的Promise.all()和 Promise.race()区别

概述 Promise.all() 和 Promise.race() 都是 JavaScript 中处理多个异步操作的 Promise 方法&#xff0c;但它们的行为和返回结果有所不同。 Promise.all()和Promise.race() 1. Promise.all() Promise.all() 接受一个由多个 Promise 实例组成的可迭代对象&#xff08;例如数…...

使用 RxJS 库实现响应式编程

什么是 RxJS&#xff1f; RxJS&#xff08;Reactive Extensions for JavaScript&#xff09;是一个用于响应式编程的库&#xff0c;它使得处理异步数据流变得更加简单和优雅。通过使用 Observables&#xff08;可观察对象&#xff09;&#xff0c;你可以轻松地处理事件、HTTP …...

ARP攻击的原理和实现 (网络安全)

ARP攻击的原理和实现 ARP&#xff08;Address Resolution Protocol&#xff0c;地址解析协议&#xff09;是一种网络协议&#xff0c;用于在局域网内将IP地址映射到MAC地址。在以太网中&#xff0c;设备通过广播ARP请求来查询目标IP地址对应的MAC地址&#xff0c;从而建立通信…...

chatgpt model spec 2024

概述 这是模型规范的初稿&#xff0c;该文档规定了我们在OpenAI API和ChatGPT中的模型的期望行为。它包括一组核心目标&#xff0c;以及关于如何处理冲突目标或指令的指导。 我们打算将模型规范作为研究人员和数据标注者创建数据的指南&#xff0c;这是一种称为从人类反馈中进…...

单片机-LED实验

1、51工程模版 #include "reg52.h" void main(){ while(1){ } } 2、LED灯亮 #include "reg52.h" sbit LED1P2^0; void main(){ while(1){ LED10; } } 3、LED闪烁 #include "reg52.h" sbit LED1P2^0; //P2大…...

QILSTE H10-C321HRSYYA高亮红光和黄光LED灯珠

在深入探讨H10-C321HRSYYA型号的复杂特性之前&#xff0c;我们首先需要明确其基本参数和功能。这款型号的LED产品以其独特的双色设计和卓越的性能在众多同类产品中脱颖而出。其外观尺寸为3.0x1.0x2.1mm&#xff0c;采用高亮黄光和红光的双色组合&#xff0c;赋予了其在多种应用…...

Appium(一)--- 环境搭建

一、Android自动化环境搭建 1、JDK 必须1.8及以上(1) 安装&#xff1a;默认安装(2) 环境变量配置新建JAVA_HOME:安装路径新建CLASSPath%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar在path中增加&#xff1a;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin&#xff1b;(3) 验证…...