Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Как отобразить картинку из зашифрованого файла


Автор: ZVano 27.1.2011, 13:45
Описание задачи:
Предположим, есть сайты Site0, Site1, Site2.
Site0 - главный сайт. Содержит только текст, скрипты и т.п. , но не содержит картинок.
Site1, Site2 - вспомогательные сайты. Предназначены для хранения картинок в раздробленом виде.
>>Site1 содержит четные байты картинок
>>Site2 содержит нечетные байты картинок

1. Пользователь заходит на Site0 и загружает страницу.
Страница содержит места, в которые нужно вставить картинки.
2. После загрузки страници срабатывает JavaScript, который вычисляет какие картинки нужны странице.
2.1 Скрипт загружает файл с четными байтами с Site1, с нечетными с Site2
2.2 Скрипт собирает картинку
2.3 Скрипт отображает картинку

Вопросы:
1. Возможен ли такой трюк впринципе
2. Если возможен, то как это можно сделать (хотя бы общее направление).

PS: Изучаю JavaScript всего лиш 2 дня, так что просьба не бить ногами. Даже не знаю как правильно вопрос сформулировать  smile 

Автор: bars80080 27.1.2011, 15:08
ну, это тотальная бессмысленная работа. если человеку потребуются картинки, то он тупо посмотрит, как это делает javascript и скопирует метод. всё.

сделать такое можно. есть возможность показывать картинки через загрузку строки данных. 
то ли 
<img src="==base64encodeinfo:ruqnruq023r1yrqweyrqyr..." />
то ли
#pic1 { url(==base64encodeinfo:ruqnruq023r1yrqweyrqyr...); }

не знаю как правильно пишутся эти коды, ибо не находил им ещё применения.
остаётся соответственно, принять две половинчатые строки и скомпоновать их в одну строку.

но опять же говорю вам: любой механизм, реализованный на js, пользователь всегда сможет повторить без вашего ведома просто потому, что весь механизм будет уже загружен на его ПК.

Автор: ZVano 27.1.2011, 15:20
bars80080, респект и уважуха, тнперь знаю куда рыть. Я бы никогда не додумался.
Если не ошибаюсь, эта лабуда называется base64encoding и предназначена для перегонки бинарных данных в шестнадцатиричную форму.
Например, при формировании письма почтовой программой. Картинки кодируются и включаются в тело письма.

По поводу бесполезности - не скажи.
Задача убрать потенциально опасный контент с центрального сайта (допустим, форума или википедии) куда-то еще (в дальние дали).
Совсем не обязательно шифрование.
А если оно нужно, то можно выполнить эту операцию на основе ключа из coockies.
Типа, заплатил бабосы - получил в куки ключ, который действует месяц и используется для расшифровки файлов.
Месяц истек - закодированые файлы удаляются, шифруются новые.

Автор: ZVano 27.1.2011, 16:18
Вот ответ (взят отсюда: http://en.wikipedia.org/wiki/Data_URI_scheme)
Код

<img src="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0
vr4MkhoXe0rZigAAAABJRU5ErkJggg==" alt="Red dot" />


Думаю, тема закрыта. Другие способы врядли есть.

Автор: ZVano 27.1.2011, 17:15
Рабочий пример №1.

Код

<html>
<body>
  <div id="txt1"></div>
  <br/>
  <div>
    <form>
      <img id=img1 name=img1 src="blank.JPG" />
      <input type=button name=bn1 onClick="alert('bn1onClick::Beg'); form.img1.src='data:image/png;base64,' + vImg1Base64; alert('bn1onClick::End'); alert('newVal = ' + form.img1.src);"/>;
    </form>
  </div>
</body>
</html>

<script>
  encodedData = window.btoa('hasdj asdjhasdh  asd ');
  document.getElementById('txt1').innerHTML = encodedData;
  //alert(encodedData.length);
  
  vImg1Base64 = "";
  vImg1Base64 = vImg1Base64 + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP";
  vImg1Base64 = vImg1Base64 + "C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA";
  vImg1Base64 = vImg1Base64 + "AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J";
  vImg1Base64 = vImg1Base64 + "REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq";
  vImg1Base64 = vImg1Base64 + "ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0";
  vImg1Base64 = vImg1Base64 + "vr4MkhoXe0rZigAAAABJRU5ErkJggg==";
</script>


Рабочий пример №2 (приатачен). Любопытно получается  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)