- 公钥加密:使用公钥对明文进行加密,加密过程如下:
- 将明文转换为整数m(一般使用编码方式如ASCII码或Unicode码)。
- 计算密文c = m^e mod n,其中e为公钥指数,n为模数。
- 密文c即为加密后的数据。
- 私钥解密:使用私钥对密文进行解密,解密过程如下:
- 计算明文m = c^d mod n,其中d为私钥指数,n为模数。
- 明文m即为解密后的原始数据。
- 数字签名:RSA算法还可以用于数字签名,以验证数据的完整性和身份鉴定。数字签名的过程如下:
- 假设发送者要发送数据m,并使用自己的私钥进行签名。
- 发送者对数据m进行哈希处理,生成哈希值h。
- 使用私钥对哈希值h进行加密,生成签名s。
- 发送者将数据m和签名s一起发送给接收者。
- 接收者使用发送者的公钥对签名s进行解密,得到解密后的哈希值h’。
- 接收者对接收到的数据m进行哈希处理,生成哈希值h’'。
- 比较哈希值h’和h’',如果相等,则签名验证通过。
RSA密钥知识在保证数据安全和隐私的传输中起着重要的作用。公钥加密可以使数据在非安全通道上进行安全传输,私钥解密只能由拥有相应私钥的一方进行,从而确保数据的机密性。数字签名可以验证发送者的身份并保证数据的完整性,防止数据在传输过程中被篡改。但同时需要注意保护好私钥的安全,避免私钥泄露导致数据被破解或伪造签名。
总之,RSA密钥知识涉及到密钥生成、公钥加密、私钥解密和数字签名等内容,是保障数据传输安全和身份验证的重要技术基础。
生成公私钥
生成私钥
我们使用openssl工具直接生成公私钥(默认生成的是2048位):
openssl genrsa -out private8.pem
也可以生成1024位:
openssl genrsa -out private8.pem 1024
生成公钥
openssl rsa -in private8.pem -pubout -out public8.pem
通过openssl提取模和指数
openssl rsa -in private8.pem -noout -text
通过java api取对应的模数跟指数
import java.security.interfaces.RSAPublicKey;
import com.sun.org.apache.xml.internal.security.utils.Base64;
public class RSA\_modulus {
private static String PUBKEY\_TEXT = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwaSv68WTprFlvMUmRq8sF+ior4ZwNwX7H+d67dDiUTY/02jKLJDEbDy7B+ocH7fQNDwTGEsQreYkf23YAra7eVW4/TJZoR9MVezui9p4up0b6k0KbLzpVqsG1dQj+DfNRNq0TmQClvPbzVtyOISWMnWcUr5dLGEe5+FTGJqI72yXMelpPxIv01R9rP1PdDB+BlnMXx7e2/lmUFhs9nzvwLgehtqsbLN8bi4kjIL1R7fyQVXXEaWBRgBofE5CN48TYYK6NQlhRNjY3S7Dx6SE9PRWIj4XXs663PMXCVT9Wg9W1PyN544gk9TkbW5yFpLSbsQOTlcLzNW878jYG0q9zQIDAQAB";
public static void getModulesAndExponent() throws Exception {
try {
// 解密由base64编码的公钥,并构造X509EncodedKeySpec对象
java.security.spec.X509EncodedKeySpec bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(
Base64.decode(PUBKEY\_TEXT));
// RSA算法
java.security.KeyFactory keyFactory = java.security.KeyFactory.getInstance("RSA");
// 取公钥匙对象
RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(bobPubKeySpec);
System.out.println("modules: 0x" + pubKey.getModulus().toString(16));
System.out.println("publicExponent: 0x" + pubKey.getPublicExponent().toString(16));
}catch(Exception e) {
throw e;
}
}
public static void main(String[] args) {
try {
RSA\_modulus.getModulesAndExponent();
} catch (Exception e) {
e.printStackTrace();
}
}
}
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/f9f27296bae3482e6e7e46f69849842a.png)
![img](https://img-blog.csdnimg.cn/img_convert/d0e2670efe32fe802e094aed7805d02c.png)
![img](https://img-blog.csdnimg.cn/img_convert/8e9b3b7104302ce2081351de9ea88eb4.png)
![img](https://img-blog.csdnimg.cn/img_convert/649491384c119c12c3951bf11034f683.png)
![img](https://img-blog.csdnimg.cn/img_convert/7232e5cfac5e2dc99f9b8416af6d9854.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**