首页 > 其他分享 >公钥私钥

公钥私钥

时间:2024-11-13 20:46:52浏览次数:1  
标签:公钥 加密 生成 私钥 接收 客户端

一、实验目的

掌握产生公钥密钥对的程序设计方法

掌握产生公钥加密/解密的程序设计方法

二、实验场景

模拟实现 128 位信息的加密通信过程。

实验对象包含三方:A,B,C。

其中,A 与 B 之间进行 128 位消息的安全交换,这样的信息交换通过公钥密码算法实现。

第三方 C 负责为 A 和 B 各生成一对公私钥对,并分别把对应的私钥传给 A 和 B,并把他们的公钥公开。

当 A 向 B 发送消息时,A 用 B 的公钥加密,加密的信息发送给 B 后,B 再用自己的私钥来解,从而获得 A 发给 B 的消息。

三、实验步骤

0 实现 A,B,C 三方分别拥有的函数;定义公钥体系环境配置;

1 编写生成一对公钥密钥的程序;

2 生成实验用的 128 位信息;

3 设计生成对上述信息的公钥加密/解密的程序;

四、消息传递及公钥分发探索性步骤

设计客户端-服务器程序,实现 128 位消息的传递,实现公钥与私钥的分发。

五、实验思考

1 公钥密码算法有哪些应用场合?

2 实际应用中,公钥如何传送及如何确定公钥拥有者的身份?

说明:

1 编程语言任意

2 可以使用已有的公钥密码函数库

实验内容

1、本次实验我采用的是socket编程,实现服务端与客户端的交互。

C作为服务器端,负责生成公私钥对,将客户端的公钥公开,将私钥传递给客户端A和B。在这里虽然把公钥公开,但是这里我还是进行了对公钥进行了传递,以便后期A和B的交互。

C绑定localhost的端口,用listen函数开始监听,运用accept函数接收客户端传送的消息,分别与客户端A,B建立联系。

服务端C生成公钥与私钥,

之后便是运用send函数传送公钥与私钥。

在这次实验中,对公钥的传输过程中,一开始直接采用了str(publickey).encode(encoding=“utf-8”),但是在这种情况下,传输后的公钥却没有办法用来加密,在这个过程中,一直出现一个bug,

后来我采用了pickle序列化的办法,依旧是无法用公钥加密,仍热是以下这种情况:

最后我采用了pickle加上哈希函数的办法,在这种情况下,公钥终于可以加密成功。我查询了很多资料,关于为何会出现这种问题,始终没有确定的答案。不过采用哈希函数,保证了数据的完整性。

2、B负责接收C为B生成的公私钥对,考虑到B要传送公钥给A,以及接收A的消息,因此,B应该是C的客户端,又是A的服务端。

因此设计的时候,我将B设计成两个线程并行,我把B分为两个部分:RecvData和Recvmsg。

RecvData作为C传送公私钥时,接收公私钥的工具,同时为保证公钥能传送给A,以及解密信息,需要将公钥和私钥设为全局变量。

Recvmsg则是重新调用了socket程序,绑定端口,视为一个服务端,等待A的connect。当A与之建立连接之后,B传递自己的公钥给A,等待A用公钥加密的信息传送过来,之后B再用自己的私钥进行解密。(红框是解密过程)

3、客户端A负责接收C传来的自己拥有的公私钥对,发送信息给B,接收B的公钥,并用于加密。根据这个思路,A也是两个线程并行,设置了两个函数,分别是:Recvmsg(), Sendmsg()。

Recvmsg(),A作为C的一个客户端,用于接收公私钥对。(这里思路与B一致)

Sendmsg(),此函数负责A与B交互,A作为B的客户端,接收B发过来的公钥,运用B的公钥进行加密,向B发送加了密的信息。(第二个红框是加密过程)

这里生成128位消息,运用了os库,生成16byte的消息,也就是128位。

4、运行截图:

 

运行C程序后,再运行b和a的程序,C分别生成公钥和私钥,并向他们传送。

B接收公钥和私钥后:

 

A接收公钥和私钥后:

 

B开始监听,与A建立连接,并通讯:

A与B之间的通信:

5、实验与思考

(1)公钥密码算法的应用:

①加密/解密:发送方用接收方的公钥对消息加密。

②数字签名:发送方用自己的私钥对消息签名。签名可以通过对整条消息加密或对消息的小数据块加密来生成,其中的小数据块是整条消息的函数。

③密钥交换:通信双方交换会话密钥。密钥交换有几种不同的方法,这些方法都使用通信一方或双方的私钥。

(2) 公开密钥系统需要一个值得信赖而且独立的第三方机构充当认证中心(CA),来确认声称拥有公开密钥的人的真正身份。

