2017-02-11 7 views
-2

PythonでランダムなRSAプライベートキーを作成しようとしていますが、エラーメッセージが表示されています。 私が今使っているコードはthisです。以前作成したスレッドですが、うまくいきません。Python 3でプライベートキーを作成する際にエラーが発生するRSA

コード:

from Crypto import Random 
from Crypto.PublicKey import RSA 

def random_generator(): 
    return Random.new().read(32) 

private_key = RSA.generate(1024, random_generator) 
print(str(private_key)) 

エラーメッセージ:

Traceback (most recent call last): 
    File "/home/simon/Python/Projects/FileServer/encrypt.py", line 7, in <module> 
    private_key = RSA.generate(1024, random_generator) 
    File "/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py", line 508, in generate 
    obj = _RSA.generate_py(bits, rf, progress_func, e) # TODO: Don't use legacy _RSA module 
    File "/usr/lib/python3/dist-packages/Crypto/PublicKey/_RSA.py", line 50, in generate_py 
    p = pubkey.getStrongPrime(bits>>1, obj.e, 1e-12, randfunc) 
    File "/usr/lib/python3/dist-packages/Crypto/Util/number.py", line 265, in getStrongPrime 
    randfunc) 
TypeError: random_generator() takes 0 positional arguments but 1 was given 
+1

可能な二重にRSAプライベートキーを作成しながら、 python](http://stackoverflow.com/questions/42175763/error-while-creating-private-key-with-rsa-in-python) –

+0

あなたの質問を再編集しないでください。 –

答えて

1

documentationから:

generate(bits, randfunc=None, progress_func=None, e=65537)

パラメータ:

...

  • randfunc(呼び出し可能) - 乱数生成機能。それは単一の整数Nを受け入れ、Nバイトのランダムなデータの文字列を返すべきです。指定されていない場合は、新しいものがCrypto.Randomからインスタンス化されます。

あなたrandom_generator()は、任意のパラメータを取りません。 1つのパラメータ、つまり返すべきバイトの数を取ることになっています。また、実装は悪いです - 毎回新しいインスタンスを作成しているため、発生する数字のランダム性が著しく低下する可能性があります。

しかし、Crypto.Randomインスタンスを使用しているだけなので、このパラメータをまったく指定する必要はありません。

from Crypto.PublicKey import RSA 

private_key = RSA.generate(1024) 
print(str(private_key)) 

あなた独自randfuncを提供することにを主張する場合、それをCrypto.Randomインスタンスのバインドread方法を渡します。

from Crypto import Random 
from Crypto.PublicKey import RSA 

r = Random.new() 

private_key = RSA.generate(1024, r.read) 
print(str(private_key)) 
[エラーの
+0

これまでのところ、どうすればよいでしょうか? – Soloritur

+0

良いrandfuncを提供する方法を示す答えが更新されました。それがあなたのために有用であったならば、投票結果を投票してください。 –

+0

いつ、私自身のrandfuncを使うのですか?それとも私は決して使ってはいけないのですか?そして私は投票することができません – Soloritur

関連する問題