0

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

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

请注意“openssl 的东西”。为了抑制写入标准输出/错误,我通常会这样做:

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

在这种情况下,这没有任何影响。我假设这与 M2Crypto 包装 OpenSSL 的方式有关。

有没有办法阻止它?

4

1 回答 1

3

我查看了源代码/M2Crypto/RSA.py,发现了您的问题,然后意识到我可以只阅读文档。总是先检查文档!!!

根据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...
于 2012-08-01T20:42:10.407 回答