M2Crypto和M2Crypto的安装

参考网址: http://stackoverflow.com/questions/3107036/how-do-i-install-m2crypto-on-ubuntu
http://www.newsmth.net/nForum/#!article/Python/60734
1、安装依赖项
- **Python 2.3 or newer**
- **OpenSSL 0.9.7 or newer**
sudo apt-get install openssl
- **SWIG 1.3.28 or newer**
sudo apt-get install swig
2、安装 M2Crypto
sudo apt-get install python-m2crypto
3、添加库
windows-preference中的
 加入包 /usr/lib/python2.7/dist-packages/M2Crypto  4、实例
(1)公私钥(rsa)
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")


你可能感兴趣的:(M2Crypto和M2Crypto的安装)