Как зашифровать / расшифровать FLV с помощью Flash - PullRequest
2 голосов
/ 15 октября 2011

Я работаю над приложением Windows (созданным в .NET), одной из функций которого является воспроизведение локальных FLV с использованием компонентов SWF.

Теперь мне нужно создать приложение шифрования, чтобы убедиться, что эти FLV не могут воспроизводиться свободно, только проигрыватель SWF будет знать, как расшифровать этот файл (используя ключ, полученный из приложения .NET).

Я думал о создании приложения Air для кодирования моих flvs (может быть, класса ByteArray?), Используя некоторый алгоритм для перетасовки / отмена перемешивания символов, основанный на ключевой строке.

Моя основная задача - как кодировать / декодировать файл с использованием Air / Flash. Я пытался несколько раз, просто пытаясь загрузить FLV, преобразовать в ByteArray, а затем сохранить новый FLV, но этот новый FLV не будет воспроизводиться. Открыв Notepad ++, я заметил, что в файле есть несколько символов перед заголовком FLV.

Кто-нибудь знает, как это сделать правильно? Спасибо!

Ответы [ 2 ]

3 голосов
/ 15 октября 2011

только SWF-плеер будет знать, как расшифровать этот файл.

Если кто-то имеет доступ к SWF, он может декомпилировать его и узнать, как расшифровать ваши FLV.

Лучшим способом было бы зашифровать их чем-то вроде AES, а затем получить ключ с сервера.

Если вы не беспокоитесь о том, что люди декомпилируют ваш SWF-файл, просто сделайте все, что приведет к тому, что медиаплееры не смогут его открыть.

Да, вы бы использовали ByteArray для изменения FLV..

Что касается дополнительных байтов, вам не следует «конвертировать» в ByteArray, он должен быть уже в том формате, когда вы его получите.Похоже, у вас как-то было в String, и вы использовали writeUTF, который записывает длину в начале.

2 голосов
/ 21 октября 2011

Вот пример того, чего я достиг благодаря своему опыту и поиску в Google. Работает отлично.

    public function Main():void 
    {           
        us.load(new URLRequest("file.ext"))
        us.addEventListener(Event.COMPLETE, onVideoLoaded);
    } 

    private function onVideoLoaded(e:Event):void
    {
        var bytes:ByteArray = new ByteArray();  
        us.readBytes(bytes, bytes.length, us.bytesAvailable);

        bytes = encrypt(bytes);         
        saveFile(bytes);
    }

    private function saveFile(bytes:ByteArray):void
    {           
        var fileStream:FileStream = new FileStream();
        fileStream.open(File.desktopDirectory.resolvePath("filename.ext"), FileMode.WRITE);
        fileStream.writeBytes(bytes, 0, bytes.length);
        fileStream.close();

        fileStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, onCompleteFile);
    }


    private function encrypt(bytes:ByteArray):ByteArray 
    {
        var i:int = bytes.length;
        while (i--)
        {
            bytes[i] += 128;
        }

        return bytes;
    }

Использование ROT128 для шифрования файла, дополнительная информация здесь .

...