Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с алгоритмом AES

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
MichaelPak
Отправлено: 24 Ноября, 2011 - 15:05:49
Post Id


Новичок


Покинул форум
Сообщений всего: 44
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Подключаю Яндекс.Деньги через библиотеку http://habrahabr[dot]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?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB