Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.05.2009, 17:00
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 1  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
По умолчанию Base64 (PHP & AS3)

Нашел несколько вариантов классов Base64 для AS3:
http://www.dynamicflash.com/goodies/base64 и еще другой тут предлагаемый

Сначала обрадовался.
Потом случился облом -

Задача - в swf паковать строку в base64 - отправлять ее как параметр на php скрипт и там ее распаковывать.

Проблема:
PHP код:
Код:
base64_encode("ну чо как? работаешь а? алгоритмег")
результат:
Код:
7fMg9+4g6uDqPyDw4OHu8uDl+Pwg4D8g4Ovj7vDo8uzl4w==
AS3 код (используя этот класс http://www.dynamicflash.com/goodies/base64):
Код AS3:
Base64.encode("ну чо как? работаешь а? алгоритмег")
результат:
Код:
0L3RgyDRh9C+INC60LDQuj8g0YDQsNCx0L7RgtCw0LXRiNGMINCwPyDQsNC70LPQvtGA0LjRgtC80LXQsw==
Судя по всему php-ный результат в два раза короче.
Из-за разной длины полученных строк и из-за того что они не равны - пришедшая на php-скрипт строка декодируется с ошибками.

Искал в инете - ссылка только на этот класс везде. Остальные либо не работают, либо с кучей ошибок вываливаются.

Есть у кого-нибудь прямой адаптированный аналог PHPшных функций для Base64?
Заранее спасибо.

Старый 05.05.2009, 17:15
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 2  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
UTF-8

Старый 05.05.2009, 17:15
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 3  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Нахожу код на других языках - хоть и работает, но все равно не совпадает с выводом php

Добавлено через 2 минуты
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
UTF-8
Да, я понял что где-то в этом направлении думать надо, но никак не пойму где нужно что поправить...

Старый 05.05.2009, 17:18
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Кодировки разные. Flash кодирует utf-8 строку, а php ansii
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 05.05.2009, 17:24
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 5  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Цитата:
Сообщение от iNils Посмотреть сообщение
Кодировки разные. Flash кодирует utf-8 строку, а php ansii
В лоб:
Код:
base64_encode(utf8_encode("ну чо как? работаешь а? алгоритмег"))
Не выходит. Видимо надо искать другой способ перекодировки в UTF8 из ansi

Старый 05.05.2009, 17:28
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
В лоб делают по другому. Сохраняют php файл в кодировке utf-8.
А по "научному" так
Код:
<?
echo base64_encode(iconv ("windows-1251", "utf-8", "ну чо как? работаешь а? алгоритмег"));
?>
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 05.05.2009, 18:19
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 7  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Цитата:
Сообщение от iNils Посмотреть сообщение
В лоб делают по другому. Сохраняют php файл в кодировке utf-8.
А по "научному" так
Код:
<?
echo base64_encode(iconv ("windows-1251", "utf-8", "ну чо как? работаешь а? алгоритмег"));
?>
СПАСИБО, заработало. Но все же на этом все не закончилось.

Я перед отправлением на скрипт еще шифрую по ключу с помощью xor

Код AS3:
var KEY:String = MD5.encrypt("password");
 
        function xor(source:String, key:String):String {
            var result:String = new String();
            for(var i:Number = 0; i < source.length; i++) {
                if(i > (key.length - 1)) {
                    key += key;
                }
                result += String.fromCharCode(source.charCodeAt(i) ^ key.charCodeAt(i));
            }
            return result;
        }
 
trace(Base64.encode(xor("ну чо как? работаешь а? алгоритмег", KEY)));
Результат:
Код:
0IjQpRTQo9GdQ9CJ0ZLQj15B0bfQhtCE0ZrRtNCB0ZHRsNG/EtCHW0XRktCD0IvQjNCj0Z7Ru9CF0IDRlQ==
PHP:
Код:
<?
$key = md5("password");
$str = iconv("windows-1251", "utf-8", "ну чо как? работаешь а? алгоритмег");

        function axor($source, $key) {
            $result = "";
            for($i = 0; $i < strlen($source); $i++) {
                if($i > (strlen($key) - 1)) {
                    $key .= $key;
                }
                $result .= chr(ord($source[$i]) ^ ord($key[$i]));
            }
            return $result;
        }

echo base64_encode(axor($str, $key));
?>
Результат:
Код:
5dvl50OytLKLQbGN5oW0jA5E6bPih7TUsobpsLPW6Yzk7uXoQ7ODXRWx0eeN5dfmj7W444rm5rXe6I3i0A==
Функция axor это просто переписанная функция xor из as3-варианта.
Видимо что-то опять про кодировки не учел... Я никак в этом разобраться не могу

Добавлено через 6 минут
Целью является принять в php строку

0IjQpRTQo9GdQ9CJ0ZLQj15B0bfQhtCE0ZrRtNCB0ZHRsNG/EtCHW0XRktCD0IvQjNCj0Z7Ru9CF0IDRlQ==

и из нее получить нормальную строку вот так:

Код:
$source = "0IjQpRTQo9GdQ9CJ0ZLQj15B0bfQhtCE0ZrRtNCB0ZHRsNG/EtCHW0XRktCD0IvQjNCj0Z7Ru9CF0IDRlQ==";
echo axor(base64_decode($source), $key);
Потом обработать данные, сгенерить ответ, зашифровать его и отправить обратно

Старый 05.05.2009, 18:36
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Не шифруйте. Это бесполезно. Можно легко декомпилить ваш swf и все узнать.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 23.07.2009, 14:06
enginer вне форума Посмотреть профиль Отправить личное сообщение для enginer Найти все сообщения от enginer
  № 9  
Ответить с цитированием
enginer

Регистрация: Jul 2009
Сообщений: 1
По поводу кодирования и раскодирования русских символов… Проблему решил посредством изменения порядка кодирования:

http://enginer.googlecode.com/svn/trunk/src/ua/org/enginer/utils/Cryptor.as
Код AS3:
        private static function xor(source:String, key:String=""):String {
            if (!key) return source;
 
            var keyLength:int = key.length;
            var result:String = "";
 
            for(var i:Number = 0; i < source.length; i++) 
                result += String.fromCharCode(source.charCodeAt(i) ^ key.charCodeAt(i % keyLength));
 
            return result;
        }
 
        public static function encode(source:String, key:String=""):String {
            return xor(Base64.encode(source), key);
        }
 
        public static function decode(source:String, key:String=""):String {
          	return Base64.decode(xor(source, key));
        }

http://enginer.googlecode.com/svn/trunk/src/ua/org/enginer/utils/Cryptor.php
PHP код:
    private static function axor($source/*:String*/$key/*:String*/)/*:String*/ {
        if (!
$key) return $source;
        
$result "";
        
$keyLength strlen($key);
        for(
$i 0$i strlen($source); $i++) {
            
$result .= chr(ord($source[$i]) ^ ord($key[$i $keyLength]));
        }
        return 
$result;
    }
    
    public static function 
encode($source/*:String*/$key/*:String*/="")/*:String*/ {
        return 
Cryptor::axor(base64_encode($source), $key);
    }
    
    public static function 
decode($source/*:String*/$key/*:String*/="")/*:String*/ {
        return 
base64_decode(Cryptor::axor($source$key));
    } 


Последний раз редактировалось enginer; 23.07.2009 в 14:11.
Старый 05.05.2009, 19:11
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 10  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Ну хорошо, хоть упаковываться будет в приличные буковки, проблем с кодировкой не будет

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:11.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.