Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];

Вниз

Как можно шифровать текст в Memo ListBox RichEdit перед сохранением на диск. А при чтении расшифровывать. Чтоб никто не читал его. Желательно чтобы было быстро и просто.   Найти похожие ветки 

 
дикое Кенгуру   (2002-02-27 08:38) [0]

Как можно шифровать текст в Memo ListBox RichEdit перед сохранением на диск. А при чтении расшифровывать. Чтоб никто не читал его. Желательно чтобы было быстро и просто.


 
Reindeer Moss Eater   (2002-02-27 08:45) [1]

Так чтобы никто не читал - нельзя, запрещено законом.
Так чтобы не читала твоя сестра - можно быстро и просто (A XOR B)


 
Poirot   (2002-02-27 09:09) [2]

Чтение понятие относительное...
(A xor B) - прочтитать можно... но поймёте-ли
ТОлько маханькое уточнение... при xor желательно писать не в текстовый файл, а в байтовый... а то хрень может с символами произойти... тогда и вы сами них... не прочитаетье


 
Pete   (2002-02-27 09:09) [3]

Можно и так:
a:array [0..255] of integer; //заполняешь под RND от 0..255
b:array [0..255] of integer;

только от 0 до 32 a[i]:=i;
for i:=33 to 255 do begin
c:=a[i];
b[c]:=i;
end;

берешь значение символа и заменяешь его из массива а
обратно заменяешь из массива b


 
McSimm   (2002-02-27 10:26) [4]

>Reindeer Moss Eater (27.02.02 08:45)
Можно подробнее про закон?

>дикое Кенгуру (27.02.02 08:38)
Быстро и просто текст можно шифровать функциями RX-Lib: XorEncode (обратно - XorDecode). На выходе - текст, в качестве ключа - строка (а не символ).


 
Reindeer Moss Eater   (2002-02-27 12:46) [5]

>McSimm
Вся деятельность по разработке средств стойкого крипто ("чтобы никто не читал") подлежит строгому лицензированию со стороны Государства.


 
McSimm   (2002-02-27 13:01) [6]

>Reindeer Moss Eater (27.02.02 12:46)

Это точно? Или по сведениям ОБС?
Нельзя ли сослаться на норму или статью?


 
Shirson   (2002-02-27 13:47) [7]

Не то что-бы обс, а скорее звон не там.
Лицензировать нужно продукт (именно криптования), который выбрасываешь на рынок. Он должен удовлетворять кучке требований и законов. А то что я в своей программе наворочу криптовалку - постелить я хотел на закон, если я не собираюсь продавать свою прогу под грифом "Супа-Шмупа-Хупа-Криптавальник отвечающий требованиям С2 и всего остального".

А при длине ключа в килобайт ломануть даже обычный XOR - весьма проблемно. Особенно если понятия не имеешь о том, какова же именно длина ключа. А при длине ключа >= длине сообщения эта затея вообще превращается в рулетку.


 
Reindeer Moss Eater   (2002-02-27 13:58) [8]

Чтобы твой будущий продукт лицензировали, надо сначала получить лицензию на ЭТОТ вид деятельности.


 
KvORubin   (2002-02-27 17:15) [9]

Ребята Ребята, вы о какой-то (извените за выражение)фигне болтаете,, совсем откланились от темы, мне тоже интересно бы знать (подробней) как зашифровать текст.

Если хотите, то пишите мне на KvORubin@Mail.ru я написал прошку, которая очень сложно шифрует текст, но тем не менее я уверен, что зашифрованный и посланный мною Вам текст Вы ФИГ расшифруете, а кому всё-же удастся, тому даю исходник.

А вот текст в котором что-то написанно, прочитайте:

±‘КѓЗ“’Р’ХЋР‹ВВН
Ф†С†ТќђК™КБОЋЗБПЃмXр4D
Pб/K
W
КБбБФ†Г†…ВЌ‰У–Р…П‰МБЯ“Р„РБډ֑“БВП


 
panov   (2002-02-27 17:55) [10]

>дикое Кенгуру (27.02.02 08:38)
Поищи компоненты на Torry.
Можешь взять компонент на www.crypto-central.com


 
Shirson   (2002-02-27 17:59) [11]

