我正在使用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的方式有关。
有没有办法阻止它?
答案 0 :(得分:3)
我查看了来源/M2Crypto/RSA.py
,找出了您的问题,然后意识到我本来可以阅读文档。 请务必先查看文档!!!
根据docs for RSA.gen_key,gen_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...