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

Вниз

Как делаются пароли?   Найти похожие ветки 

 
Dr.Karter   (2003-01-13 11:25) [0]

Я хочу знать где можно - нужно хранить информацию пароля(чтобы юзер не знал)
чтобы потом сделать проверку.
Дайте пример паролевой программки.


 
Dr.Karter   (2003-01-13 11:25) [1]

Я надеюсь меня поняли.


 
RWolf   (2003-01-13 11:27) [2]

Сохраняй, где удобно, в зашифрованном виде.


 
vuk   (2003-01-13 11:42) [3]

Поступайте так, как делается в системах аутентификации в различных ОС - не храните их вообще. Вместо паролей можно хранить их хеш-коды и при проверке просто вычислять хеши по введенным данным и сравнивать с хранимыми значениями.


 
Novice   (2003-01-13 11:43) [4]

Вместо пароля удобно хранить хеш от пароля (напр., MD5) - не видно длину и расшифровать - только перебором, и прятать не надо.


 
smok_er   (2003-01-13 11:45) [5]

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

Если пароль сгенерированный, то подобрать врядли получится.


 
Dr.Karter   (2003-01-14 08:54) [6]

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


> Сохраняй, где удобно, в зашифрованном виде

Что значит в зашифрованном виде?
> Novice © (13.01.03 11:43)
> Вместо пароля удобно хранить хеш от пароля (напр., MD5)
> - не видно длину и расшифровать - только перебором, и прятать
> не надо.


И что такое хеш?


 
A2   (2003-01-14 09:19) [7]

Парень!
А сколько часов всего-то ты занимаешься программированием - и сразу за программу с паролями!!!
Разберись сперва с азами.


 
Сергей Зимин   (2003-01-14 09:29) [8]

Вот здесь реализация алгоритма MD5
http://www.fichtner.net/delphi/md5/
Немного упростив - Хеш это контрольная сумма
Хеш двух различных строк (хоть на 1 бит) различен.


 
Спрашивающий   (2003-01-14 09:42) [9]

Все зависит какой степени защита требуется, если от Чайника то вообще ничего прятать и шифровать не надо он порой не может запустить ну например Word. Если программа расчитана на широкий круг ничего не видимого и зашифрованного(100%) не сделаешь, "умельцы" все сломают,хотя я думаю что в данном случае шифровать и прятать надо, ну хотя бы для того чтобы усложнить взлом .


 
Rater2   (2003-01-14 10:02) [10]

ХЕШ хорош при работе с вводимыми паролями,
а для хранения паролей для посылки куда-то (например аутентификациа в инет).
Для шифровки паролей наиболее простой метод XOR & ротация битов
для бешеной шифровки можно конечно PGP попробовать но хранить то придется всё и приватный и публичный ключ, так что ....


 
Anatoly Podgoretsky   (2003-01-14 10:16) [11]

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


 
Chubais   (2003-01-14 10:27) [12]

ААААААААААААААААААА!!!!!!!!!!!!!!!


 
Сергей   (2003-01-14 11:57) [13]

Доктор Картер. Я смотрю здесь тебе много советчиеов нашлось, которые считают себя величайшими криптографами. Не будем их разубеждать, но скажем, что читать их писанину весьма смешно. Молодцы!
Вот тебе кратко что такое Хэш-Функция. Это такая функция, зная значение которой невозможно определить её аргумент. То есть, если известно f(x), то x - нельзя определить. Например, функция mod (остаток)!
1 mod 3 = 1
2 mod 3 = 2
3 mod 3 = 0
4 mod 3 = 1
5 mod 3 = 2
.......... и т.д. То есть зная что (х mod 3) = 2 , мы не можем определить х, так как он может быть = 2,5,... Вот это и есть простейшая ХэшФункция. В реальных программах/алгоритмах используется не число 3, о большие (>64бит) простые числа.
Тебе же советую сделать файл в этом же каталоге например UserPassword.pwd, и все пароли которые будут использоваться хранить там в отдельной строке, причем не сами пароли, брать от каждого символа пароля отдельно байт/символ высчитывать его (mod 97) и + 101010101010.
Потом когда юзер будет вводить пароль, ты с ним (паролем) провернёшь вышеуказанные вычисления и сравнишь с тем, что есть в файле!
Надеюсь - помог!


 
Reindeer Moss Eater   (2003-01-14 12:02) [14]

