エイ私はこの質問が古いと知っていますが、多分私の答えは、このようなことをやろうとしていた私のような他の人に恩恵を与えるでしょう。私はそれを理解したと思う - 私はいくつかのコードとPyShallotのコードのいくつかを使用し、私のために働いています。
import hashlib
from hashlib import sha1
import rsa
from pyasn1.type import univ, namedtype
from pyasn1.codec.der import encoder
from base64 import b32encode
from Crypto.PublicKey import RSA
class RSAPublicKey(univ.Sequence):
componentType = namedtype.NamedTypes(
namedtype.NamedType('modulus', univ.Integer()),
namedtype.NamedType('publicExponent', univ.Integer())
)
pubkey, privkey = rsa.newkeys(1024)
privkey = privkey.save_pkcs1(format='PEM')
key = RSA.importKey(privkey)
n = key.n
e = key.e
public_key = RSAPublicKey()
public_key.setComponentByName('modulus', n)
public_key.setComponentByName('publicExponent', e)
pubkey = encoder.encode(public_key)
onion = b32encode(sha1(pubkey).digest())[:16].lower()+'.onion'
print str(onion)
print str(privkey)
上記のコードは、タマネギのアドレスと対応する秘密鍵を出力します。 PyShallotは、RSAライブラリを使用する代わりに、公開鍵と秘密鍵をピース単位で計算することで動作するようです。私はrsaモジュールを使用して秘密鍵とCryptoモジュールを生成して個々のRSAパラメータを抽出し、PyShallotのコードを使用して公開鍵を計算しました。そこから、私はタマネギのアドレスを得ることができました。それは本当に醜いとハッキーですが、間違いなくそれを行うためのより良い方法は、高速であり、非常に多くのライブラリを使用していない。しかし、それは動作します。
ちょうど16文字でハッシュをスライスし、その後、16バイトのダイジェストをスライスするために必要なあなたは、ほぼ右のそれを得た