有没有办法抑制Python M2Crypto的RSA.gen_key输出?

时间:2012-08-01 20:15:47

标签: python m2crypto

我正在使用Python M2Crypto包生成RSA密钥。

>>> import M2Crypto
>>> rsa = M2Crypto.RSA.gen_key (2048, 65537)
.............................................................+++
............................+++
>>>

请注意“openssl stuff”。要禁止写入stdout / err,我通常会这样做:

sys.stdout = open(os.devnull, 'w')
sys.stderr = open(os.devnull, 'w')

在这种情况下没有效果。我假设这与M2Crypto包装OpenSSL的方式有关。

有没有办法阻止它?

1 个答案:

答案 0 :(得分:3)

我查看了来源/M2Crypto/RSA.py,找出了您的问题,然后意识到我本来可以阅读文档。 请务必先查看文档!!!

根据docs for RSA.gen_keygen_key有一个名为callback的可选参数,它允许您指定在调用gen_key时调用的函数(表面上是为了提供反馈)用户)。此回调的默认值将内容打印到stdout。将您的函数调用更改为:

>>> rsa = M2Crypto.RSA.gen_key (2048, 65537, callback=lambda x, y, z:None) 

它应该可以解决问题。

修改

以下是M2PyCrypto源代码的相关代码。我添加的评论。

def keygen_callback(p, n, out=sys.stdout): #sys.stdout is bound to `out` at definition time
    """
    Default callback for gen_key().
    """
    ch = ['.','+','*','\n']
    out.write(ch[p])
    out.flush()


def gen_key(bits, e, callback=keygen_callback): #keygen_callback is bound to `callback`
    #other code...