Сергей , не находишь, что способ твой ограниченно годен? Годится лишь для случаев, когда автор программы сам проверяет подлинность вводимого пароля.


 
mrcat   (2003-01-14 12:27) [15]

=)))))))


 
vuk   (2003-01-14 13:01) [16]

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


 
Reindeer Moss Eater   (2003-01-14 13:06) [17]

vuk, в 11:57 было сказано новое слово в криптографии. А мы не заметили :)))


 
Dr.Karter   (2003-01-14 15:32) [18]

А как насчет невидимого файла? Можно ли делать такие
Тебе Сергей СПАСИБО

A2 (14.01.03 09:19)

Я не знаю сколько ты за этим непростым делом, но что касается меня то за мной много программ, и единственный способ к познанию
учиться, что не когда не поздно!
За рекомендациями обращаться к Литвинову Илье Николаевичу по адресу: nsk_school_163@list.ru Меня зовут Денисов Игорь А.
или просто Dr.Karter! Милости Прошу!!!


 
Dr.Karter   (2003-01-14 15:34) [19]


> A2 (14.01.03 09:19)

А Если я чего не знаю, то я учусь, благодаря Мастера DELPHI-
Спасибо вам!


 
les   (2003-01-14 16:05) [20]

> Dr.Karter © (14.01.03 15:34
> А Если я чего не знаю, то я учусь

Молодец! Хочу подарить тебе ключ к любому познанию, держи:

RTFM, STFW.


 
Sha   (2003-01-14 22:47) [21]

2 Сергей (14.01.03 11:57)

:)


 
MXA   (2003-01-15 00:05) [22]

2 Сергей (14.01.03 11:57)

:(

и вообще
>...Это такая функция, зная значение которой невозможно определить её аргумент...
не правда

2 Dr.Karter © (14.01.03 15:32)
>А как насчет невидимого файла? Можно ли делать такие
на устройстве nul :)
и как бы ты хотел увидеть такой файл?
а чайник не увидит и файл с аттрибутом "скрытый"

по-моему стоит или придумать свой "оригинальный" алгоритм/способ
хранения паролей, стойкость которого и будет состоять в том,
что он не известен, или изучать (не по форумам) известные
теоретически стойкие алгоритмы.



 
vuk   (2003-01-15 01:24) [23]

to MXA
>не правда
Я бы сказал, это не вся правда, а точнее её часть. В принципе, хеширование - алгоритм отображения одного множества значений на другое, обычно меньшее. И поскольку второе множество значений меньше, то точно определить элемент первого множества не получится.


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

>или изучать (не по форумам) известные
>теоретически стойкие алгоритмы.
Вот это есть правильно! А вообще сочетание хранения хешей вместо паролей и шифрования даст хорошоший эффект.





 
mrcat   (2003-01-15 04:01) [24]

vuk © (15.01.03 01:24)
...
то точно определить элемент первого множества не получится.
...


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


 
anatolyk   (2003-01-15 10:07) [25]

Народ, а что если для защиты применить след. способ.
На машине юзера создается файл, зашифрованный с каким-то паролем, напр. номером дистрибутива + s/n винта (С)+ какие-либо действия с этими числами (или строками) и т.п. Этот файл создается отдельной программой при установке (лично я установки делаю сам, и программа-инсталятор всегда со мной. Бабки, все-таки.8)). Сам файл можно разместить, напр. в каталоге Windows (GetSystemDirectory) и дать ему имя, напр. device.sys

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

Для чайника вполне годится.


 
Reindeer Moss Eater   (2003-01-15 10:15) [26]

>anatolyk
А каково назначение такой защиты?


 
mrcat   (2003-01-15 10:18) [27]

anatolyk (15.01.03 10:07)
...
На машине юзера создается файл, зашифрованный с каким-то
...


http://www.pgp.com/


 
ZeroDivide   (2003-01-15 10:36) [28]

Хотел даже что-то написать сначала, но потом передумал. Я просто в истерике от ваших реплик. Не знаю мне смеяться или плакать. Сперва я смеялся.
Нужно проводить долгий ликбез.
Но в общем скажу все таки кратко:
1 Криптография и защита программ от взлома это 2 разные вещи.
2 Современные криптографические алгоритмы взломать нереально.
3 Программу нельзя защитить от взлома. Даже если она защищена
современными криптографическими алгоритмами, то она будет ломаться на 5 минут дольше. (а может и быстрее)

