
本教程详细介绍了如何通过编程方式解析tor v3 onion域名,以提取其核心组成部分:公钥、校验和以及版本号。文章将深入讲解base32解码过程和字节级的数据提取方法,并提供实用的php代码示例,指导您如何从给定的.onion地址中识别这些关键元素。
理解Tor V3 Onion地址结构
Tor V3 onion地址是隐藏服务在Tor网络中的标识符。与V2地址相比,V3地址更长、更安全,并包含了服务的身份公钥、一个版本字段和一个基本校验和。这些信息经过base32编码后形成我们常见的.onion地址。
根据Tor的隐藏服务协议规范(rend-spec-v3.txt),一个V3 onion地址的结构可以概括为:
onion_address = base32(PUBKEY | CHECKSUM | VERSION) + ".onion"
其中:
- PUBKEY:是隐藏服务的32字节Ed25519主公钥。
- VERSION:是一个单字节的版本字段,默认值为\x03(即十进制的3)。
- CHECKSUM:是一个2字节的校验和,通过对常量字符串、公钥和版本字段进行SHA3-256哈希计算后截取前两个字节得到。其计算公式为:CHECKSUM = H(".onion checksum" | PUBKEY | VERSION)[:2]。这里的H代表SHA3-256哈希函数。
这意味着,在移除.onion后缀并进行base32解码后,我们将得到一个35字节的二进制字符串,其内部结构为:
- 前32字节是公钥(PUBKEY)。
- 接下来的2字节是校验和(CHECKSUM)。
- 最后1字节是版本号(VERSION)。
准备工作:Base32解码库
由于PHP标准库中不直接提供Base32解码功能,我们需要引入一个第三方库。本教程将以一个常见的Base32库为例(例如,通过Composer安装的base32-php/base32)。
首先,确保您的项目已安装了Base32解码库。如果您使用Composer,可以通过以下命令安装:
composer require base32-php/base32
然后,在您的PHP脚本中引入自动加载器:
require_once 'vendor/autoload.php'; use Base32\Base32;
逐步解析V3 Onion地址
我们将以示例地址 pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion 进行解析。
1. 预处理:移除.onion后缀
首先,从完整的onion地址中移除.onion后缀,只保留base32编码的部分。
2. Base32解码
接下来,使用Base32库对提取出的字符串进行解码。解码后的结果应该是一个35字节的二进制字符串。