>KvORubin

А смысл? Я же сказал, обычный XOR шифрует сообщения, тем более такой длины, так, что расшифровке не поддается впринципе.


 
Poirot   (2002-02-27 20:16) [12]


> Shirson ©

Что то я вас не понимаю... Что значит не поддаётся впринципе...
По моему скромномку мнению - XOR - самая ламерская защита... так сказать на бабушку из соседней избушки, которая только о грамофоне и знает...
А в методы шифрования без каких-либо умных знаний не верю...
Самое что ненаесть простое и дельное это в крайнем случае CRC32 или используя компоненты для Делфей - PGP


 
дикое Кенгуру   (2002-02-28 04:52) [13]

McSimm
Точно ! Очень полезная вещь оказалась.

включаю в проэкт файл StrUtils.pas
записываю StrUtils в uses.
и

procedure TForm1.Button1Click(Sender: TObject);
begin //Шифрую словом "KeyString"
Memo1.Text := XorEncode ( "KeyString" , Memo1.Text );
end;

procedure TForm1.Button2Click(Sender: TObject);
begin //Расшифрую словом "KeyString"
Memo1.Text := XorDecode ( "KeyString" , Memo1.Text );
end;

-------------
Оказалось что в StrUtils ещё куча полезных функций. Какие открытия я для себя делаю !


 
дикое Кенгуру   (2002-02-28 05:01) [14]

Poirot

xor можно делать не только одним символом.
из Rx :

function XorEncode(const Key, Source: string): string;
var
I: Integer;
C: Byte;
begin
Result := "";
for I := 1 to Length(Source) do begin
if Length(Key) > 0 then
C := Byte(Key[1 + ((I - 1) mod Length(Key))]) xor Byte(Source[I])
else
C := Byte(Source[I]);
Result := Result + AnsiLowerCase(IntToHex(C, 2));
end;
end;

function XorDecode(const Key, Source: string): string;
var
I: Integer;
C: Char;
begin
Result := "";
for I := 0 to Length(Source) div 2 - 1 do begin
C := Chr(StrToIntDef("$" + Copy(Source, (I * 2) + 1, 2), Ord(" ")));
if Length(Key) > 0 then
C := Chr(Byte(Key[1 + (I mod Length(Key))]) xor Byte(C));
Result := Result + C;
end;
end;


 
Poirot   (2002-02-28 07:36) [15]

> дикое Кенгуру
У важаемый Вы сами разницу уловите или вам пояснить....
Что значит не одним символом.... в код посмотрите... А сложность взлома не определена не XOR а тем что у неё по оби стороны... А как я понял выше говорилось о A XOR B, где A B -простые значения -const...А у вас функции - отличать надо...
Для вас помоему разницы между
A + B и A mod C^8 + A mod 2^32 нет - т.е. тут шифруется плюсом.... ууууаааууу
Хотя стойкость первого на несколько порядков ниже....
И тем более в коде работа идёт именно по байтого и никак не более
Так-что ваше заявления является ламерски...
И ключ вам надо в вашей голове хранить - лажа
Посеять его как нефига делать... то же шифровать надо... но чем тем же - опять пароль запоминай... у попа была СоБаКа он её...


 
Shirson   (2002-02-28 08:06) [16]

>Poirot "Что то я вас не понимаю... Что значит не поддаётся впринципе...
По моему скромномку мнению - XOR - самая ламерская защита... так сказать на бабушку из соседней избушки, которая только о грамофоне и знает...
"

:)
Имея ключ шифрования равный или больший по длине самому сообщению, XOR выдаст шифрованный текс без каких-либо закономерностей. Т.е. ты будешь знать только длину сообщения. И декрипт будет сводиться к простому перебору всех возможных комбинаций символов, причем без возможности ОДНОЗНАЧНОЙ раскодировки.
Если ты не "бабушка из соседней избушки, которая только о грамофоне и знает", могу прислать тебе файлу скажем кило на 10 зашифрованную XOR :) Возьмешься за декрипт? ;) Защита ведь ламерская, всего 4*10^1022 вариантов ;))))))))
И можешь неверить в простоту сколько угодно, но старина Оккам был прав :)