要确认一个公共密钥,CA首先制作一张“数字证书”,它包含用户身份的部分信息及用户所持有的公开密钥,然后CA利用本身的私钥为数字证书加上数字签名。

任何想发放自己公钥的用户,可以去认证中心(CA)申请自己的证书。CA中心在认证该人的真实身份后,颁发包含用户公钥的数字证书,它包含用户的真实身份、并证实用户公钥的有效期和作用范围(用于交换密钥还是数字签名)。其他用户只要能验证证书是真实的,并且信任颁发证书的CA,就可以确认用户的公钥。

标签:公钥,加密,生成,私钥,接收,客户端
From: https://www.cnblogs.com/memoblog/p/18544757

相关文章

  • golang 实现比特币内核:公钥的 SEC 编码格式详解
    比特币作为区块链的一个应用,它建立在分布式系统之上,‘节点’遍布全球。为了使所有节点协同工作并作为一个整体系统运行,需要保持所有节点同步在相同的状态中,也就是说节点之间需要频繁通信,并且相互交换大量数据消息。这要求在网络上传输的消息或数据要使用某种格式编码,以确保......
  • 现代密码-公钥密码RSA
    实验介绍:一个密钥(公钥)是公开的,另一个密钥(私钥)必须保密,且由公钥求解私钥的计算是不可行的。RSA1选取质数p和q(pq不可公开)2计算n=pq,φ(n)=(p-1)(q-1)3随机选取整数e作为公钥,要求1<e<φ(n),e和φ(n)互质如果不互质,就没有逆元,算不出私钥。4计算私钥d,怎么计算呢,使用欧几里得算法先......
  • RSA公钥文件解密密文
    RSA公钥文件解密密文做题遇到两个从未见过的文件:flag.encpub.txt.enc文件......
  • SM2 - 公钥加密算法
    符号A,B:使用公钥密码系统的两个用户。\(a,b\):\(F_q\)中的元素,他们定义\(F_q\)上的一条椭圆曲线\(E\)。\(d_B\):用户B的私钥。\(E⁡(F_q)\):\(F_q\)上椭圆曲线\(E\)的所有有理点(包括无穷远点\(O\))组成的集合。\(F_q\):包含\(q\)个元素的有限域。\(G\):椭圆曲线的一个基点,其阶为......
  • Windows 通过私钥远程连接 Linux 服务器【含密钥对制作】
    在现代软件开发和系统管理中,远程连接Linux服务器是非常常见的任务。尤其在Windows系统下,使用SSH工具连接Linux服务器是开发者们不可或缺的技能之一。为了保证安全性,SSH密钥对(公钥和私钥)的使用可以避免传统用户名密码方式的安全风险,提供了更高的安全保障。本文将详......
  • 私钥碰撞器,单窗口月搜易可达1000+可无限放大
    功能介绍:协议私钥碰撞,24小时全自动挂机碰到自动建立文档储存运气好每天几十几百个U甚至更多运气不好也有好几个U有保底双协议bnb和eth,btc待发布设备需求:电脑......
  • 从克隆项目到修改并上传到自己 GitHub 仓库的流程(包括私钥配置)
    从克隆项目到修改并上传到自己GitHub仓库的流程(包括私钥配置)生成SSH密钥如果还没有生成SSH密钥,可以通过以下命令生成:ssh-keygen-trsa-C"[email protected]"系统会提示你保存密钥的位置,通常保存在~/.ssh/id_rsa,如果不需要加密密码,直接按回车。添加SSH......
  • SSH私钥泄露
    可以自行下载靶机通过百度网盘分享的文件:SSH-私钥泄露.ova链接:https://pan.baidu.com/s/1cvPMLR8-2StsZ9k7SywEkQ?pwd=xyzz --来自百度网盘超级会员V2的分享1.打开vmware,先要把靶机的网络适配器更改为NAT模式2.打开kali打开终端输入arp-scan-l探测靶机的IP(不同的......
  • Windows系统连接服务器(公私钥)超详细版本
    目录前言一、使用MobaXterm进行密钥对的生成与配置1.生成密钥2.创建私钥与配置密钥对3.将公钥上传至服务器4.登陆测试二、使用Powershell对密钥对进行生成(推荐)1.生成密钥2.将公钥上传至服务器总结前言由于换了新的实验室,保密要求较高。因此记录一下加密连接服务......
  • H3C交换机SSH使用RSA公钥免密登录配置
    1.使用puttygen.exe计算RSA 2.保存公钥和私钥公钥:pub.key  注意:公钥上传到交换机(FTP等方式)。私钥:private.ppk3.配置交换机<Switch>system-view[Switch]public-keylocalcreatersaTherangeofpublickeysizeis(512~2048).Ifthekeymodulusisgreatert......