Известно ли вам уважаемые "защитники программ", "собиратели серийных номеров винчестеров", что как правило все ваши старания
отключаются изменением всего 2-х маленьких байтиков на 90h - No Operation?
И все :(


 
Anatolyk   (2003-01-15 11:45) [29]

To: Reindeer Moss Eater
Назначение - просто затруднить перенос проги.


 
Anatolyk   (2003-01-15 11:50) [30]

То: Zero...
Это и ежу понятно. Но вопрос был задан, и если можно чем-то помочь, то почему бы нет? Здесь же не идет речь о создании абсолютной защиты. А для того, чтобы изменить те же 2 байтика, тоже надо кое-что знать.


 
anaTolik   (2003-01-15 11:55) [31]

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


 
Reindeer Moss Eater   (2003-01-15 12:01) [32]

Anatolyk (15.01.03 11:45)
To: Reindeer Moss Eater
Назначение - просто затруднить перенос проги.


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



 
anaTolik   (2003-01-15 12:17) [33]

Не совсем. Я же ВЫЧИСЛЯЮ его при каждом запуске. В готовом (в том числе зашифрованном) виде он нигде не хранится. Прога, вычислив пароль, пытается открыть файл и получить из него данные - и все. Если комп другой, то и пароль будет вычислен другой. Поэтому хотя бы данные будут искажены.


 
Reindeer Moss Eater   (2003-01-15 12:22) [34]

Полет мысли не понят.
Я - легитимный юзер. И у меня есть файл и пароль к нему.
Беру все это с собой и несу куда-то. Заменяю аналогичный файл на другом рабочем месте и работаю на двух местах с одним паролем.


 
anaTolik   (2003-01-15 12:34) [35]

1.Я пришел. Установил прогу. Напр., с дискеты запустил свой crack, который создал файл, вычислив пароль для этой машины. Забрал дискету. Ушел.
2.Умный (не через чур, а вмеру) перец пришел. Скопировал все на др. комп. Запустил прогу. Она вычислила пароль (используя комбинацию SN харда и пр.) уже для этого компа. С этим паролем попыталась открыть файл. И, сам скажи, что будет? Пароль-то другой.
Я еще раз говорю - пароля как такового нет. Программа сама его высчитывает и даже не надо его у юзера запрашивать.
Может, я термин пароль неправильно употребил?


 
mrcat   (2003-01-15 12:54) [36]

anaTolik (15.01.03 12:34)
и что прикажете делать юзеру, заменившему, например винт?


 
anaTolik   (2003-01-15 13:00) [37]

Ну,если ты - крутой перец, то наверное, забъешь в код проги однажды вычисленный пароль, и отключишь его расчет. Причем для всех процедур, и м.б. DLL.
Тогда - да...


 
Kruger   (2003-01-15 13:03) [38]

Набить морду человеку, который сделал привязку к харду.
Лучше использовать шифрование. Однозначно. Ссылок народ накидал уйму, см выше. А вообще я бы посоветовал сделать свой шифровалшик. Тогда алгоритм шифрования будет уникальным и сломать его будет труднее.


 
anaTolik   (2003-01-15 13:04) [39]

to: mrcat

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

вариант: придумать передачу какого-нибудь кода и ответа на него. Но это слабо, т.к. процедура регистрации будет находиться на компе клиента.


 
Reindeer Moss Eater   (2003-01-15 13:07) [40]

Святая наивность. (про "взять бабки за вызов") :)


 
anaTolik   (2003-01-15 13:10) [41]

To: Kruger

Если надо защитить прогу от копирования, то следует как можно меньше инфы оставлять у клиента. А шифрование вещь хорошая, не спорю. Шифр, вот только должен быть привязан к чему-то. Хотя бы.
Привяжись к биосу, матери и пр. хламу - и шифруй на здоровье.
Иначе - один раз расшифровал, и пошло - поехало.


 
anaTolik   (2003-01-15 13:11) [42]

To: Reindeer Moss Eater

Ну, пива попить вместе. но за его счет 8)


 
mrcat   (2003-01-15 13:11) [43]

anaTolik (15.01.03 13:00)
...
забъешь в код проги однажды вычисленный пароль
...


=)))))
и кто после этого злому дядьке мешает перенести программу на другой PC?


 
Reindeer Moss Eater   (2003-01-15 13:16) [44]

>anaTolik
Представления у тебя какие-то извращенные. У тебя кто-то купил твою программу, которая потеряла свою функциональность в результате смены конфигурации у пользователя.
Ты полагаешь что тебя должны поить пивом за восстановление её работоспособности ?
Все как раз наоборот!


 
mrcat   (2003-01-15 13:17) [45]

anaTolik (15.01.03 13:04)
...
прийти, снова запустить Crack с дискеты, взять бабки за вызов
...


Предполагаемые мысли легитимного пользователя: "А на кой мне сдалась такая прога??????"


 
anaTolik   (2003-01-15 13:18) [46]

to: mrcat

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


 
mrcat   (2003-01-15 13:21) [47]


anaTolik (15.01.03 13:18)
...
Тебе надо будет править машинный код
...


могу только пожелать успехов в написании самоперекомпилируемой программы.


 
anaTolik   (2003-01-15 13:25) [48]

To: Reindeer Moss Eater

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


 
Reindeer Moss Eater   (2003-01-15 13:29) [49]

А если имеешь планы заработать, надо думать в первую очередь о том, что заставит пользователя захотеть заплатить тебе деньги


 
anaTolik   (2003-01-15 13:38) [50]

To: Reindeer Moss Eater
Давай так, если юзер - твой друг или типа того, тогда не мучайся, зашей пароль в прогу, перед запуском его спроси, и все.

Если ты пишешь программу, которую хочешь продавать, то пиши ее качественно и с наиболее простым интерфейсом. Я думаю, пользователя скорее задолбает каждый божий день (а то и чаще) вводить пароль, нежели раз в год угостить тебя пивом. И если ему будет приятно работать с твоей прогой, будь уверен, он пойдет на эту жертву.
8)))


 
mrcat   (2003-01-15 13:44) [51]

anaTolik (15.01.03 13:38)
...
если юзер - твой друг или типа того
...


Если пользователь - друг, то зачем вообще пароль?

...
Если ты пишешь программу, которую хочешь продавать, то пиши ее качественно и с наиболее простым интерфейсом. Я думаю, пользователя скорее задолбает каждый божий день (а то и чаще) вводить пароль, нежели раз в год угостить тебя пивом. И если ему будет приятно работать с твоей прогой, будь уверен, он пойдет на эту жертву.
...


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


 
Reindeer Moss Eater   (2003-01-15 13:45) [52]

anaTolik
Не путай две разные вещи:
1. Пользователь каждый раз вводит пароль при запуске программы в целях защиты своих данных. И в этом он заинтересован сам, а не в том что бы пить пиво.

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


 
anaTolik   (2003-01-15 13:49) [53]

To: mrcat

см ответ от 13:04, вариант 2.


 
anaTolik   (2003-01-15 14:00) [54]

To: Reindeer Moss Eater
Ему наплевать - тебе нет.
1.Если комп стоит в проходном дворе, а юзер заботится о своих данных, тогда для защиты следует прежде попытаться ограничить доступ к данным на уровне ситемы. иначе - копируй, и сиди дома ковыряй сколько душе угодно.
2.Если это компьютер общего пользования, рекомендую юзерам пользоваться различными доп. устройствами: mobile rack-ами, Flash-ами, дискетами, наконец, и не оставлять свои данные на компе.
3.Если надо разделить данные в одной программе между юзерами, используй готовые решения средствами СУБД. Практически все мало-мальски уважающие себя конторы позволяют ограничивать доступ на уровне пользователей. Включай Login prompt, и - вперед.


 
Reindeer Moss Eater   (2003-01-15 14:03) [55]

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


 
anaTolik   (2003-01-15 14:08) [56]

Надо идти. Буду после 17 по Москве. Было приятно пообщаться. Пока!

Желающие и спамеры. Если есть интересные темы, предложения, или просто желание пообчаться, пишите на celeron@mail.sochi.ru. C удовольствием отвечу.


 
Anatoly Podgoretsky   (2003-01-15 14:27) [57]

