在PHP中获得与Rfc2898DeriveBytes在C#中给出的相同响应

时间:2018-09-13 10:25:53

标签: php .net

这是我的C#代码,但是我想在PHP中使用相同的加密字符串。你能以任何方式帮助我吗?

Audio

我的PHP代码是:

Foo

它应该给出audio,但产生方式有所不同。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

$idandKey = "bob@company.com" . "7MpszrQpO95p7H";
$salt = convertFromUrlTokenFormat("MqsXexqpYRUNAHR_lHkPRic1g1BYhH6bFNVPagEkuaL8Mf80l_tOirhThQYIbfWYErgu4bDwl-7brVhXTWnJNQ2");
$hash = hash_pbkdf2("sha1", $idandKey, base64_decode($salt), 1000, 24, true);
$key = convertToUrlTokenFormat(base64_encode($hash));
// key = “aE1k9-djZ66WbUATqdHbWyJzskMI5ABS0”;


function convertToUrlTokenFormat($val){
   $padding = substr_count($val, '=');
   $val = str_replace('=', '', $val);
   $val .= $padding;
   $val = str_replace('+', '-', str_replace('/', '_', $val));

   return $val;
}


function convertFromUrlTokenFormat($val){
   $val = str_replace('-', '+', str_replace('_', '/', $val));
   $lastCharacter = substr($val, -1);
   $val = substr($val, 0, -1);
   switch($lastCharacter){
     case 1:
        $val = $val . "=";
      break;
     case 2:
        $val = $val . "==";
      break;
 }

   return $val;
}