Насчет промышленной криптограйии. XOR тут неподходит по нескольким причинам.
Для него отсутствует понятие открытый/закрытый ключ. Например для нашего банка это неприемлемо.
Криптовалка является и декриптовалкой. Плюс в простоте выливается в минус при использовании. Имея криптовальщик и ключ сообщение дешифруется на ура. В системе с открытым ключем - шишь.
Длина криптованого и декриптованого сообщения равны - не то что-бы гиганский минус, но неочень нехорошо.
Вот, в общих чертях.
С математической точки зрения XOR если не идеален, то очень хорош. С практической точки зрения вклинивается много факторов, например человеческий, которые мешают использовать XOR в голом виде. А для внутрипрограммном кодировании - да лучше и ненужно.


 
Poirot   (2002-02-28 09:10) [17]


> Shirson ©

Ключ больше или равен... Хотите сказать что но сообщение в 10 кило у ВАС ключ на что-то большее... Да? Это невыгодно... ВАМ и ключ предётся в укромном месте держать... или у ВАС хватит памяти на точное запоминание 10*1024 символов... Дерзайте...
Во-вторых я говорил в том числе и о несоответствии сказанного и написанного... вы с этим не согласны... т.е. он использует чистый XOR...
За декрипт????? Как говорит наш препод по методам оптимизации - "За принцип что-то делают только идиоты" Я теоретик, а не практик... а то зачем мне к словам придераться...


 
Shirson   (2002-02-28 11:04) [18]

>Poirot
Выгодность длины ключа определяет задача. И скажите, при каких условиях ключ нужно хранить не в укромном месте? В мозгах что-ли? Гхм... вот это уже дилетанство, если честно.
Сказанного и написанного кем и где? Я, если честно, неуловил к чему это сказано.
"За декрипт" что? Пояснее сформулируйте к чему это.


 
Reindeer Moss Eater   (2002-02-28 11:16) [19]

Ребята, XOR на ключе длиной равной длине сообщения (код Г.Вернама) - абсолютно невскрываемый шифр.
Это значит, что вот такой криптотекст: <hdsjghldjghdljghsd>
на одном ключе раскриптуется как "еду в на север", а на другом как "еду на юг"
И нет математических способов определить какой вариант более вероятен.
Другое дело, что пользоваться таким шифром на практике очень трудно.


 
Poirot   (2002-02-28 12:10) [20]

> Shirson
> Сказанного и написанного кем и где? Я, если честно, неуловил
> к чему это сказано.

Поздравляю!!! Наезд на меня - а причину забыли??? Прикольно
См. дикое Кенгуру

> Выгодность длины ключа определяет задача.

А я про что-то другое говорил???

Ваши слова:

> Имея ключ шифрования равный или больший по длине самому
> сообщению, XOR выдаст шифрованный текс без каких-либо закономерностей.

и далее

> Если ты не "бабушка из соседней избушки, которая только
> о грамофоне и знает", могу прислать тебе файлу скажем кило
> на 10 зашифрованную XOR :) Возьмешься за декрипт? ;) Защита
> ведь ламерская, всего 4*10^1022 вариантов ;))))))))

Логично предположить -> как и что вы шифровать собрались!!!


> И скажите, при каких условиях ключ нужно хранить не в укромном
> месте? В мозгах что-ли?

Так я вас совсем не понимаю... Может мне моё образование мешает, но вроде бы я всё до сего места понимал... Вы моё сообщение прочитали перед критикой или просто так - в первых строках моего письма, уважаемая Екатерина Матвеевна... А?

И вообще - я пытаюсь выяснить прелести и недостатки, т.к. это моя будущая специальность... В споре рождается истина (кто-то говорил)...


 
Shirson   (2002-02-28 12:50) [21]

>Poirot

Так, давайте не будем выяснять кто на кого и как посмотрел и вернемся к: "И вообще - я пытаюсь выяснить прелести и недостатки, т.к. это моя будущая специальность... В споре рождается истина (кто-то говорил)..."
(Чесно говоря, лекции по криптографии не фходили в мои планы на сегодня :))

