奇妙的安全旅行之RSA算法

hi,大家好,我是开发者FTD。今天我们开始介绍非对称加密算法。非对称加密算法区别于对称加密算法的主要特点是,非对称加密算法有两个密钥:公钥 (public key) 和私钥 (private key)。公钥和私钥是一对密钥,如果用公钥对数据加密,那么只能用对应的私钥解密;相同的,如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以将这种加密算法称为非对称加密。

非对称加密算法的安全性好,由于有两个密钥,所以它不需要交换比较重要的私钥,只需要交换对外公开的公钥即可,它消除了用户最终交换密钥的需要。不过非对称加密算法的加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。

RSA 算法简介

RSA 算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。RSA 算法既能用于加密,也能用于做数字签名。

RSA 算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。

算法原理:

RSA 是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。

RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:

公钥 KUn:两素数 p 和 q 的乘积(p 和 q 必须保密)
e:与(p - 1)(q - 1)互质
私钥 KRd:e^-1 (mod(p-1)(q-1))
n: p 和 q 的乘积
加密C ≡ m^e mod n
解密m ≡ c^d mod n

大家看了这些公式估计有些懵,没关系,我们一个一个解释一下。首先我们先复习一下数学中的一些基础概念:

什么是“素数”?

素数也称为“质数”,是指除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积的数字。

例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。又例如,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。

什么是“互质数”(或“互素数”)?

小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。” 这里所说的“两个数”是指自然数。

判别方法主要有以下几种(不限于此):

  • 两个质数一定是互质数。例如,2与7、13与19。
  • 一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。
  • 1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
  • 相邻的两个自然数是互质数。如 15与 16。
  • 相邻的两个奇数是互质数。如 49与 51。
  • 大数是质数的两个数是互质数。如97与88。
  • 小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。
  • 两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。
什么是模指数运算?

我们先说下指数运算,指数是位于一个未知数的右上方,表示这个未知数相乘几次,例如:2 ^ 4 = 16;

模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3 = 1;26 mod 6 = 2;28 mod 2 = 0 等。

而模指数运算就是先做指数运算,取其结果后再做模运算。如
53mod7=125mod7=65 ^ 3 \quad mod \quad 7 \quad = \quad 125 \quad mod \quad 7 \quad = \quad 6 53mod7=125mod7=6
好,下面我们开始正式介绍RSA加密算法。

RSA 算法描述:
  1. 选择一对不同的、足够大的素数p,q。

  2. 计算 n = pq。

  3. 计算 f(n) = (p-1)(q-1) ,同时对p, q严加保密,不能让其他任何人知道。

  4. 找一个与 f(n) 互质的数 e,且 1<e<f(n) 。

  5. 计算 d,使得 de ≡ 1 mod f(n)。这个公式也可以表达为d ≡ e^-1 mod f(n)

    这里要解释一下, 是数论中表示同余的符号。公式中,≡ 符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d的值,让这个同余等式能够成立。

  6. 公钥 KU=(e,n),私钥 KR=(d,n)。

  7. 加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:

C≡MemodnC ≡ M^e \quad mod\quad n CMemodn

​ 解密过程为:
M≡CdmondnM ≡ C^d\quad mond \quad n MCdmondn

RSA 算法举例:

在这里,我们无法对RSA算法的正确性作严格的数学证明,但我们可以通过一个简单的例子来理解RSA算法的工作原理。为了便于计算。在以下实例中只选取小数值的素数p,q,以及e,假设用户A需要将明文“key”通过RSA加密后传递给用户B,过程如下:

(1)设计公私密钥(e,n)和(d,n)。

令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3与20互质)则e×d≡1 mod f(n),即 3×d ≡ 1 mod 20。

d怎样取值呢?可以用试算的办法来寻找。试算结果见下表:

de x d = 3 x d(e x d) mod (p - 1)(q - 1) = (3 x d) mod 20
133
266
399
41212
51515
61818
7211
8243
9276

通过试算我们找到,当d=7时,e×d≡1 mod f(n)同余等式成立。因此,可令d=7。从而我们可以设计出一对公私密钥,加密密钥(公钥)为:KU =(e,n)=(3,33),解密密钥(私钥)为:KR =(d,n)=(7,33)。

(2)英文数字化。

将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值,即:

字母abcdefghijklm
码值01020304050607080910111213
字母nopqrstuvwxyz
码值14151617181920212223242526

