浏览 5778 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-02
最后修改:2010-09-06
rsa: 内置文档(rsa.__doc__)上明确说,这是教学用的模块。并不实用于生产环境。 ezPyCrypto: 官方网站:http://www.freenet.org.nz/ezPyCrypto/detail/index.html 基于pycrypto。 文档对于导入key没有太多的说明,直接看源码后,我悲剧的发现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)。 加密数据需要通过某种编码变成单字节的数组。下面的例子使用了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对应是下面的一节: http://tools.ietf.org/html/rfc3447#section-7.2.1 如果你不高兴看这些细节,只要记得编码和解码的时候,使用的参数一致即可。 See also: http://www.amk.ca/python/code/crypto 里面提到一个yawPyCrypto,似乎不错。 有点简陋,这是在上班时候的边做边写的。计划在不忙的时候写一个rsa算法的浅析。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |