lcy 发表于 2018-11-19 13:17:08

whmcs 密码加解密方式

function encrypt($string)
{
    $applicationConfig = DI::make("config");
    $cc_encryption_hash = $applicationConfig["cc_encryption_hash"];
    $key = md5(md5($cc_encryption_hash)) . md5($cc_encryption_hash);
    $hash_key = _hash($key);
    $hash_length = strlen($hash_key);
    $iv = _generate_iv();
    $out = "";
    for( $c = 0; $c < $hash_length; $c++ )
    {
      $out .= chr(ord($iv[$c]) ^ ord($hash_key[$c]));
    }
    $key = $iv;
    for( $c = 0; $c < strlen($string); $c++ )
    {
      if( $c != 0 && $c % $hash_length == 0 )
      {
            $key = _hash($key . substr($string, $c - $hash_length, $hash_length));
      }

      $out .= chr(ord($key[$c % $hash_length]) ^ ord($string[$c]));
    }
    return base64_encode($out);
}

function decrypt($string)
{
    $applicationConfig = DI::make("config");
    $cc_encryption_hash = $applicationConfig["cc_encryption_hash"];
    $key = md5(md5($cc_encryption_hash)) . md5($cc_encryption_hash);
    $hash_key = _hash($key);
    $hash_length = strlen($hash_key);
    $string = base64_decode($string);
    $tmp_iv = substr($string, 0, $hash_length);
    $string = substr($string, $hash_length, strlen($string) - $hash_length);
    $iv = "";
    $out = "";
    for( $c = 0; $c < $hash_length; $c++ )
    {
      $ivValue = (isset($tmp_iv[$c]) ? $tmp_iv[$c] : "");
      $hashValue = (isset($hash_key[$c]) ? $hash_key[$c] : "");
      $iv .= chr(ord($ivValue) ^ ord($hashValue));
    }
    $key = $iv;
    for( $c = 0; $c < strlen($string); $c++ )
    {
      if( $c != 0 && $c % $hash_length == 0 )
      {
            $key = _hash($key . substr($out, $c - $hash_length, $hash_length));
      }

      $out .= chr(ord($key[$c % $hash_length]) ^ ord($string[$c]));
    }
    return $out;
}

有大佬了解么?
页: [1]
查看完整版本: whmcs 密码加解密方式