RSA公钥,私钥和数字签名的举例理解

本文详细介绍了公钥加密和私钥签名的基本原理。通过生动的例子解释了公钥用于加密,私钥用于解密的过程,以及私钥如何用于数字签名以确认发送方身份。同时,文章还提到了RSA算法,这是一种广泛使用的公钥加密算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、公钥加密 
假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。

我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。


 

二、私钥签名
如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名

 

总结:公钥和私钥是成对的,它们互相解密。

公钥加密,私钥解密。

私钥数字签名,公钥验证。

 

举例

比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

  1. Bob将他的公开密钥传送给Alice。
  2. Alice用Bob的公开密钥加密她的消息,然后传送给Bob。
  3. Bob用他的私人密钥解密Alice的消息。

  上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。

例子和图出自《网络安全基础 应用与标准第二版》

 

RSA算法

RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够 抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对 其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

 

 openssl的话,在知道私钥的情况下,直接用下面命令就能生成公钥了:

 
  1.  
  2. rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

 

所以,你公开了私钥的话,相当于把公钥也告诉他们了

公钥就是通过私钥生成的

 

原文:http://blog.csdn.net/21aspnet/article/details/7249401#

<think>好的,我需要回答用户关于PEM格式的公钥私钥生成使用方法的问题。首先,我需要回顾一下用户提供的引用内容,看看有哪些相关的信息可以利用。 根据引用[1],用户提到了使用OpenSSL生成RSA密钥对的命令,包括生成私钥公钥的步骤,以及如何查看私钥信息。引用[2][3]提到了在线工具生成PEM格式的密钥对,可能可以补充说明其他生成方式。引用[4]讨论了RSA加密、解密、签名验签的基本流程,以及不同格式的支持,这有助于解释PEM密钥的使用场景。引用[5]则提到PEM文件在程序中的应用,比如加密通讯服务器。 接下来,我需要整理PEM格式的定义、生成方法、使用场景以及注意事项。首先,PEM格式是什么?它是一种基于Base64编码的文本文件,通常用于存储证书密钥,有明确的开始结束标记,比如“-----BEGIN PRIVATE KEY-----”“-----END PRIVATE KEY-----”。然后,生成方法包括使用OpenSSL命令行工具在线生成工具,需要分别详细说明步骤。使用方面,需要涵盖加密、解密、签名验签,并举例说明如何在代码中使用,比如C#中的实现,但可能用户需要更通用的方法,而不仅仅是特定语言。同时,要注意公钥加密私钥解密,私钥签名、公钥验签的原则。注意事项部分需要强调密码保护、格式兼容性以及密钥长度选择。 另外,用户可能关心PEM与其他格式(如XML、PKCS#8)的区别,但问题主要集中在PEM上,所以可能需要简要提及。在引用中提到的在线工具可以作为一种替代生成方式,适合不熟悉命令行的用户。同时,需要指出生成公钥不需要私钥密码的原因,如引用[1]中提到的,因为公钥是从私钥中提取的公开部分,密码仅用于保护私钥的访问。 最后,生成相关问题时要围绕PEM格式、生成工具、使用方法注意事项展开,确保问题具有针对性,帮助用户进一步探索。例如,如何转换PEM格式到其他格式,PEM文件的结构,OpenSSL的其他功能等。 需要确保回答结构清晰,分点说明,并正确引用提供的参考资料。同时,遵循系统级指令,数学公式用$...$,独立公式用$$...$$,但可能在这个问题中数学公式较少,不过RSA算法涉及模指数运算,可以适当提及,如$c = m^e \mod n$这样的加密公式,但用户的问题更关注格式使用,可能不需要深入数学细节。因此,可能主要需要结构化的步骤说明注意事项,确保LaTeX语法正确,如命令行中的参数用等宽字体,而非数学公式。 最后检查是否遗漏了任何关键点,比如PEM文件的结构示例,或者如何在程序中加载PEM文件,这些可能需要结合引用中的信息进行说明。例如,引用[5]提到在程序中使用privkey.pemcacert.pem,可以举例说明如何读取文件内容进行加密或签名操作。</think>### PEM格式公钥私钥的生成与使用方法 #### 一、PEM格式简介 PEM(Privacy-Enhanced Mail)是一种基于Base64编码的文本格式,广泛用于存储加密密钥证书。其特点是以`-----BEGIN``-----END`标签包裹内容,例如: ``` -----BEGIN PRIVATE KEY----- BASE64编码内容 -----END PRIVATE KEY----- ``` PEM格式支持RSA、ECC等多种算法,兼容OpenSSL等工具库[^1][^5]。 --- #### 二、生成方法 1. **使用OpenSSL命令行工具** - **生成私钥**(含密码保护): ```bash openssl genpkey -algorithm RSA -out private_key.pem \ -pkeyopt rsa_keygen_bits:2048 -aes256 -pass pass:your_password ``` 参数说明: - `-aes256`:使用AES-256加密私钥 - `-pass pass:your_password`:设置私钥密码 - **生成公钥**(从私钥导出): ```bash openssl rsa -pubout -in private_key.pem -out public_key.pem ``` 注:生成公钥无需输入私钥密码。 2. **使用在线工具** 如[BTool在线工具](https://www.btool.cn/rsa-key-pair-generator)可快速生成PEM格式密钥对,支持自定义密钥长度导出格式[^2][^3]。 --- #### 三、使用方法 1. **加密与解密** - **公钥加密**:用公钥加密数据,只有对应私钥可解密。 - **私钥解密**:用私钥解密数据。 *示例公式*: $$c = m^e \mod n \quad \text{(加密)}$$ $$m = c^d \mod n \quad \text{(解密)}$$ 其中$(e,n)$为公钥,$(d,n)$为私钥[^4]。 2. **数字签名与验签** - **私钥加签**:用私钥生成签名,确保数据完整性。 - **公钥验签**:用公钥验证签名是否有效。 3. **代码示例(C#)** ```csharp // 加载PEM格式私钥 using var rsa = RSA.Create(); rsa.ImportFromPem(File.ReadAllText("private_key.pem")); // 使用公钥加密 byte[] encryptedData = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA256); // 使用私钥解密 byte[] decryptedData = rsa.Decrypt(encryptedData, RSAEncryptionPadding.OaepSHA256); ``` --- #### 四、注意事项 1. **密码保护**:私钥建议加密存储,避免泄露。 2. **格式兼容性**:不同系统对PEM头尾标签要求可能不同(如`PRIVATE KEY` vs `RSA PRIVATE KEY`)。 3. **密钥长度**:RSA推荐使用2048位及以上长度以保证安全性[^1]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值