则得到分组后的key的明文信息为:11,05,25。

(3)明文加密

用户加密密钥(3,33) 将数字化明文分组信息加密成密文。根据公式
C≡Me(modn)C ≡ M^e \quad (mod\quad n) CMe(modn)
得:

113mod33=1111^3 \quad mod \quad 33 = 11 113mod33=11

53mod33=265^3 \quad mod \quad 33 = 26 53mod33=26

253mod33=1625^3 \quad mod \quad 33 = 16 253mod33=16

因此,得到相应的密文信息为:11,26,16。

(4)密文解密。

用户B收到密文,若将其解密,只需要根据以下公式计算
M≡CdmondnM ≡ C^d\quad mond \quad n MCdmondn
,即:
117mod33=1111^7 \quad mod \quad 33 = 11 117mod33=11

267mod33=0526^7 \quad mod \quad 33 = 05 267mod33=05

167mod33=2516^7 \quad mod \quad 33 = 25 167mod33=25

用户B得到明文信息为:11,05,25。根据上面的编码表将其转换为英文,我们又得到了恢复后的原文“key”。

通过实例,我们可以很清楚的看清楚RSA算法的一个原理。

当然,实际在加密过程中要比这复杂得多,由于RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全,因此,p、q、e的选取、公钥私钥的生成,加密解密模指数运算都有一定的计算程序,需要仰仗计算机高速完成。

RSA 算法工作流程

A 要把信息发给 B 为例,确定角色:A 为加密者,B 为解密者。

首先由 B 随机确定一个 KEY,称之为私钥,将这个 KEY 始终保存在机器 B 中而不发出来;

然后,由这个 KEY 计算出另一个 KEY,称之为公钥。这个公钥的特性是几乎不可能通过它自身计算出生成它的私钥。

接下来通过网络把这个公钥传给 A,A 收到公钥后,利用公钥对信息加密,并把密文通过网络发送到 B。

最后 B 利用已知的私钥,就能对密文进行解密了。

以上就是 RSA 算法的工作流程。

RSA 算法加密速度

由于进行的都是大数计算,使得 RSA 最快的情况也比 DES 慢上好几倍,无论是软件还是硬件实现。速度一直是 RSA 的缺陷。一般来说只用于少量数据加密。RSA 的速度是对应同样安全级别的对称密码算法的1/1000左右。

比起 DES 和其它对称算法来说,RSA 要慢得多。实际上一般使用一种对称算法来加密信息,然后用 RSA 来加密比较短的公钥,然后将用 RSA 加密的公钥和用对称算法加密的消息发送给接收方。

这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,否则的话可以越过 RSA 来直接攻击对称密码。

公钥传递安全

和其它加密过程一样,对 RSA 来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡中间人攻击。

假设 A 交给 B 一个公钥,并使 B 相信这是A 的公钥,并且 C 可以截下 A 和 B 之间的信息传递,那么 C 可以将自己的公钥传给 B,B 以为这是 A 的公钥。C 可以将所有 B 传递给 A 的消息截下来,将这个消息用自己的密钥解密,读这个消息,然后将这个消息再用 A 的公钥加密后传给 A。理论上 A 和 B 都不会发现 C 在偷听它们的消息,今天人们一般用数字认证来防止这样的攻击。

RSA算法优缺点

优点:
  1. 不需要进行密钥传递,提高了安全性
  2. 可以进行数字签名认证
缺点:
  1. 加密解密效率不高,一般只适用于处理小量数据(如:密钥)
  2. 容易遭受小指数攻击

RSA 算法实现

RSA密钥生成:

/*** 生成RSA 公私钥,并存储到字符串数组中** @return* @throws NoSuchAlgorithmException*/
public static String[] genRSAKeys2Str() throws NoSuchAlgorithmException {// 生成密匙对KeyPair kp = generateKeyPairs();//得到公钥Key publicKey = kp.getPublic();// 得到私钥Key privateKey = kp.getPrivate();// 得到公私钥字节数组byte[] publicKeyBytes = publicKey.getEncoded();byte[] privateKeyBytes = privateKey.getEncoded();// 得到base64编码后的公私钥字符串String publicKeyStr = Base64.encodeBase64String(publicKeyBytes);String privateKeyStr = Base64.encodeBase64String(privateKeyBytes);String[] rsaKeys = new String[2];rsaKeys[0] = publicKeyStr;rsaKeys[1] = privateKeyStr;return rsaKeys;
}/*** 生成密匙对 KeyPairs** @return KeyPair keyPair* @throws NoSuchAlgorithmException*/
private static KeyPair generateKeyPairs() throws NoSuchAlgorithmException {// RSA算法要求有一个可信任的随机数源SecureRandom sr = new SecureRandom();// 为RSA算法创建一个KeyPairGenerator对象KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA_ALGORITHM);// 利用上面的随机数据源初始化这个KeyPairGenerator对象kpg.initialize(RSA_KEY_SIZE, sr);return kpg.generateKeyPair();
}

