最近、ゲーム コミュニティ用に IPBoard ボード ソフトウェアを入手しました。これを SMF から変換しました。
smf を使用したとき、プレイヤーがゲーム サーバーに登録することを承認するシステムを使用しました。このスクリプトは php スクリプトと呼ばれ、プレイヤーがゲームに入力したパスワードのハッシュ (sha1) を作成し、実行中のスクリプトに送り返しました。ゲーム。次に、プレイヤーがフォーラムに登録されているかどうかを確認してから、プレイさせました。さて、IPBoard は別のハッシュを使用します。
$hash = md5( md5( $salt ) . md5( $password ) );
どこ:
$hash is the value stored in the database column members_pass_hash.
$salt is the value stored in the database column members_pass_salt.
$password is the plaintext password.
私がしようとしているのは、ゲーム内のスクリプトに正しいハッシュを返す php スクリプトを作成することです。後でそれをゲームからデータベースに比較します。これは私のコードです:
<?php
include("mta_sdk.php");
$input = mta::getInput();
// Configuración de la aplicación
$DB_SERVIDOR = 'localhost:3306';
$DB_USUARIO = 'root';
$DB_CLAVE = 'xxx';
$DB_BASEDATOS = 'ipboard';
$conexion = mysql_connect($DB_SERVIDOR, $DB_USUARIO, $DB_CLAVE);
mysql_select_db($DB_BASEDATOS, $conexion);
mysql_query("SET NAMES 'utf8'");
$sql = "SELECT members_pass_salt FROM ipb_members WHERE name = '".$input[2]."'";
$Res = mysql_query($sql, $conexion);
$rowRes = mysql_fetch_assoc($Res);
$salt = $rowRes['members_pass_salt']
$hash = md5( md5( $salt ) . md5( $input[3] ) );
//$hash = $salt;
// Return encrypted string using MD5
mta::doReturn($hash,$input[1],$input[2],$input[3],$input[4]);
?>
$input 変数は、ゲームでプレイしようとしているユーザーから提供された情報を返します。以下のような配列です。
$input[2] - the username;
$input[3] - the password (plain text)
他の値はゲームが使用しているものであり、これには必要ありません。
ゲームから正常に php スクリプトを呼び出すと、php は情報を送り返しますが、返されるハッシュは「エラー」です。
私はそれを行うさまざまな方法を試しましたが、ハッシュの代わりに常に同じエラーメッセージを取得します。
知っておくと興味深い追加情報:
私が話しているゲームは Multi Theft Auto で、GTA:SA のマルチプレイヤー向けの変更であり (誰かが知っているかもしれません)、スクリプトに LUA を使用しています。
mta_sdk.php ファイルは、このゲーム用に開発された php の sdk です (外部の php スクリプトを使用してゲームから情報を送受信できるようにするため)。
たぶん、これは従来の質問ではありません。あなたがこのゲームとその仕組みに慣れていないことを知っているので、私はこれをできる限りうまく説明しようとしました.
前もって感謝します