2

古いデータベースから vBulletin データベースにユーザーを転送しています。

そうしないと永遠にかかるので、スクリプトでこれを行う必要があります。

md5(password) と同じように、すべてのユーザーのパスワードを保存しています

しかしもちろん、これは塩などのために vBulletin では機能しません。

だから私のコードはこれです:

<?Php
mydatabase_connect();
$select=mysql_query("SELECT * from `users`");
while($user=mysql_fetch_array($select)) {

    forum_connect();
    $check=mysql_query("SELECT * from `user` where `username` = '{$user[username]}'");
    if(mysql_num_rows($check)>="1") {
        echo "fail";
        }else{
        $insert=mysql_query("INSERT into `user` SET `username` = '{$user[username]}', `password` = '{$user[password]}', `email` = '{$user[email]}'");
        if($insert) {
            echo 'success';
            }else{
            echo 'fail';
        }
    }
    mydatabase_connect();
}
?>

vBulletin で動作するように変更するにはどうすればよいですか? vBulletin ユーザーを設定できます。passwordフィールドと vBulletin ユーザー。salt正しく。私の $user[password] またはusers. password実際のテキスト パスワードの md5 ハッシュとして保存されます。

ありがとう!

4

4 に答える 4

4

この回答が遅すぎるかどうかはわかりませんが、パスワードをvBulletinに自動的に転送できるはずです。

vBulletinは、次の方法でハッシュを生成します。

$hash = md5(md5($plaintext) . $salt);

したがって、ユーザーを転送するには、大まかに次のようにします。

$salt = /* generate salt */;
$vb_hash = md5($your_old_hash . $salt);

自分で簡単にできるように、vBulletinのソルト生成方法を使用してください。これはvB_DataManager_Userクラスにあります。

于 2010-02-04T20:09:57.937 に答える
1

古いシステムがソルトなしのハッシュを使用し、vBulletin がソルト付きのハッシュを使用している場合、ユーザーにパスワードを保持させたい場合は、vBulletin を修正してソルトなしのハッシュも使用する必要があります。私は vBulletin コードに詳しくありませんが、各ユーザーが独自のソルト値を持っている場合は、おそらくこれを空の文字列に設定するだけで十分でしょう。

それができない場合は、ユーザーが新しいシステムに移行できるようにページを作成します。ログインが失敗したときにユーザーをページに誘導できます。これにより、古いシステムに対して資格情報がチェックされ、新しいシステム用の新しいソルトとハッシュが作成されます。

于 2009-10-04T14:35:49.623 に答える
0

ユーザー情報を既存のデータベースから vbulletin データベースに転送するために使用したプロセスを変更しました。MySQL コマンド ライン クライアントから入力されたデータベース クエリを使用するため、PHP 処理は必要ありません。

これは、概説したシナリオで機能します。つまり、既存のデータベースのパスワードが を使用して保存されているということですmd5(password)

両方のデータベースが同じサーバー、vBulletin 4.x 上にあります。

3 つのストアド ファンクションが作成されます。

vbulletin.userTitle() // Convert user type from current db to a user title

vbulletin.groupId() // Convert current user type into permission group ID

vbulletin.randomSalt() // Create salt using same approach as used by vbulletin

MySQL クライアントからログインします。 mysql --user=xxx -p vbulletin

ストアド関数を作成します。

  delimiter //
  CREATE FUNCTION vbulletin.userTitle(mtype VARCHAR(255))
  RETURNS CHAR(250)
  NO SQL

  BEGIN
    DECLARE userTypeTitle CHAR(250) DEFAULT "";

    CASE mtype
      WHEN 'user' THEN SET userTypeTitle = 'Member';
      WHEN 'admin' THEN SET userTypeTitle = 'Administrator';
      WHEN 'moderator' THEN SET userTypeTitle = 'Regional Moderator';
      ELSE
        SET userTypeTitle = 'Member';
    END CASE;

  RETURN userTypeTitle;
  END//

  CREATE FUNCTION vbulletin.groupId(mtype VARCHAR(255))
  RETURNS smallint(5)
  NO SQL

  BEGIN
    DECLARE groupTypeId smallint(5) DEFAULT 0;

    CASE mtype
      WHEN 'user' THEN SET groupTypeId = 2;
      WHEN 'admin' THEN SET groupTypeId = 6;
      WHEN 'moderator' THEN SET groupTypeId = 11;
      ELSE
         SET groupTypeId = 12;
    END CASE;

  RETURN groupTypeId;
  END//

  CREATE FUNCTION vbulletin.randomSalt()
  RETURNS CHAR(30)
  READS SQL DATA

  BEGIN
    DECLARE count INT DEFAULT 0;
    DECLARE rn1 CHAR;
    DECLARE saltout VARCHAR(30) DEFAULT "";

    WHILE count<30 DO
      SET count = count+1;
      SET rn1 = CHAR(FLOOR(33 + (RAND() * 93)));
      SELECT CONCAT(saltout, rn1) INTO saltout;
    END WHILE;

  RETURN saltout;
  END//
  delimiter ;

ユーザー情報を移行する前に、データベースをバックアップしてください。

vbulletin データベースには、セットアップおよびテスト中に使用されるすべての情報が含まれているため、更新する 3 つのテーブルを空にします。

  TRUNCATE `vbulletin`.`user`;
  TRUNCATE `vbulletin`.`userfield`;
  TRUNCATE `vbulletin`.`usertextfield`;

次のクエリを変更して、既存のデータベースとその関連フィールドを使用します。

メイン ユーザー テーブルに入力します。
ソルトは、既存のユーザー テーブルの各行に対して格納された関数を介して生成されます。
既存のデータベースからハッシュ化されたパスワードは、次のように vbulletin データベースに挿入されるときにソルトでハッシュ化されます。
MD5(current_hashed_password + new_salt)

主なクエリ:

  INSERT INTO `vbulletin`.`user` (
  `userid`, `username`, `salt`, `password`, `email`, `passworddate`, `styleid`, `showvbcode`, `joindate`, `lastvisit`, `lastactivity`, `reputationlevelid`, `timezoneoffset`, `usergroupid`, `usertitle`
  )
  SELECT
  `current_userid`, `current_username`, vbulletin.randomSalt() as new_salt, MD5(current_hashed_password + new_salt), `current_email`, CURDATE(), 5, 2, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), 5, 0, vbulletin.groupId(current_type), vbulletin.userTitle(current_type)
   from `current_database`.`user`;

次のクエリは、各ユーザーの既定のエントリを追加します。

カスタマイズされたプロファイル フィールドを追加した場合は、その情報を userfield テーブルに転送します。

  INSERT INTO `vbulletin`.`userfield` (
  `userid`, `field5`, `field6`
  )
  SELECT
  `current_userid`, `firstname`, `lastname`
   from `current_database`.`user`;


  INSERT INTO `vbulletin`.`usertextfield` (
  `userid`
  )
  SELECT `current_userid`
   from `current_database`.`user`;

管理者グループ ユーザーの評価レベルを設定します。

  UPDATE `vbulletin`.`user` SET `reputationlevelid` = 1 WHERE `usergroupid` = 6;

保存された関数を削除します。それらは再び使用されません。

  DROP FUNCTION vbulletin.userTitle;
  DROP FUNCTION vbulletin.groupId;
  DROP FUNCTION vbulletin.randomSalt;
于 2012-06-22T02:27:04.963 に答える
0

これは私のために働いた

md5(md5(passowrd).salt);
于 2010-02-18T22:06:33.617 に答える