Итак, имеем XOR. Как я уже говорил и как верно заметил Reindeer Moss Eater, сообщение зашифрованное с ключем, длинною, равной длине сообщения, не поддается вскрытию впринципе. Если ключ сформирован генератором случаных чисел с равномерным распределением (принимаем что период генератора >> длины ключа), на выходе мы получаем набор случайных чисел с равномерным распределением. Частотный анализ, как врочем и любой другой тут совершенно бессильны. Даже элементарный перебор не дает возможности вскрытия, из-за неоднозначности трактовки результатов (тот же пример Reindeer Moss Eater)
То что вас, Poirot, возмутило (или удивило?) что длина ключа равна длине сообщения - для меня загадка. Практика современной криптозащиты использует этот метод на всю катушку. Если же использовать однобитный ключ, или ключ, длина которого << длины сообщения, смысла в таком кодировании ровно 0 и упоминать о нем я просто не видел смысла.

Из вышесказанного встает вопрос, если XOR такой замечательный, то почему его не используют в пром.криптографии?
Есть несколько минусов:
Первый - реверсивность кодера. Если кодеру скормить криптованный текст, при наличии ключа получим декриптованное сообщение. Это неприемлемо.
Второй - один ключ. Т.е. нет понятий открытого/закрытого ключа.
Наглядный пример.
Некто А обладает открытым ключем и посылает сообщение к Б.
Открытый ключ это русско-английский словарь. С его помощью русское сообщение переводится на английский и по незащищенному каналу отсылается к Б.
Сколько бы человек не приняло это сообщение и сколько бы из них не имело русско-английского словаря, дешифровать сообщение они не смогут в разумные сроки. (я у трирую, главное общий смысл)
Однако Б имеет закрытый ключ: англо-русский словарь. С его помощью он дешифрует сообщение А в первоночальный вид.
Такая система не ломается нахрапом, даже если у злоумышленника есть сообщение, кодировщик и ключ, с которым это сообщение было зашифровано.

Если принять то, что нужно дикому Кенгуру, можно решить задачу так:
На первом этапе вставляем в дисковод дискетку и формируем на ней байтовый файл из генератора случайных чисел. Длина файла пусть 1024 кБ (не жалко :) )
На втором этапе, сформированным ключем кодируем текст по методу XOR, необходимый для шифровки и сбрасываем его на винт.
На третьем вынимаем дискетку и прячем запазуху.
Теперь мы можем быть совершенно уверены, что если злоумышленник не получит дискетки, ему ни вжисть не прочитать, что мы записали.

Обратная операция проста - считываем с винта криптованный файл, с дискеты грузим ключ и им, все тем же XORом, декодируем текст.

Я надеюсь, Poirot, между нами нет больше недопонимай? Или есть? :) Тогда пишите.


 
Kettle of delphi   (2002-02-28 13:13) [22]

У меня вопрос к Shirson:
А какой смысл описан в абзаце "Если принять то, что нужно ..." кроме того, что злоумышленнику требуется уже 2 цели поймать? Куда надежнее не дискетку с файлом ключа в карман положить, а само сообщение записать на дискетку и положить его в карман :)
Ведь второй раз ленту однократногоиспользования не применяют! )))


 
Shirson   (2002-02-28 13:30) [23]

>Kettle of delphi

Может случиться, что забарать сообщение нет возможности. Разве что зип использовать или CDRW :)
Может попасться маньяк, который решит по ключу FAT перелопачивать. Перелопатил, забрал дискетку и весь винт, считай, зашифрован :) Пришел, загрузился с дискетки, разлопатил FAT обратно - работай :)
Я просто привел общий случай, а частности на то и частности.


 
Kettle of delphi   (2002-02-28 13:42) [24]

Дело в том, что я никак не могу частность придумать от такого общего случая :)
Ваши частности:
1. Данные на CD - милое дело! Так и делают, кстати. Только указанный алгорит не применяется при таком подходе! Обычно - ПЖП или БестКрипт... :)
2. Фат по ключу? Ерунда! Фат не несет в себе информацию, находящуюся в файлах! Это все равно, что сделать бронированную дверь метровой толщины и повесить ее на простеньких петельках, которые еле-еле держат ее вес! )))


 
Shirson   (2002-02-28 14:32) [25]

