python中的RSA加密与解密实例解析

  

这篇文章主要介绍了python RSA加密与解密实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  

<强>什么是RSA:
  

  

RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的“密码体制。

  

在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。

  

正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或想法密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。

  

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作.RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,截止2017年被普遍认为是最优秀的公钥方案之一。
  

  

集(安全电子交易)协议中要求CA采用2048位长的密钥,其他实体使用1024比特的密钥.RSA密钥长度随着保密级别提高,增加很快。下表列出了对同一安全级别所对应的密钥长度。

  

<强> python实现对RSA的加密和解密
  

  

<强> Python密码库——Pycrypto
  

  

Python良好的生态,对于加密解密技术都有成熟的第三方库。大名鼎鼎的M2Crypto和Pycrypto,前者非常容易使用,可是安装却非常头疼,不同的系统依赖软件的版本还有影响。后者则比较方面,直接使用脉冲安装即可。

  

<强>密码技术
  

  

为了进行加密以及通信,人们发明了很多公开的算法。对称与非对称算法等。常见的加密方式有RSA, AES等算法。对于选择加密算法,一个常识就是使用公开的算法。一方面是这些算法经过实践检验,另一方面对于破译难度和破译条件破译时间都有预估。对于任何加密算法,都是能破解的,不同在于时间上的投入。

  

<强> Python密码库——Pycrypto
  

  

Python良好的生态,对于加密解密技术都有成熟的第三方库。大名鼎鼎的M2Crypto和Pycrypto,前者非常容易使用,可是安装却非常头疼,不同的系统依赖软件的版本还有影响。后者则比较方面,直接使用脉冲安装即可。

  

<>强安装

        pip安装pycrypto      

<>强RSA密码算法与签名
  

  

RSA是一种公钥密码算法,RSA的密文是对代码明文的数字的E次方求mod N的结果。也就是将明文和自己做E次乘法,然后再将其结果除以N求余数,余数就是密文.RSA是一个简洁的加密算法生产和N的组合就是公钥(公钥)。

  

对于RSA的解密,即密文的数字的D次方求mod N即可,即密文和自己做D次乘法,再对结果除以N求余数即可得到明文.D和N的组合就是私钥(私钥)。

  

算法的加密和解密还是很简单的,可是公钥和私钥的生成算法却不是随意的。本文在于使用,对生成秘钥对的算法就暂时忽略。使用Pycrypto生成秘钥对很简单,我们分别为服务器和客户端各生成一对属于自己的秘钥对。

        从进口随机密码   从加密。散列进口沙   从加密。密码进口PKCS1_v1_5 Cipher_pkcs1_v1_5   从加密。签名PKCS1_v1_5作为Signature_pkcs1_v1_5导入   从加密。PublicKey进口RSA      #伪随机数生成器   .read random_generator=Random.new ()   # rsa算法生成实例   rsa=rsa。random_generator生成(1024)      #服务器的秘钥对的生成   private_pem=rsa.exportKey ()   张开(“服务器私有。f: pem”、“w”)   f.write (private_pem)      .exportKey public_pem=rsa.publickey () ()   张开(“服务器的公钥。f: pem”、“w”)   f.write (public_pem)      #客户的秘钥对的生成   private_pem=rsa.exportKey ()   张开(“客户机私有。f: pem”、“w”)   f.write (private_pem)      .exportKey public_pem=rsa.publickey () ()   张开(“client-public。f: pem”、“w”)   f.write (public_pem)

python中的RSA加密与解密实例解析