python实现对称加密、数字签名、数字证书颁发

这篇具有很好参考价值的文章主要介绍了python实现对称加密、数字签名、数字证书颁发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.开发目的:

理解开源密码库实现的基本架构,熟悉对称算法的加解密函数封装与调用,并能能够利用开源设计接口进行二次封装,并实现一个界面友好,功能正确的采用对称算法的文件加解密工具。

二.开发环境:
  • 硬件环境:

    处理器:Intel®Core™i5-1035G1 CPU @1.00GHz 1.19GHz2?

  • 软件环境:

    操作系统:windows 10操作系统

    开发工具:python3.9 + pycharm2021.2.1

三.开发步骤和重点代码介绍:

(1)确定开发工具:

我通过仔细阅读openssl的源码之后,发现python中关于文件加解密的库crypto和cryptography在底层都是用openssl实现的文件加解密,我恰好对python比较熟悉,就决定用python实现。

(2)UI设计:

在python中,thinter库是一个比较简单好用的UI库,在本次实验中,我的UI都是用这个库完成的。比如程序中涉及的所有文件路径的读取,我都是从UI界面直接进行读取的,最终程序界面如下:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

(3)使用AES-CBC模式实现对于任意文件的加密:

AES为分组加密算法,把明文每128位分成一组,每次加密一组数据,直到加密完整个明文。如果说明文的分组不够128位,需要填充。这里我的密钥选择256位的,初始向量IV是128位的。

经分析,我们的密钥不能从系统直接随机产生后,便开始对文件进行加密,因为我们还要考虑到用户口令。所以在这里,我通过将系统产生的256位的随机密钥和用户输入的口令拼接,然后对它们进行sha256的哈希得到256位的随机加密密钥:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

因为要实现对于任意文件的加密,所以程序对文件是以二进制形式读取的,然后对读取到的二进制文件进行AES-CBC加密,完成加密后对加密文件,加密密钥等进行保存:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

  • 示例:

    在这里,我对一个桌面上的txt文件进行了加密:

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

    在对应的文件夹生成了一下文件:

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

    这里保存了本次加密的初始向量,系统和用户口令拼接生成的256位的密钥以及系统产生的256位的随机密钥。这样当用户解密文件的时候,当用户输入口令时,系统会将用户口令和系统产生的随机密钥进行拼接并做sha256的哈希,用生成的密钥进行解密。

    下面是加密之后的文件内容:

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

    如果是图片加密的话,则显示无法查看:

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

(4)对加密的文件进解密:

文件解密,我们要选择要解密的文件,然后输入用户口令,选择要保存的文件夹,如果解密成功,页面会显示解密成功,如果是用户口令错误,则会显示口令错误。

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

这里选择之前加密的图片文件,显示解密成功:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

在对应的文件夹下生成了如下文件,并可以查看:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

(5)数字证书的颁发:

数字证书通过可信任的证书颁发机构,保证了通信双方的身份认证,也解决了公钥分发问题。数字证书里面包括颁发者的信息,被颁发者的公钥信息、身份信息、证书的序列号、证书的签名算法以及该数字证书的有效期等等。在本次实验中,我才用了自己给自己颁发数字证书的模式,来研究数字证书。

在python的cryptography库中的x509实现了数字证书的颁发。在UI界面,我们需要申请人的身份信息以及公钥信息,而我们自己的私钥信息已经被写入到程序中,无须UI输入。

首先读取到用户的公钥信息并生成我们自己的公私钥:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

然后利用x509模块,实现数字证书的颁发并保存:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

  • 示例:

    下面是我用自己的私钥给LZW颁发的数字证书,页面显示数字证书颁发成功:

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

    在相应的文件夹下,我们看到如下文件:

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

    其中uni_public_key_pem并不是生成的文件,而是证书申请者的公钥。里面的private_key和public_key是我的临时公私钥,而certificate是生成的数字证书,内容如下:

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

(6)用私钥实现数字签名:

数字签名采用非对称密码体制,发送者使用自己的私钥对文件进行签名,接收者使用发送者的公钥进行签名验证。数字签名解决了在消息认证码中无法实现的抗抵赖性。如果对一份完整的文件进行数字签名,相当于用私钥进行了加密,如果文件很大,加密时间很长甚至对于某些实时性要求很高的场景不适用,所以我选择对文件的哈希值进行数字签名,在验签阶段,只需要比较哈希值是否一致就可以。文件哈希采用sha256进行哈希。

在数字签名的UI界面,我们需要选择要签名的文件,我的私钥,以及对于签名后的文件要保存的位置。

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

  • 示例:

    这里我还是选择对上面的txt文件进行数字签名,页面显示签名成功:

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

    在相应的文件夹,我们可以看到对应的签名文件:

    python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

(7)签名验证:

因为我们在签名的时候是对文件的哈希值进行签名,所以在验签阶段,我们只需要选择原文件(这里的原文件是指签名者连同签名文件一起发过来的文件)和已签名的文件,对原文件进行哈希,对已签名的文件进行解密得到哈希,比较两者的哈希值是否相等即可。

首先需要读取三个文件:签名者的公钥,已签名文件和原文件。

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

接下来就是验证签名:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

这里我们对之前的签名文件进行签名验证,页面显示验证成功:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

