#!/usr/bin/env python
import OpenSSL.crypto as crypto
import sha
import base64
KEY_BIT_LENGTH = 1024
ONION_LENGTH = 16
keys = crypto.PKey()
keys.generate_key(crypto.TYPE_RSA, KEY_BIT_LENGTH)
privkey_as_bytes = crypto.dump_privatekey(crypto.FILETYPE_ASN1, keys)
privkey_hash = sha.sha(privkey_as_bytes).digest()
onion = base64.b32encode(privkey_hash)[:ONION_LENGTH].lower() + '.onion'
print onion
print
print crypto.dump_privatekey(crypto.FILETYPE_PEM, keys)
我在这里做错什么吗?我认为我的错误可能出在用于base32编码步骤的字母中。Shallot使用“ abcdefghijklmnopqrstuvwxyz234567”,但是我完全不确定python使用什么,哈哈。
您的错误是使用私钥计算哈希值,因此您应该使用公钥。
的输出crypto.dump_publickey(crypto.FILETYPE_ASN1, keys)
结构如下:
SEQUENCE (2 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.1 rsaEncryption (PKCS #1)
NULL
BIT STRING (1 elem)
SEQUENCE(2 elem)
INTEGER (1024 bit) 1669234523452435234253452...
INTEGER 65537
但是Tor只使用最后一个序列,因此您必须从以下22个字节中进行切片:
pub_key = crypto.dump_publickey(crypto.FILETYPE_ASN1, keys)[22:]
key_hash = b32(hashlib.sha1(pub_key).digest()[:16])
print(key_hash[:16].lower() + ".onion")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句