python简单加密教程_python的加密解密教程

最近在做python的加解密工作,同时加完密的串能在php上能解出来,网上也找了一些靠谱的资料,相对于php而言python这块组件相对于较多的,分别是:

python-crypto - 这个组件是基本组件,使用的函式相对比较复杂。

ezPyCrypto - 相对简单,但他作出來的公私钥无法与其他程式相兼容。

SSLCrypto - 与 ezPyCrypto 是相同一个作者开发,效率上要比ezPyCrypto 好。

但一样不能与其它程序相兼容。

pyopenssl - 似乎是用在https 通讯上的,而我找不到加解密的用法。

M2Crypto - 终于让我找到了,但它有一大缺點,它底层是用 SWIG 与 OpenSSL 交接的。

在Windows安装SWIG 程序是非常难裝的。

我选择使用的是M2Crypto,公钥与私钥证书生成有两个方式,一种采用RSA生成,另一种是X509生成。

一、RSA方式生成的证书1.加密解密、加密签名、验证加密签名

#encoding: utf8

import os

import M2Crypto

#随机数生成器(1024位随机)

M2Crypto.Rand.rand_seed(os.urandom(1024))

#生成一个1024位公钥与私密钥证书

Geekso = M2Crypto.RSA.gen_key(1024, 65537)

Geekso.save_key('Geekso-private.pem', None)

Geekso.save_pub_key('Geekso-public.pem')

#使用公钥证书加密开始

WriteRSA = M2Crypto.RSA.load_pub_key('Geekso-public.pem')

CipherText = WriteRSA.public_encrypt("这是一个秘密消息,只能用私钥进行解密",M2Crypto.RSA.pkcs1_oaep_padding)

print "加密的串是:"

print CipherText.encode('base64')

#对加密串进行签名

MsgDigest = M2Crypto.EVP.MessageDigest('sha1')

MsgDigest.update(CipherText)

#提示,这里也可以使用私钥签名

#WriteRSA = M2Crypto.RSA.load_key ('Geekso-private.pem')

#Signature = WriteRSA.sign_rsassa_pss(MsgDigest.digest())

Signature = Geekso.sign_rsassa_pss(MsgDigest.digest())

print "签名的串是:"

print Signature.encode('base64')

#使用私钥证书解密开始

ReadRSA = M2Crypto.RSA.load_key ('Geekso-private.pem')

try:

PlainText = ReadRSA.private_decrypt (CipherText, M2Crypto.RSA.pkcs1_oaep_padding)

except:

print "解密错误"

PlainText = ""

if PlainText :

print "解密出来的串是:"

print PlainText

# 验证加密串的签名

MsgDigest = M2Crypto.EVP.MessageDigest('sha1')

MsgDigest.update(CipherText)

#提示,如果是用私钥签名的那就用公钥验证

#VerifyRSA = M2Crypto.RSA.load_pub_key('Alice-public.pem')

#VerifyRSA.verify_rsassa_pss(MsgDigest.digest(), Signature)

if Geekso.verify_rsassa_pss(MsgDigest.digest(), Signature) == 1:

print "签名正确"

else:

print "签名不正确"

2.字符串生成签名、验证签名

#用私钥签名

SignEVP = M2Crypto.EVP.load_key('Geekso-private.pem')

SignEVP.sign_init()

SignEVP.sign_update('来自这一客(http://www.geekso.com)的签名串')

StringSignature = SignEVP.sign_final()

print "签名串是:"

print StringSignature.encode('base64')

#用公钥验证签名

PubKey = M2Crypto.RSA.load_pub_key('Geekso-public.pem')

VerifyEVP = M2Crypto.EVP.PKey()

VerifyEVP.assign_rsa(PubKey)

VerifyEVP.verify_init()

VerifyEVP.verify_update('来自这一客(http://www.geekso.com)的签名串')

if VerifyEVP.verify_final(StringSignature) == 1:

print "字符串被成功验证。"

else:

print "字符串验证失败!"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值