如果我们选择的文件是不正确的文件,则页面显示签名验证失败:

python 签发证书,对称加密,数字签名,数字证书,密码学,网络安全

至此,本次的所有内容已经展示完毕。

四.注意事项:

(1)我觉得可以加入网络通信功能,可利用socket实现。收发双方如果都是利用该软件,那么他们的传输协议等都是一致的,发送者可以将自己的秘密文件发送给对应的接收者。如果以后有时间,我会加入该模块并不断完善系统。

(2)本实验的对于文件加解密,签名等的实现,都是采取固定的模式,如果把这部分设置为用户可选,效果会更好。

(3)目前程序对于用户公私钥都是存放在用户自定义的文件夹,如果能够实现对于存放这些秘密文件的文件夹实现加密,系统便更加完善了。

(4)因源码文件较多,如果需求可到这里下载https://download.csdn.net/download/weixin_63137680/87486255文章来源地址https://www.toymoban.com/news/detail-641989.html

到了这里,关于python实现对称加密、数字签名、数字证书颁发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【安全】对称加密、非对称加密、数字签名和CA是什么?

    【安全】对称加密、非对称加密、数字签名和CA是什么?

    今天学习了关于网络通信过程中的安全相关的知识,还有一些基础的概念,现做以总结,博客的图示都是自己画的,如果能够有助于你的理解,请点个赞收藏一下~~ 目录 对称加密 非对称加密算法  数字签名和CA 证书的信任链 根身份证和自签名   对称加密的一方(比如小蓝)

    2023年04月08日
    浏览(10)
  • 一文搞懂对称加密与非对称加密(RSA)、信息摘要、数字签名

    一文搞懂对称加密与非对称加密(RSA)、信息摘要、数字签名

    目录 一、对称加密与非对称加密 二、信息摘要 三、数字签名 四、小练习 对称加密: 加密和解密使用同一个秘钥(如加密方式为+1,那解密方式为-1)常见的对称加密算法:DES,AES,3DES等 非对称加密: 加密和解密使用不同密钥。两个密钥:公共密钥和私有密钥。通常将公钥

    2024年02月16日
    浏览(12)
  • 软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

    软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月10日
    浏览(11)
  • 软考:中级软件设计师-信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

    软考:中级软件设计师-信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年04月22日
    浏览(26)
  • 算法2_非对称加密算法之ECDSA(椭圆曲线数字签名算法)

    算法2_非对称加密算法之ECDSA(椭圆曲线数字签名算法)

    ECDSA(椭圆曲线数字签名算法) AES(高级加密标准): =对称加密 ​ 对业务数据进行加密,防止他人可以看见 ECDSA(椭圆曲线数字签名算法):=非对称加密算法(公钥和私钥) ​ 验证数据的真实性,防止业务数据被篡改 SHA(安全哈希算法)=哈希算法 1. 作用: 因为ECDSA椭圆曲线数字签名算法获得

    2024年02月02日
    浏览(16)
  • 安装软件和驱动程序需要微软数字签名无法安装?数字签名和数字证书区别

    安装软件和驱动程序需要微软数字签名无法安装?数字签名和数字证书区别

    1.安装软件和驱动程序需要微软数字签名无法安装 windows安装exe安装包时: 1.1  解决方法: 1.2           这个问题需要安装驱动补丁进行更新驱动操作,如:Windows6.1-sha2补丁.msu 1.3           这种属于签名问题,解决方法: 1..进入“控制面板”,查看方式为大图标,点击“

    2024年02月05日
    浏览(14)
  • Java - 数字签名与数字证书

    Java - 数字签名与数字证书

    SSL是一种安全协议,用于在网络传输中提供数据加密、身份验证和完整性保护。它基于传输层协议(如TCP),并为其提供加密和安全功能。 对称加密和非对称加密 : 对称加密 :使用相同的密钥进行加密和解密。 非对称加密 :使用两个密钥:公钥用于加密,私钥用于解密。

    2024年01月24日
    浏览(10)
  • 一文看懂公钥、私钥、数字签名、数字证书

    一文看懂公钥、私钥、数字签名、数字证书

    好文章,记录下来!源文地址:What is a Digital Signature? (youdzone.com) 1.  鲍勃有两把钥匙,一把是公钥,另一把是私钥。 2.  鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。 3. 苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。

    2024年02月09日
    浏览(10)
  • 安全算法(三)消息验证码、数字签名和数字证书

    安全算法(三)消息验证码、数字签名和数字证书

    主要介绍了消息验证码、数字签名和数字证书三种加密方式。 消息认证码 消息认证码可以实现“认证”和“检测篡改”这两个功能。密文的内容在传输过程中可能会被篡改,这会导致解密后的内容发生变化,从而产生误会。消息认证码就是可以预防这种情况发生的机制。 假

    2024年01月22日
    浏览(9)
  • Https、CA证书、数字签名

    Https、CA证书、数字签名

    Https Http协议 Http协议是目前应用比较多应用层协议,浏览器对于Http协议已经实现。Http协议基本的构成部分有 请求行 : 请求报文的第一行 请求头 : 从第二行开始为请求头内容的开始部分。每一个请求头都是由K-V键值对组成。 请求体: 请求头完成后以空行结束、从空行开始

    2024年02月12日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包