anaTolik (15.01.03 13:04)
Если процесс выщибания денег не зафпксированн особо в договоре, то пользователю пора обратится в суд на взыскания с тебя разного рода ущерба, и не думай что жто тебе сойдет с рук, прецеденты есть, бедныи защитники пользователя были после этого бледные и бедные.


 
anaTolik   (2003-01-15 14:56) [58]

to: Anatoly Podgoretsky
Все верно. Но на то он и договор, чтобы все там оговаривать.
Насчет вышибания денег - мне обидно. Это не вышибание. Пользователи (покупающие прогу) обо всем информированы. А брать, или не брать за восстановление деньги - см. договор.
Я не оспариваю их имущественные права, но и не хочу, чтобы мои авторские права были нарушены. А прецедентов - достаточно. Взать всеми любимые винды. Сколько народу зарабатывет на их обслуживании (неофициально). Вообще, вариантов много.

Но цель дискуссии была не "как выбивать деньги", а как защититься. И что вы все с деньгами ко мне прицепились? Неужели так задело?


 
Anatoly Podgoretsky   (2003-01-15 15:04) [59]

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


 
anaTolik   (2003-01-15 15:08) [60]

Удачи всем! меня нет.


 
ZeroDivide   (2003-01-15 15:22) [61]

Вообще говоря я все сказал в [ZeroDivide © (15.01.03 10:36)],
но вы хотябы один раз взламывали или только пытаетесь защитить?
У меня нет слов. Расскажу анекдотический случай из реальной жизни, который будет вам полезен в вашем деле:
Однажды, когда я еще учился в универе (DOS AGE), мы делали лабы по одной хорошей, очень полезной проге. Препод пытался продать ее студентам за 200р. Ни один человек не купил. Но он упирался и просто так ее отдавать не хотел. Тогда я ее ломанул и раздал всем бесплатно. Потом он выяснил что это сделал я (Я ему сам сказал). Он был профессором, д.т.н. и он у меня спрашивал как же я ее все таки сломал? А еще чуть позже он стал моим научным руководителем!!! А еще чуть позже под его н.р. я получил губернаторскую премию!!!
А взломал я ее так:
Когда он компилял прогу он оставил там галочку "Дебагинг информейшэн". И ТД (Бордандовский) ее конечно же понимал.
И короче прикол:
.........
push eax
add ebx,03h
push ebx
.........
Call Protect
.........
SomeCode
.........


 
RWolf   (2003-01-15 15:32) [62]

ZeroDivide
*пиво :)
со мной был такой же случай, один в один
может, они это нарочно? хакеров воспитывают? :)


 
A2   (2003-01-15 20:30) [63]

Уважаемые!
В "Королевстве Дельфи" есть хороший цикл статей по теме защиты программ, включая такую экзотику для Win32, как самомодифицирующиеся программы. Советую посмотреть -- очень интересно.


 
ZeroDivide   (2003-01-16 08:49) [64]

>A2 (15.01.03 20:30)
А я вот советую почитать какой-нибудь "цикл статей" - <интересное выражение]
по взлому программ. Пользы будет побольше.


 
BlockCode   (2003-01-17 16:06) [65]

function HeshKey(s0: string): string;
var
n, i, j, k, x: integer;
s: string;
begin
s:=s0;
SetLength(s,30);
n:=Length(s0);
for i:=n+1 to 30 do
s[i]:=Char(i);
for i:=1 to 30 do
begin
k:=1;
x:=Ord(s[i]);
for j:=1 to 30 do
begin
case k of
1: x:=x+Ord(s[j]);
2: x:=x*Ord(s[j]);
3: x:=x-Ord(s[j]);
4: x:=x div Ord(s[j]);
5: k:=0;
end;
k:=k+1;
end;
s[i]:=Char(x Mod 256);
end;
Result:=s;
end;

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



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

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

Наверх




Память: 0.62 MB
Время: 0.012 c
4-87195
Виталик
2002-12-11 14:51
2003.01.27
Окно без панели заголовка


1-86844
skirdov
2003-01-19 00:54
2003.01.27
DBGrid


3-86649
vcv
2003-01-06 17:55
2003.01.27
Не получается запрос по двум таблицам


3-86632
Andrushk
2002-12-23 17:05
2003.01.27
Как из Oracl-овой процедуры вернуть в Delphi набор данных?


6-86998
Serj_z
2002-11-28 20:13
2003.01.27
Проблема в том что 98 ти ХР не видят друг друга без хаба





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский