AS3 - Простое кодирование / декодирование скремблирования текста? - PullRequest
1 голос
/ 12 ноября 2011

Я работаю над сохранением / загрузкой моей игры AS3.Я планирую позволить игроку сохранить свою игру на жестком диске из игры, запускаемой браузером.Я хочу зашифровать текст, который я сохраняю, чтобы человек не мог прочитать его, если он откроет файл как текст.

Каков хороший способ зашифровать текст перед сохранением, а затем расшифровать после открытия?

Я знаю, что в Java можно взять char и добавить или вычесть его, чтобы изменить char, что было чрезвычайно простым методом.Что можно сделать просто в ActionScript 3?

Имейте в виду, я ищу простой и легкий, а не безопасный.Все сайты криптографии, которые я проверил на предмет решения, являются более сложными, чем я могу понять на данный момент, и направлены на создание максимально безопасного шифрования, а не на простую интеграцию.

Ответы [ 6 ]

2 голосов
/ 16 апреля 2013

Это может быть немного оригинальной темы с помощью fileReference.save (), но я попал сюда в поисках этого. На самом деле это не может быть проще:

var file:FileReference=new FileReference();
file.save(byteArrayData,"name you want to suggest to the user");

Одна вещь, которую нужно посмотреть: Вы можете инициировать только внутри обработчика mouseEvent (CLICK). Таким образом, пользователь должен запросить запись. Если вы попытаетесь сделать это автоматически, он будет работать локально, но как только вы подключите его, он не будет работать! Кажется, это относительно новая плохо документированная функция безопасности. Так что, если у вас были проблемы с тем, чтобы это сработало в последнее время, возможно, это так.

Вот работающий онлайн пример, где вы можете сохранить PNG с помощью кнопки: http://www.snoep.at/misc/youtube/cloud_generator/

Чтобы это работало ВСЕ, вашему пользователю нужна довольно свежая версия flashplayer (я думаю, 10.1 и выше), поэтому, если она не работает, вы можете попробовать обновить.

2 голосов
/ 12 ноября 2011

Можно сделать что-то похожее на то, что вы делали в Java.

Попробуйте:

var offset:int = 10;
for (i = 0; i < string.length; i++) {

string[i] = string.charCodeAt(i) + offset;

}

Где string - текст, который вы хотите изменить, что это делаетполучает числовое значение Unicode символа в каждом индексе строки и изменяет его значение по смещению.

Для декодирования вы запускаете тот же код, но в обратном порядке:

for (i = 0; i < string.length; i++) {

string[i] = string.charCodeAt(i) - offset;

}
1 голос
/ 12 ноября 2011

Если вы действительно хотите это сделать, почему бы не использовать установленный криптографический шифр?

Получить здесь as3crypto http://code.google.com/p/as3crypto/downloads/detail?name=Crypto.zip&can=2&q=

Тогда вот как использовать RC4 (один из многих шифров, которые выможно использовать):

import com.hurlant.util.Hex;
import flash.utils.ByteArray;
import com.hurlant.crypto.prng.ARC4;

var key:ByteArray = Hex.toArray("SUPER SECRET PASSWORD THAT YOUR USER WILL FIND OUT IF HE DECOMPILES YOUR SWF ANYWAY");
var pt:ByteArray = Hex.toArray("THIS IS THE ACTUAL FILE YOU'RE ENCRYPTING OR DECRYPTING");
var rc4:ARC4 = new ARC4(key);
rc4.encrypt(pt);
var out : String = Hex.fromArray(pt);
// save out to file

// load loadedFile from file
pt = Hex.toArray(loadedFile);
rc4.init(key);
rc4.decrypt(pt);
out = Hex.fromArray(pt);
// parse out's information

Это может показаться немного излишним, но на самом деле его проще использовать, чем создавать свои собственные средства шифрования / дешифрования, и это проверялось и использовалось множество раз.

1 голос
/ 12 ноября 2011

rot13 было бы неплохо и просто для этого.Я уверен, что есть несколько учебных пособий по AS3 или библиотеки out там .Другим распространенным вариантом является base64 , также с существующими библиотеками .

1 голос
/ 12 ноября 2011

Почему бы просто не перевернуть текст? Это простой, но эффективный способ.

Другим способом было бы разбить текст на группы по 2 символа в каждой, повернуть их вспять и затем снова присоединить строку.

0 голосов
/ 12 ноября 2011

Я не знаю, как вы сохраняете игру, но если вы используете Локальные общие объекты , ваш текст сохраняется как двоичные данные (в то время как имена переменных остаются читаемыми человеком).

...