- 論壇徽章:
- 0
|
最近要跟公司的OAuth對接,所以簡單地了解了一下RSA的相關模塊用法。
rsa:
內置文檔(rsa.__doc__)上明確說,這是教學用的模塊。并不實用于生產環(huán)境。
ezPyCrypto:
官方網站:http://www.freenet.org.nz/ezPyCrypto/detail/index.html
基于pycrypto。
文檔對于導入key沒有太多的說明,直接看源碼后,我悲劇的發(fā)現ezPyCrypto的importKey() 似乎是使用了它自己定義的格式。也就是說,如果你的key不是由ezPyCrypto的exportKey()得到的,那么你會在各種轉換上花費很大的力氣。
M2Crypto:
官網(http://chandlerproject.org/Projects/MeTooCrypto)無法訪問。
源碼來源,http://pypi.python.org/pypi/M2Crypto,在snow leopard上無法直接編譯。
最后使用Macport安裝。
使用M2Crypto.RSA.load_key()來生成M2Crypto.RSA.RSA的實例,注意,key pair其實就是私鑰(private key),PEM格式(openssl默認輸出格式)。
如果你只需要加密,可以考慮用load_pub_key,單獨讀入公鑰(public key)。
加密數據需要通過某種編碼變成單字節(jié)的數組。下面的例子使用了UTF-8 編碼。- # -*- encoding: UTF-8 -*-
- import M2Crypto as m2c
- key = m2c.RSA.load_key('key1/id_rsa')
- # encrypt something:
- data = u'Mochi 麻球'.encode('UTF-8')
- encrypted = key.public_encrypt(data, m2c.RSA.pkcs1_padding)
- # and now decrypt it:
- decrypted = key.private_decrypt(encrypted, m2c.RSA.pkcs1_padding)
- print data == decrypted
復制代碼 注意 RSA.sign(self, digest, algo='sha1') 這個方法,雖然在最后的參數指定了hash方法,但是其實需要先在外面自行獲得digest。
代碼里面有一個padding參數,如果你對此感興趣,可以參考:
http://tools.ietf.org/html/rfc3447
PKCS #1有兩種padding的定義,我個人的理解RSA.pkcs1_padding對應是下面的一節(jié):
http://tools.ietf.org/html/rfc3447#section-7.2.1
如果你不高興看這些細節(jié),只要記得編碼和解碼的時候,使用的參數一致即可。
See also:
http://www.amk.ca/python/code/crypto
里面提到一個yawPyCrypto,似乎不錯。
有點簡陋,這是在上班時候的邊做邊寫的。計劃在不忙的時候寫一個rsa算法的淺析。 |
|