我发现这个脚本“在某个地方”:
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);
这是旧脚本的修改版本,应该向Steam Group发送邀请。这个版本应该有效,但我有一个错误:
警告:openssl_pkey_get_details()期望参数1为资源,第51行/home/.../public_html/test/steaminv.php中给出布尔值
有谁知道这个脚本有什么问题?
答案 0 :(得分:0)
错误表明提供的布尔值不是资源。
这意味着openssl_pkey_get_public
函数返回false。
如果提供的字符串不是有效的公钥,则只会这样做。
这是因为您班级中的buildCertificate
方法未返回有效的PEM格式公钥。
一些事情:
使用\r\n
而不是\n
使用chunk_split
而不是word_wrap
这不是我所知道的(如果我错了,请纠正我)你如何建立一个公钥。使用Open SSL构建密钥。