公钥加密:

/*** RSA 通过【公钥】加密** @param pubKey* @param data* @return* @throws Exception*/
public static byte[] encryptByPubKey(byte[] pubKey, byte[] data) throws Exception {// 构建keyKey rsaPubKey = buildPubKey(pubKey);// 加密return encrypt(rsaPubKey, data);
}// 生成KeySpec,注意公私钥使用的生成类不同
private static Key buildPubKey(byte[] pubKey) throws Exception {// 创建KeySpecX509EncodedKeySpec keySpec = new X509EncodedKeySpec(pubKey);KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);return keyFactory.generatePublic(keySpec);
}// 加密方法
private static byte[] encrypt(Key key, byte[] data) throws Exception {Cipher cipher = Cipher.getInstance(RSA_CIPTHER);cipher.init(Cipher.ENCRYPT_MODE, key);byte[] encryptData = cipher.doFinal(data);return encryptData;
}

私钥解密:

/*** RSA 使用【私钥】解密** @param priKey      密钥* @param encryptData 密文数据* @return 明文字节数组* @throws Exception 解密过程中的异常信息*/
public static byte[] decryptByPriKey(byte[] priKey, byte[] encryptData)throws Exception {Key rsaPriKey = buildPriKey(priKey);// 返回解密数据return decrypt(rsaPriKey, encryptData);
}// 生成KeySpec,注意公私钥使用的生成类不同
private static Key buildPriKey(byte[] priKey) throws Exception {// 创建KeySpecPKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(priKey);KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);return keyFactory.generatePrivate(keySpec);
}// 解密
private static byte[] decrypt(Key key, byte[] encryptData) throws Exception {Cipher cipher = Cipher.getInstance(RSA_CIPTHER);cipher.init(Cipher.DECRYPT_MODE, key);byte[] decryptData = cipher.doFinal(encryptData);// 返回解密数据return decryptData;
}

RSA 算法应用场景

(1) 信息加密

收信者是唯一能够解开加密信息的人,因此收信者手里的必须是私钥。发信者手里的是公钥,其它人知道公钥没有关系,因为其它人发来的信息对收信者没有意义。

(2) 登录认证

客户端需要将认证标识传送给服务器,此认证标识 (可能是一个随机数) 其它客户端可以知道,因此需要用私钥加密,客户端保存的是私钥。服务器端保存的是公钥,其它服务器知道公钥没有关系,因为客户端不需要登录其它服务器。

(3) 数字签名

数字签名是为了表明信息没有受到伪造,确实是信息拥有者发出来的,附在信息原文的后面。就像手写的签名一样,具有不可抵赖性和简洁性。

简洁性:对信息原文做哈希运算,得到消息摘要,信息越短加密的耗时越少。

不可抵赖性:信息拥有者要保证签名的唯一性,必须是唯一能够加密消息摘要的人,因此必须用私钥加密 (就像字迹他人无法学会一样),得到签名。如果用公钥,那每个人都可以伪造签名了。

(4) 数字证书

问题起源:对1和3,发信者怎么知道从网上获取的公钥就是真的?没有遭受中间人攻击?

这样就需要第三方机构来保证公钥的合法性,这个第三方机构就是 CA (Certificate Authority),证书中心。

CA 用自己的私钥对信息原文所有者发布的公钥和相关信息进行加密,得出的内容就是数字证书。

信息原文的所有者以后发布信息时,除了带上自己的签名,还带上数字证书,就可以保证信息不被篡改了。信息的接收者先用 CA给的公钥解出信息所有者的公钥,这样可以保证信息所有者的公钥是真正的公钥,然后就能通过该公钥证明数字签名是否真实了。

总结

RSA 算法是目前使用最为广泛的非对称加密算法,你可以在各种对安全要求比较高的场景中看到它的身影,所以掌握RSA 算法是我们工作中比不缺的一项技能。