Да, не несет. Он несет информацию о том, какой кусок файла где расположен. Без этого будет очень милый компот :)


 
Kettle of delphi   (2002-02-28 15:34) [26]

Ясно. Если делать компот, то да, этот способ можно применить! )))


 
Pete   (2002-02-28 16:17) [27]

Н-да... а человек просил быстро и просто :)))


 
Aleksandr   (2002-02-28 16:33) [28]

Уважаемые коллеги!
Я на практике столкнулся с необходимостью шифрации файла данных - в нашей системе используются "вручную" собранные данные для расчетов, а разные товарищи в инете их тут же "подбирают" и открывают свои страницы, где можно проводить эти расчеты, так как ранее вся инфа хранилась просто в таблице парадокса. Механизм, который я использовал, выглядит так:
Сами данные - TList объектов, состоящих из ID1, ID2, N1, NameRus, NameInt, T1 (условно).
Каждый раз, когда данные обновляются (добавляются), на сервере генерируется новый файл, создающий случайное число (от 3 до 6) случайных криптовых цифр. Соответственно, каждый символ данных складывается с криптовой цифрой. Это стандартно (принцип того же XOR). А суть в том, что данные в файл пишутся нелинейно - во-первых, случайный порядок итемов (в программе они всегда отсортируются), а во-вторых, при их чтении делается поиск криптов в нескольких офсетах от начала файла... И с тех пор никто из конкурентов обновленную информацию не получает...


 
Shirson   (2002-03-01 09:13) [29]

>Pete

Куда еще быстрее и проще чем XOR? :)


 
22606   (2002-03-01 17:34) [30]

Во всем написанном поддерживаю Shirson ©, тем более что дикое Кенгуру удовлетворенный результатом уже отвалил, а попытки Poirot © и Ko поставить под сомнение целесообразность XOR в данной ситуации выглядят бравированием на пустом месте и как раз и напоминают попытки навесить бронированную дверь на сарай, в котором кроме ржавой лопаты никто ничего хранить не собирается.


 
Poirot   (2002-03-01 19:12) [31]


> Shirson ©
> Я надеюсь, Poirot, между нами нет больше недопонимай? Или
> есть? :) Тогда пишите

Всё OK...
Вот только проблемка с генератором возникает... Где достать генератор с периодом хотябы в рекомендованый 1Mb... не кубики же бросать, хотя при этом мы и получим 36^n вариантов последовательности значений но блин, задолбаешься...


 
Poirot   (2002-03-01 19:18) [32]


> 22606 ©

Может повторюсЬ, но принимать какие либо вещи как есть, то и до краха человечества добраться будет легче... А насчёт ЛОПАТЫ вы неправы - у кого акромя лопаты и нет нечего, то как его можно осуждать за попытку повесить дверь...
В свете сабжа поднилась более обширная тема защиты инфы, и что охранять тут не имеет никакого значения...


 
22606   (2002-03-01 19:26) [33]

А почему именно 1 MB ?
И зачем именно генерировать ?
Бери любой текст (хоть Толстого) и накладывай.
Тем более дикое Кенгуру не указал размер шифруемого текста.
Может он пароли длиной 10 байт шифрует в базе ?
Да и перебор комбинаций 256^10 (при длине шифруемого текста и соответственно ключа - 10 байт) займет немало времени, тем более, что функция не дает однозначного ответа правильно или неправильно расшифрован текст. Так что не передергивайте... А если это попытка подобрать пароль к серверу, который отвечает на попытку подконектиться только через 1 секунду. Да Вы только пароль из 1 байта будете подбирать 4 минуты. А Вы говорите Мегабайт...


 
Poirot   (2002-03-01 20:26) [34]

>> 22606

Я говорил о совете Shirson ©, который был указан выше... 1024кб key-file... А не для вас!!! Мне сам генератор интересен а не сообщение... я просто хочу посмотреть, каким образом можно сгенирировать такое сообщение...
А Толстого - логично, но генератором интересней


 
дикое Кенгуру   (2002-03-02 05:55) [35]

22606

> Во всем написанном поддерживаю Shirson ©, тем более что
> дикое Кенгуру удовлетворенный результатом уже отвалил

Я ещё не отвалил. Просто отвлёкся немного.
Насчёт лопаты - весело )

