1

我正在将我的网站从 oscommerce 商店转移到商业应用程序。

新应用程序使用直接 MD5 加密存储其密码。Oscommerce 使用 MD5 存储密码,但还会在哈希中添加一个随机的 2 位数字(以明文形式提供)。

这是某个论坛上有人发的:

添加的两个字符用于以
hash=md5(twocharactersPlainPassword)
即: 2letters: 74
Plain Password: PaSs
hash=md5('74PaSs')=acaa6e689ae0008285320e6617ca8e95:74 的方式创建哈希


这是 Oscommerce 如何加密密码的代码:

// This function makes a new password from a plaintext password.
function tep_encrypt_password($plain) {
  $password = '';

  for ($i=0; $i<10; $i++) {
    $password .= tep_rand();
  }

  $salt = substr(md5($password), 0, 2);
  $password = md5($salt . $plain) . ':' . $salt;

  return $password;
}

// This funstion validates a plain text password with an encrypted password
function tep_validate_password($plain, $encrypted) {
  if (tep_not_null($plain) && tep_not_null($encrypted)) {
    // split apart the hash / salt
    $stack = explode(':', $encrypted);

    if (sizeof($stack) != 2) {
      return false;
    }

    if (md5($stack[1] . $plain) == $stack[0]) {
      return true;
    }
  }

  return false;
}

这是我的新购物车加密密码的方式:

if ($admin_password_encrypt == 1) {
    $password_match = md5($password);
} else {
    $password_match = $password;
}

是否有任何可能的方式将客户密码从我的 oscommerce 购物车导入到我的新购物车。

4

5 回答 5

7

您似乎拥有新购物车的源代码。由于“直接 MD5”是一种非常糟糕的密码存储方式,也许您应该简单地更改它以使用与 OSCommerce 相同的密码存储机制。

您的问题的答案是否定的,没有办法转换密码。

于 2009-07-10T12:41:36.337 回答
7

不要在数据库中保存普通的 MD5 哈希值。使用彩虹表可以快速轻松地对普通 MD5 哈希进行逆向工程。但是,无论您将来如何选择存储密码,这都是您解决问题的方法:

  1. 在新数据库中创建一个指定密码“版本”的列。这用于确定密码是由旧应用程序还是新应用程序生成的。
  2. 导入旧用户,设置上述标志以指示密码已导入。
  3. 创建两种验证密码的方法。一种方法使用旧应用程序中的代码,另一种方法使用新的验证方法。
  4. 当用户登录时,检查上述标志并使用适当的验证方法。

无论如何,我想重申,对于大多数密码来说,普通的 MD5 哈希很容易破解(因为人们喜欢简短且容易记住的密码。)使用盐和/或更复杂的算法。我推荐两者,并使用长度超过两个字符且不限于数字的盐。这将使密码真正安全。

于 2009-07-10T12:50:15.713 回答
3

不,MD5 是一种哈希算法,它是一种单向函数。您无法在 oscommerce 系统上反转散列以移除盐分并重新散列。对不起。

于 2009-07-10T12:41:25.120 回答
1

如果密码使用 md5 加密,您将无法解密它们。您最好的方法是检查您的登录代码是否在某个日期之前创建了帐户/上次密码更改。如果是,请使用 OSCommerce 的密码验证功能,如果不是,请使用您自己的。

这样,对于所有新帐户,密码都将使用新方法加密,而对于旧帐户,您将继续照常处理它们,因此对用户来说是透明的。

另一个可能更好的选择是您继续使用 OsCommerce 的盐渍方法。它更安全,您还可以保留现有密码。

于 2009-07-10T12:43:29.003 回答
0

哈希算法之间没有自动转换的方法。不幸的是,您可能会被困在以下错误选项之一中:

  1. 配置或编程旧购物车以在用户登录旧系统时以新格式存储哈希。
  2. 使用密码破解程序来恢复一定百分比的旧系统购物车密码。
  3. 要求新供应商支持旧格式
  4. 向所有用户发送通知,他们需要在使用新系统时将盐文本添加到他们的密码中,或者自定义系统以为他们添加已知的盐。
于 2009-11-16T08:14:22.893 回答