参考网址: http://stackoverflow.com/questions/3107036/how-do-i-install-m2crypto-on-ubuntu
import BIO, RSA, EVP, util
class rsa:
def genRsaKeypair(self,rsalen = 1024):
rsa_key = RSA.gen_key(rsalen, 3, lambda *arg:None)
rsa_key.save_key("pri_key.pem", None)
rsa_key.save_pub_key("pub_key.pem")
def encryptionByPubkey(self,message):
pub_key = RSA.load_pub_key("pub_key.pem")
return pub_key.public_encrypt(message, RSA.pkcs1_padding)
def decryptionByPrikey(self,message):
string = open("pri_key.pem","rb").read();
bio = BIO.MemoryBuffer(string);
pri_key = RSA.load_key_bio(bio);
return pri_key.private_decrypt(message,RSA.pkcs1_padding)
def signByPrikeyAndSha1(self,message):
m=EVP.MessageDigest("sha1")
m.update(message)
digest=m.final()
key_str=file("pri_key.pem","rb").read()
key=RSA.load_key_string(key_str, util.no_passphrase_callback)
return key.sign(digest, "sha1")
def verifyByPubkeyAndSha1(self,sign,message):
m=EVP.MessageDigest("sha1")
m.update(message)
digest=m.final()
cert_str=file("pub_key.pem", "rb").read()
mb=BIO.MemoryBuffer(cert_str)
cert=RSA.load_pub_key_bio(mb)
try:
cert.verify(digest, sign, "sha1")
return True
except:
return False
#if __name__ == "main":
r = rsa()
r.genRsaKeypair()
print r.decryptionByPrikey(r.encryptionByPubkey("message"))
print r.verifyByPubkeyAndSha1(r.signByPrikeyAndSha1("message"), "mesage")
(2)对称密钥(3DES)
种子sed需要与密码的长度相同
import EVP from StringIO import StringIO class TripleDES: def __init__(self,salt,level): self._salt = salt self._level = level #the length of sed is equals to the length of password #the sed,salt,password is must same when en/decrption def encryptBySha1(self,message,sed,password): out=StringIO() m=EVP.Cipher("des_ede3_cbc", password, sed, 1, 1, "sha1", self._salt, self._level, 1) out.write(m.update(message)) out.write(m.final()) return out.getvalue() def decryptBySha1(self,message,sed,password): out=StringIO() m=EVP.Cipher("des_ede3_cbc", password, sed, 0, 1, "sha1", self._salt, self._level, 1) out.write(m.update(message)) try: out.write(m.final()) except: return None return out.getvalue() t = TripleDES("salt",5) print t.decryptBySha1(t.encryptBySha1("message", "123456","passwd"),"123456" ,"passd")
(3)哈希算法
hash生产消息摘要
import EVP class HashBysha1Ormd5: def __init__(self,alg): self._alg = alg def hash(self,message): m=EVP.MessageDigest(self._alg) m.update(message) return m.digest() h = HashBysha1Ormd5("sha1") print h.hash("message")