Poirot дикое Кенгуру

> У важаемый Вы сами разницу уловите или вам пояснить....


Поясните мне примером.
Давайте эксперимент поставим, чтобы проверить теорию практикой.

Вот я зашифровал текст приведённой выше функцией. Получил строчку :
201bcc01c508161005001e0209040608c0c0cd0411190e001d001dd30105cc0fc01d4319cc2dfa2c17d31e00090c001d100502cd1ec01d11091706080ce1f1c92ad21e0609d301001dc0d1031b1a58d2d0dfcefee6310300d104090ec001d02d09021b001d12cd170ecb2ec215170919c2ede621c5cc370ece2dfa

Шифруется/Расшифровывается он строкой которая во много раз короче исходного текста. Если вы умеете расшифровывать, то расшифруйте. Тогда будет о чём поговорить. А пока не о чем. Пустые слова.



 
дикое Кенгуру   (2002-03-02 06:33) [36]

Кстати может у кого ещё есть мысли по дешифровке ?

Xor с одним байтом можно угадать сделав xor со всеми 256 вариантами и просмотре визуально результат.
Если же xor хотя бы с двумя байтами то визуально просмотреть становится проблемотично. 65536 вариантов.


 
Shirson   (2002-03-02 12:27) [37]

>Poirot ©
"Всё OK...
Вот только проблемка с генератором возникает... Где достать генератор с периодом хотябы в рекомендованый 1Mb... не кубики же бросать, хотя при этом мы и получим 36^n вариантов последовательности значений но блин, задолбаешься..."


Хм... вы считаете, что Дельфовый генератор имеет период менее 1048576? Мне казалось у него он на несколько порядков больше.
Если же есть сильная потребность, тут, на сайте, в разделе "новости VCL" есть "Best Random Generator v.1.0". Период 2^144 (2*10^43). Думаю хватит :)



 
Shirson   (2002-03-02 12:33) [38]

Да, я был прав. Вот с Борланда:


Description:

Q. What is the formula used by the random number generator in
Turbo Pascal?
A. The random number generator in Turbo Pascal uses 32-bit
arithmetic. It maintains a 32-bit "seed", which is treated as
an unsigned integer. Each call to Random changes the seed by
the formula seed:=multiplier * seed + 1 mod 4294967296 Turbo
Pascal uses the multiplier, 134775813. The modulus,
4294967296, is 2 to the power 32. The multiplier was chosen
carefully for its nice randomness properties. The seed will
take on every 32-bit integer before repeating.



Период получается 4294967296. Вполне, вполне :)


 
Poirot   (2002-03-02 20:29) [39]


> Shirson ©

Писаному верить:)... А как он работает... Вы случаем не знаете... надеюсь не только на таймере... как я (Типа умны) читал книгу господина Д. Кнута - генератор основаный на системном времени - "хреноват"... У вас Другое мнение или я что-то не понял


> дикое Кенгуру

Во-первых, оно мне надо... Если кАму-то это надо, то он это сделает... В принципе это вам не ГОСТ... чтоб над этим голову ломать...
Во-вторых, Дешифровать Ради принципа - я ничего не делаю, ради принципа т.к считаю это не важным поводом... можно за веру, отечество, родителей, но не за принцип...
В-третьих, что это значит -


> Если вы умеете расшифровывать, то расшифруйте.

Я теоретик, и см п.1


 
дикое Кенгуру   (2002-03-03 01:19) [40]


Poirot
А если не надо, то и нечего воздух сотрясать. Значит всё что вы тут понаписали, это всё пустозвонство ничем не подкреплённое. Трепотня попросту говоря.

За свои слова не отвечаете.





Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.006 c
4-57558
BWG
2002-01-14 19:00
2002.03.18
E-Mail & Winsock.


1-57467
SergeyVP
2002-03-04 07:04
2002.03.18
Вращаем TBitmap.


1-57384
Тот самый Пацан
2002-02-28 23:57
2002.03.18
Как вывести на обратный план Memo, a на передний - Image...


1-57353
Gayrus
2002-03-04 16:57
2002.03.18
To


1-57387
Nikola
2002-02-28 08:50
2002.03.18
Определить номер входящего звонка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский