下载Windows版验证客户端 下载客户端格式转换代码 说明: 运行使用格式转换工具访问站点API,并且生成一定格式的验证文件 下载Windows版客户端,验证上一步生成的验证文件 不下载代码文件,直接复制 *注意PHP环境一定要安装HTTP/HTTPS通信、JSON解码、哈希算法(至少包含SHA3-256及SHA256两种)相关组件 <?php //运行前请注意修改以下变量名 $log_file='logs.txt'; //运行日志文件,将以追加方式向其追加日志 $server='block.ltd'; //要获取哪个服务器上的链数据(必须是子服务器) $chain_file='chain.txt'; //导出的供客户端验证的文件 try { $chain_data="*源文本\t哈希3\t哈希2\t权重链值"; $t=file_get_contents('http://'.$server.'/public.json'); if(!$t) throw new Exception('获取连接主机导航文件失败', 1); $t =json_decode($t,true); if(!$t) throw new Exception('连接服务器JSON解码失败', 1); $public_config=$t; if(!isset($public_config['PathGetSingleWeightedChainItem'])) throw new Exception('配置文件错误', 1); //初始时上一条目信息 $last_item=['CalcTaskId'=>0,'WeightHash'=>'']; //循环获取 while(true) { //通过ID递增来不停向下获取,每次只获取一条 $url='http://'.$server.$public_config['PathGetSingleWeightedChainItem'].'?no='.($last_item['CalcTaskId']+1).'&nonexist=next'; $t = file_get_contents($url); if($t===false) throw new Exception('访问连接远程服务器失败', 1); $t =json_decode($t,true); if(!$t) throw new Exception('JSON解码失败', 1); if(!$t['success']) throw new Exception('远程服务器报错:'.$t['detail'], 1); $detail=$t['detail']; //先验证一遍哈希2和哈希3合法性 $source_text=$detail['CalcChainHash'].','; $t=$source_text.$last_item['WeightHash']; if(hash('sha3-256',$t.$detail['Hash3Value'])!=$detail['WeightHash3']) throw new Exception('哈希3验证失败,应为', 1); if(hash('sha256',$t.$detail['Hash2Value'])!=$detail['WeightHash2']) throw new Exception('哈希2验证失败', 1); $last_item=['CalcTaskId'=>$detail['CalcTaskId'],'WeightHash'=>$detail['WeightHash3'].$detail['WeightHash2']]; if(strlen($chain_data)) $chain_data.="\r\n"; $chain_data.=$source_text."\t".$detail['Hash3Value']."\t".$detail['Hash2Value']."\t".$detail['WeightHash3'].$detail['WeightHash2']; } } catch (Exception $e) { //并不是所有的异常均为出错,如已经超出链数据范围可能异常是“没有搜索到您需要的条目” log_append('异常退出,'.$e->getMessage()); } //上面运行无论全部成功、部分成功均输出到文件 log_append(file_put_contents($chain_file, $chain_data) ? '成功输出到文件'.$chain_file."\r\n" : '输出到文件 '.$chain_file.' 失败'); function log_append($title) { //为方便设置变量$log_file放在了文件开头,此时在函数内部要用global global $log_file; $text = date('Y-m-d H:i:s ').$title."\r\n"; file_put_contents($log_file,$text,FILE_APPEND); echo $text;//用户可以直接输出到控制台代替输出文件来查看错误 } function site_general_hash($s) { //有时未安装sha3-256组件,此时停止运行并报错 $t = hash('sha3-256',$s).hash('sha256',$s); if(strlen($t)!= 128) exit('哈希出错'); return $t; }