创作不易,如果大家喜欢本文,欢迎点赞,转发,你的关注是我们继续前进的动力_

参考:

1,RSA算法理解

2,加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH)

关于作者
  • GitHub:https://github.com/ForTheDevelopers

  • 掘金:https://juejin.cn/user/1204720472953022/posts

  • CSDN:https://blog.csdn.net/ForTheDevelopers

  • segmentfault:https://segmentfault.com/u/for_the_developers

联系作者
  • 微信号:ForTheDeveloper

  • 公众号:ForTheDevelopers

在这里插入图片描述

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

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

相关文章

易语言多级指针读取_C语言指针难吗?纸老虎而已,纯干货讲解(附代码)

作者&#xff1a;21IC网络整理&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家(ID&#xff1a;chiphome-dy)指针对于C来说太重要。然而&#xff0c;想要全面理解指针&#xff0c;除了要对C语言有熟练的掌握外&#xff0c;还要有计算机硬件以及操作系统等方方面…

奇妙的安全旅行之DSA算法

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天我们来介绍一下非对称加密算法中的DSA算法。 DSA 算法简介 DSA&#xff08;Digital Signature Algorithm&#xff09;是Schnorr和ElGamal签名算法的变种&#xff0c;被美国NIST作为DSS(DigitalSignature Standard) 数字签…

lisp语言画阿基米德线_【R语言】如何将照片快速转换为素描

【R语言】如何将照片快速转换为素描&#xff08;三行代码给老婆&#xff08;划掉&#xff09;画一张素描&#xff09;_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com最近发现了一个比较好玩的包&#xff0c;叫做sketcher这个包的作用就是将图片转化成素描的样式以下是…

2021年程序员1月薪资统计,你在哪一档?

hi&#xff0c;大家好&#xff0c;我是开发者FTD。2021年1月份马上就要结束了&#xff0c;再过一周多春节也即将来临&#xff0c;春节后估计又是一波跳槽高峰&#xff0c;那我们一起来看一下当前程序员的薪资状况&#xff0c;让大家对于年后是否要换工作也有个心理预期吧。 注&…

海康sip服务器地址_完整SIP/SDP媒体协商概论SDP基础使用要求

接完整SIP/SDP媒体协商概论-SDP基础-核心定义全解。上一个章节笔者介绍了关于SDP的一些核心概念(第一章节和第二章节)&#xff0c;今天&#xff0c;我们继续在此之间讨论SDP的其余基础内容(从第三章节开始)。在以下讨论中&#xff0c;笔者会介绍关于SDP的使用&#xff0c;SDP的…

一月:你今年还回家过年吗?

hi&#xff0c;大家好&#xff0c;我是开发者FTD。一月份对于我来说&#xff0c;是工作和生活渐渐明朗的一个月&#xff0c;之前迷茫的状态感觉在这一个月开始慢慢消失&#xff0c;并让整个人的精神状态开始转变。2021年才刚刚开始&#xff0c;大家也可以对自己新的一年进行一个…

6个座位办公室最佳位置_2021最佳动力艇大奖:6个类别29个入围名单揭晓

年度最佳动力艇大奖由英国杂志《Motor Boat & Yachting》(MBY)主办&#xff0c;经(MBY)深思熟虑&#xff0c;评委们缩小了2021年度最佳动力艇大奖的决赛入围名单。由于旅行限制&#xff0c;今年的形式会有所不同&#xff0c;不能像往年一样测试那么多的船。因此&#xff0c…

奇妙的安全旅行之ECC算法

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天我们来介绍一下非对称加密算法的ECC算法。 ECC 算法简介 ECC 是 Elliptic Curves Cryptography 的缩写&#xff0c;意为椭圆曲线密码编码学。和RSA算法一样&#xff0c;ECC算法也属于公开密钥算法。最初由 Koblitz 和 Mi…

奇妙的安全旅行之国密算法

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天我们来介绍一下我们国家密码局制定的加密算法 — 国密算法。 为什么要制定国密算法&#xff1f; 密码算法是保障信息安全的核心技术&#xff0c;尤其是我国最关键的银行业核心领域长期以来都是沿用MD5、3DES、SHA-256、R…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(二)

