За последние 24 часа нас посетили 17755 программистов и 1721 робот. Сейчас ищут 899 программистов ...

Проблема с алгоритмом AES

Тема в разделе "Прочие вопросы по PHP", создана пользователем MichaelPak, 24 ноя 2011.

  1. MichaelPak

    MichaelPak Активный пользователь

    С нами с:
    5 авг 2011
    Сообщения:
    46
    Симпатии:
    0
    Подключаю Яндекс.Деньги через библиотеку http://habrahabr.ru/blogs/pay_system/131648/. Не буду вдаваться в подробности, но в исходниках есть два метода: storeToken и restoreToken. Один сохраняет ключ и токен в файл формата .json, второй вытаскивает из фала токен:
    PHP:
    1. public function storeToken($key, $accessToken) {
    2.     $aes = new Crypt_AES();
    3.     $aes->setKey(self::TOKEN_STORAGE_SECRET);
    4.     $encryptedToken = base64_encode($aes->encrypt($accessToken));
    5.  
    6.     if (file_exists(self::TOKEN_STORAGE_FILE))
    7.         $tokenArray = json_decode(file_get_contents(self::TOKEN_STORAGE_FILE), TRUE);
    8.     else
    9.         $tokenArray = Array();
    10.  
    11.     $tokenArray[$key] = $encryptedToken;
    12.     $json = json_encode($tokenArray);
    13.     file_put_contents(self::TOKEN_STORAGE_FILE, $json);
    14. }
    15.  
    16. public function restoreToken($key) {
    17.     if (file_exists(self::TOKEN_STORAGE_FILE)) {
    18.         $tokenArray = json_decode(file_get_contents(self::TOKEN_STORAGE_FILE), TRUE);
    19.         if (array_key_exists($key, $tokenArray)) {
    20.             $aes = new Crypt_AES();
    21.             $aes->setKey(self::TOKEN_STORAGE_SECRET);
    22.             $decryptedToken = $aes->decrypt(base64_decode($tokenArray[$key]));
    23.             return $decryptedToken;
    24.         } else
    25.             throw new YandexMoneyException(YandexMoneyException::ERR_MESS_TOKEN_NOT_FOUND .
    26.                                            ' with key = ' . $key, 1006);
    27.     }
    28.     else
    29.         throw new YandexMoneyException(YandexMoneyException::ERR_MESS_TOKEN_NOT_FOUND .
    30.                                        ' with key = ' . $key . ' not found', 1006);
    31. }
    Сделал, чтобы токен сохранялся в БД:
    PHP:
    1. public function storeToken($key, $accessToken) {
    2.     mysql_connect(self::DB_HOST, self::DB_USER, self::DB_PASSWORD) or die (mysql_error());
    3.     mysql_select_db(self::DB_NAME) or die (mysql_error());
    4.     mysql_query("SET NAMES 'utf8'");
    5.  
    6.     $aes = new Crypt_AES();
    7.     $aes->setKey(self::TOKEN_STORAGE_SECRET);
    8.     $encryptedToken = base64_encode($aes->encrypt($accessToken));
    9.  
    10.     mysql_query("INSERT INTO `ym` (`uid`, `token`) VALUES ('$key', '$encryptedToken')") or die (mysql_error());
    11.     mysql_close();
    12. }
    13.  
    14. public function restoreToken($key) {
    15.     mysql_connect(self::DB_HOST, self::DB_USER, self::DB_PASSWORD) or die (mysql_error());
    16.     mysql_select_db(self::DB_NAME) or die (mysql_error());
    17.     mysql_query("SET NAMES 'utf8'");
    18.  
    19.     $result = mysql_query("SELECT * FROM `ym` WHERE `uid` = '".$key."'") or die (mysql_error());
    20.     $row = mysql_fetch_array($result);
    21.     $token = $row['token'];
    22.     mysql_close();
    23.  
    24.     $aes = new Crypt_AES();
    25.     $aes->setKey(self::TOKEN_STORAGE_SECRET);
    26.     $decryptedToken = $aes->decrypt(base64_decode($token));
    27.     return $decryptedToken;
    28. }
    Токен в базу сохраняется методом storeToken, извлекается через restoreToken, вот только вернуть $decryptedToken не получается. Может быть я неправильно его шифрую в storeToken? Или неправильно расшифровываю в restoreToken?[/php]