2013-04-29 285 views
0

我发现这个脚本“的地方”:openssl_pkey_get_details()预计参数1是资源,鉴于布尔

define("ACC_NAME", "my_steam_login"); 
define("ACC_PASS", "my_password"); 
define("GROUP_ID", "my_group_id"); // open steam group page and see "Enterchat room" link, which contains ID 
define("MY_STEAM_ID", "my_steamid"); // steam ID which can invite to join group 

$invite_steam_id = $_GET['i']; 

$ids = file('invited_ids.txt'); 
foreach($ids as $id){ 
    $id = trim($id); 
    if ($id == $invite_steam_id) 
     die($id .": Already invited!\n"); 
} 

function _curl_parse_cookiefile($file){ 
    $aCookies = array(); 
    $aLines = file($file); 
    foreach($aLines as $line){ 
     if('#'==$line{0}) 
      continue; 
     $arr = explode("\t", $line); 
     if(isset($arr[5]) && isset($arr[6])) 
      $aCookies[$arr[5]] = $arr[6]; 
     } 
    return $aCookies; 
} 

function GetFriendID($steam_id) { 
    if (!$steam_id) 
     return 0; 
    $auth = explode(':', $steam_id); 
    if (!$auth[2]) 
     return 0; 
    $fid = $auth[2]; 
    $fid *=2; 
    $fid += 76561197960265728; 
    $fid += $auth[1]; 
    return $fid; 
} 

$mid = GetFriendID(MY_STEAM_ID); 
$fid = GetFriendID($invite_steam_id); 

class RSAHelper{ 
    var $pubkey; 
    public function __construct($modulus, $exponent){ 
     $res = openssl_pkey_get_public($this->buildCertificate($modulus, $exponent)); 
     $details = openssl_pkey_get_details($res); 
     $this->pubkey = $details["key"]; 
    } 

    private function buildCertificate($modulus, $exponent){ 
     $key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB" . "iQKBgQCy745x" . $modulus . "ID" . $exponent; 
     $key = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($key, 16, "\n", true) . "\n-----END PUBLIC KEY-----"; 
     return $key; 
    } 

    public function encrypt($string){ 
     $crypted = ""; 
     openssl_public_encrypt($string, $crypted, $this->pubkey); 
      return base64_encode($crypted); 
     } 
    } 

    $url="https://steamcommunity.com/login/getrsakey/"; 
    $PostFields = array(
     'username' => ACC_NAME 
    ); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, 1); 
    curl_setopt($ch, CURLOPT_VERBOSE, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $PostFields); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt'); 
    curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__)."cacert.pem"); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    $result=curl_exec($ch); 
    $json=json_decode($result,true); 
    $key_mod=$json['publickey_mod']; 
    $key_exp=$json['publickey_exp']; 
    $timestamp=$json['timestamp']; 

    $RSA=new RSAHelper($key_mod,$key_exp); 

这是一个古老的脚本,它应该发出邀请,汽集团的修改版本。这个版本应该工作,但我得到了一个错误:

Warning: openssl_pkey_get_details() expects parameter 1 to be resource, boolean given in /home/.../public_html/test/steaminv.php on line 51

有谁知道什么是错与此脚本?

回答

0

该错误指出提供的布尔值不是资源。

这意味着openssl_pkey_get_public函数返回false。

它只会这样做,如果提供的字符串不是有效的公钥。

这是因为您的类中的buildCertificate方法不会返回有效的PEM格式公钥。

有几件事情:

  1. 使用\r\n\n

  2. 使用chunk_splitword_wrap

  3. 这不是因为据我所知(纠正我,如果我错了)如何你建立一个公钥。使用Open SSL构建密钥。

相关问题