远控木马 SET 同时集成了木马生成工具&#xff0c;可以生成木马并调用MSF框架对远程主机进行控制。直接使用MSF生成木马并控制主机的可参考之前另一篇博文&#xff1a;渗透测试-Kali入侵Win7主机。 控制主机 1、运行 SET&#xff0c;选择创建攻击载荷和监听器&#xff1a; 2…

wdnas群晖nas_西数WD NAS红盘 WD140EFFX 14TB HDD和 SA500 1TB SSD开箱拆解评测

前言每个NAS系统都应该配备足够容量的硬盘&#xff0c;以满足数据存储需求。WD Red 西数红盘存储空间高达14TB&#xff0c;可以为需要构建大容量和高性能NAS存储方案的用户提供解决方案。WD Red西数红盘14T运行安静且热量低&#xff0c;其采用的NASware 3.0技术提高了兼容性、集…

奇妙的安全旅行之加密算法(完整版)

hi&#xff0c;大家好&#xff0c;我是开发者FTD。之前我在公众号写了一个工作中常用加密算法系列的文章终于肝完了&#xff0c;为了方便小伙伴们查看和收藏&#xff0c;我将这个系列汇集整理成了一个PDF文档&#xff0c;有需要的小伙伴可以关注公众号&#xff0c;在公众号后台…

智能车s3010舵机工作电压_全国大学生智能车竞赛决战南京信息工程大学

未来网高校频道8月25日讯(记者 杨子健 通讯员 唐翠梅 方向 张峰 曾雅俊)8月24日上午&#xff0c;由中国自动化学会主办&#xff0c;南京信息工程大学承办的第十五届全国大学生智能汽车竞赛创意组总决赛、第十五届全国大学生智能汽车竞赛华东赛场预决赛开幕仪式在学校东苑体育馆…

直接拿来用!GitHub10个开源免费的后台管理面板

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天要给大家介绍几个GitHub上开源免费好用的后台管理面板&#xff0c;大家在平时工作中&#xff0c;一定不可避免的会开发一些业务管理控制后台&#xff0c;如果从零开始完整的做一套不是一件很容易的事情&#xff0c;还好Git…

人名和成绩一起排序_EXCEL基础知识——排序功能的使用

排序筛选可能是大家工作中最常用的数据处理方式了&#xff0c;它能很快地从大到小完成排序&#xff0c;并且筛选除你想要的数据。从简单的排序筛选到高级筛选你会哪几步呢&#xff1f;一起来看看。一、简单排序下面这组数据&#xff0c;我们想要将数学成绩从大到小的排序&#…

android骰子游戏代码_真神器!不用手写一行代码就能做网站~

点击上方“Python编程时光”&#xff0c;选择“加为星标”第一时间关注Python技术干货&#xff01;制作网站用什么&#xff0c;Dreamweaver 还是 Fireworks&#xff1f;现在&#xff0c;用 GPT-3 就可以。一位来自旧金山的程序员小哥做了款名为 debuild.co 的网页制作软件&…

一文带你读懂计算机进制

hi&#xff0c;大家好&#xff0c;我是开发者FTD。在我们的学习和工作中少不了与进制打交道&#xff0c;从出生开始上学&#xff0c;最早接触的就是十进制&#xff0c;当大家学习和使用计算机时候&#xff0c;我们又接触到了二进制、八进制以及十六进制。那么大家对进制的认识和…

切换分支 如何判断 是否完成_如何判断展览公司是否专业?

可以看出&#xff0c;展会装修目前市场上的展览设计公司数量非常庞大&#xff0c;许多公司目前正在从事这方面的业务。对于每个人来说&#xff0c;展览设计公司之后有很多好处&#xff0c;所以当你继续选择时&#xff0c;选择面会变得更加广泛。无论人们如何选择展览设计公司&a…

二月:冷清的春节

hi&#xff0c;大家好&#xff0c;我是开发者FTD。二月份就这么悄无声息的过完了&#xff0c;时间真的过得太快了&#xff0c;而且二月份还比其他月少了几天&#xff0c;再加上春节的时间&#xff0c;感觉就更快了。按照惯例&#xff0c;今天也对二月份做个总结&#xff0c;以迎…

python 除法取模_跟我一起学python | 探究05

算术运算、比较运算、赋值运算、位和位运算、运算优先级python里的算术运算我们最熟悉的计算就是算术运算&#xff0c;加减乘除等。在python的算术运算中&#xff0c;除了四则运算外&#xff0c;还有幂运算、取模、取整运算。什么是取模、取整运算呢&#xff1f;取模和取整运算…