将MD5 +盐密码导入MD5

Ibn*_*eed 1 php passwords import md5 oscommerce

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

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

以下是某人在论坛上发布的内容:

添加的两个字符用于以
hash = md5(twocharactersPlainPassword)的方式创建哈希,
即:2let:74
普通密码:PaSs
哈希= 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;
}
Run Code Online (Sandbox Code Playgroud)

以下是我的新购物车如何加密密码:

if ($admin_password_encrypt == 1) {
    $password_match = md5($password);
} else {
    $password_match = $password;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将我的oscommerce购物车中的客户密码导入我的新购物车.

Gre*_*ill 7

您似乎拥有新购物车的源代码.由于"直接MD5"是一种非常糟糕的存储密码的方式,因此您可能只需将其更改为使用与OSCommerce相同的密码存储机制.

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


Bli*_*ixt 7

不要在数据库中保存纯MD5哈希值.使用彩虹表可以快速轻松地对MD5平面进行逆向设计.但是,无论您将来如何选择存储密码,以下是解决问题的方法:

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

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