Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Base64 (PHP & AS3) (http://www.flasher.ru/forum/showthread.php?t=124642)

ekeeper 05.05.2009 17:00

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?
Заранее спасибо.

BlooDHounD 05.05.2009 17:15

UTF-8

ekeeper 05.05.2009 17:15

Нахожу код на других языках - хоть и работает, но все равно не совпадает с выводом php

Добавлено через 2 минуты
Цитата:

Сообщение от BlooDHounD (Сообщение 817708)
UTF-8

Да, я понял что где-то в этом направлении думать надо, но никак не пойму где нужно что поправить...

iNils 05.05.2009 17:18

Кодировки разные. Flash кодирует utf-8 строку, а php ansii

ekeeper 05.05.2009 17:24

Цитата:

Сообщение от iNils (Сообщение 817712)
Кодировки разные. Flash кодирует utf-8 строку, а php ansii

В лоб:
Код:

base64_encode(utf8_encode("ну чо как? работаешь а? алгоритмег"))
Не выходит. Видимо надо искать другой способ перекодировки в UTF8 из ansi

iNils 05.05.2009 17:28

В лоб делают по другому. Сохраняют php файл в кодировке utf-8.
А по "научному" так
Код:

<?
echo base64_encode(iconv ("windows-1251", "utf-8", "ну чо как? работаешь а? алгоритмег"));
?>


ekeeper 05.05.2009 18:19

Цитата:

Сообщение от iNils (Сообщение 817721)
В лоб делают по другому. Сохраняют 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);

Потом обработать данные, сгенерить ответ, зашифровать его и отправить обратно

iNils 05.05.2009 18:36

Не шифруйте. Это бесполезно. Можно легко декомпилить ваш swf и все узнать.

ekeeper 05.05.2009 19:11

Ну хорошо, хоть упаковываться будет в приличные буковки, проблем с кодировкой не будет :)

BlooDHounD 05.05.2009 19:15

не знаю чего Вы пытаетесь добиться, но явно не "упаковки". так как я пока что вижу увеличение размера относительно исходных данных.


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

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