php mega.nz как расшифровать атрибут файла (имя файла) с помощью lib натрия - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь получить имя файла из ответа mega.nz api, который имеет зашифрованный атрибут с использованием функции php libsodium odium_crypto_secretbox_open

мой код такой

function base64url_encode($data) { 
  return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
} 
function base64url_decode($data) { 
  return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); 
} 
function str_to_a32($b) {
    $padding = (((strlen($b) + 3) >> 2) * 4) - strlen($b);
    if ($padding > 0) {
      $b .= str_repeat("\0", $padding);
    }
    return array_values(unpack('N*', $b));
  }
  function a32_to_str($a) {
    return call_user_func_array('pack', array_merge(array('N*'), $a));
  }
$file='2lIDmCLL';
$key='iEigITqmoDk3WJF4WB_OHZCOrB62f2VNPvifDwhjCV4';

$ch = curl_init('https://eu.api.mega.co.nz/cs');

$data = array(array('a' => 'g', 'g'=>0, 'p' => $file));
$data_string = json_encode($data);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);

$output = curl_exec($ch);

$res = json_decode($output, true);
print_r($res);

$fn=base64url_decode($res[0]['at']);
echo $fn;//exit;
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

$key=base64url_decode($key);
echo $key;
echo sodium_crypto_secretbox_open($fn, $nonce, $key);

но это не дает имя файла. пожалуйста, скажите мне, как расшифровать параметр at из ответа API.

...