Официальный сайт компании Arduino по адресу arduino.cc
Шифрование XTEA
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 25/05/2016 - 07:45
Добрый день||вечер||утро, уважаемые форумчане! Туплю неимоверно.
Нужно произвести шифрование строки типа string методом xtea.
Есть такой код .
void xtea_encipher(unsigned int num_rounds, uint32_t *v, uint32_t const *k) { unsigned int i; uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9; for (i=0; i < num_rounds; i++) { v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); sum += delta; v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); } v[0]=v0; v[1]=v1; }
Не пойму:
1. как из стринга получить цифровую переменную uint32_t?
2. что делать, если текст меньше 64 бит? (и как вообще узнать сколько бит занимает текст)
Ответы типа - "гугл в помощь", "это же легко и понятно" прошу оставить при себе.
Если кто приведет готовый кусок кода с шифрованием string, формированием ключей - буду очень благодарен. Или же объясните в понятном и подробном виде.
Заранее спасибо всем ответившим
А вообще, есть библиотеки, которые шифруют текст каким-то алгоритмом?
wdrakula, Вы, судя по всему, неплохой специалист, но не превращайтесь в Клапауция! Удалил пост.
Я пропустил весь экшн?) Что мне ответили?
Две минуты поиска в гугл и сразу готовый пример: http://www.cplusplus.com/forum/general/58133/
Не нравится мой ответ, держите своё "не нравится" при себе.
Все хорошо, почему же. Спасибо. Ну вот как вы ищите так? Читеры.
Слепил такой скетч.
Выходит ошибка в этой строке xtea_encipher(32,(uint32_t*)(inout+(i*BLOCK_SIZE)),key);
И плохо понимаю, как происходит конвертация
Мм...ошибка...информативненько.
Приведите текст ошибки.
Ой, извиняюсь. Про текст ошибки забыл)
cannot convert 'unsigned int*' to 'const uint32_t* {aka const long unsigned int*}' for argument '3' to 'void xtea_encipher(unsigned int, uint32_t*, const uint32_t*)'
строка 06 - замените unsigned int на const uint32_t
Компиляция успешна. Спасибо большое. Сейчас попробую затестить)))
Если получится, просьба выложить скетч, может кому поможет.
При поиске набирал что то типа "XTEA C++" и нашлось не в первой ссылке, конечно. Плюс сначала Вики почитал, поскольку с таким шифрованием не знаком.
Успешным оказался этот вариант. Все работает. Правда не разобрался еще с кодом да и с самим шифром нормально.
И все же.
Как тут у нас char в uint32_t умудряется превратиться?
Попробовал так в вижуал студио:
Каждый раз выдает разные семизначные цифры. Что это вообще? И как тогда он каждый раз одинаково шифрует и расшифровывает?
Ярик! Вот Вам не пришелся мой, ну и Клапауция тоже, метод воспитания?
Тогда ищите желающего отвечать на это:
Попробовал так в вижуал студио:
Каждый раз выдает разные семизначные цифры. Что это вообще? И как тогда он каждый раз одинаково шифрует и расшифровывает?
Ну или сами, раз Вы нам продемострировани истино христианское терпение и милосердие...
==========================
Автору на вопрос: "Что это вообще?" - все таки отвечу, не совсеми же я зверь: это указатели, сэр (подпорченные слегка). Вот так они выглядят "не одетыми". Это не стыдно - подглядывать за ними. ;) Так все делали...в юности.
Метод воспитания?
В Вашем посте было строчки 2-3 объяснений. В остальных вы, скажем так, чихвостили ТС.
Да, ТС разбирается не очень от слова совсем. Но (почти) все люди обучаемы, и ТС, ИМХО, в круг таких водит.
2megarak: Читайте http://people.toiit.sgu.ru/Sinelnikov/PT/C/Kern_Ritch.pdf - будет меньше нелепых вопросов)
Спасибо всем за объяснения.
Тут есть 2 стороны. Конечно самому разбираться хорошо и полезно - перерыв кучу инфы и перепробовав кучу примеров все таки доходишь до истины.
Но лично у меня такая ситуация - на то чтобы понять элементарную вещь порой уходит несколько суток. Потом очень жаль потерянного времени, а сейчас его вообще нет. А эту же элементарщину понимающий человек мог бы толково объяснить за 5-10 минут или за пару предложений, если бы действительно захотел.
Если бы 5 лет назад у меня не было предмета "алгоритмизация" и я бы захотел научиться писать программы, то я бы бросил это дело через пару дней. Просто не знаешь с чего начать, некому направить. Простые термины тебе не понятны в силу того, что нормальных объяснений их нет. А те, которые есть, вводят незнающего еще в большее заблуждение.
Во-первых. Если человек не знает буквы, то ему даже академик не сможет объяснить что означает определенное сочетание букв. Объяснять, что такое if или for - пустая трата времени, море информации в интернете.
Во-вторых. 5-10 минут, на одного, а вас таких "учеников" даже если не сотня, а десяток, и где взять на всех эти 5-10 минут? (только не надо говорить, что 1-2 часа в день - это немного). Риторический вопрос, поскольку ответ тоже простой, нет такого времени, ни у кого, а если есть, то лично я лучше его потрачу на себя, почитаю что нибудь новое, поучусь, узнаю что то новое, попробую это новое и буду знать немного больше.
Это не для дискуссии, а для информации. Если кто то считает иначе, считайте дальше.
Люди все равно дают ответы таким нубам как я. И на написание таких сообщений, которые порождают бессмысленные споры, тоже уходит время. Так чем потратить 5 минут и дать умный совет, который будет понятен НАМ ДУРАКАМ только через пару лет, лучше дать хороший ответ доступным языком. ИМХО, как тут пишут. А ваши "методы воспитания" только порождают бессмысленные срачи, которые потом длятся десятками страниц (и, почти уверен, не одним десятком минут).
Я не имею права никому тут ничего советовать, так как я в тысячу раз менее компетентен чем вы - но если решились написать коммент в теме - постарайтесь объяснить доступно.
Представьте, как сложно человеку, который еще не привык управлять машиной, ехать в городе по правилам. Хотя отдельно у него может по чуть чуть и то и другое получается.
Из вопроса то почти всегда понятно на каком уровне владения предметной областью находится человек
Люди стали такие - лишь бы высмеять, лишь бы подколоть, лишь бы самоутвердиться. "Хахаха какой глупый вопрос. Хахаха какой тупой ТС". Все злые стали. Надо быть добрее ко всем и помогать друг другу.
Ну можно посмеяться над глупостью, это да. Но если это перед всеми высмеять хотят, то это точно попытка самоутвердиться.
И если кто-то все таки мне объяснит, я буду очень благодарен.
И все же.
Как тут у нас char в uint32_t умудряется превратиться?
Попробовал так в вижуал студио:
Каждый раз выдает разные семизначные цифры. Что это вообще? И как тогда он каждый раз одинаково шифрует и расшифровывает?
В моем комменте есть ответ. Нормальный и правильный. Поймите его, хотя бы для доказательства старания.
Вместо самой строки, переменной присваивается указатель на место, где лежит эта строка?
Да
А как же тогда шифрование происходит? Ведь мы по сути в функцию передаем указатель?
А потом функция находит строку по этому указателю.
Так функция xtea_encipher работает с этой строкой как с массивом чисел uint32_t. Как так получается?
А потом чаровский массив оказывается зашифрованным. И, кстати, большего размера, чем был объявлен вначале.
А почитать, как работает XTEA слабо? Я за несколько минут в вики прочитал и у меня странных вопросов не возникает.
Все ясно с людьми на этом форуме (большинством людей). Я вот просто сижу и пишу вам - делать мне нечего, да. Читал я все по сотне раз. Не пойму говорю, объясните.
Как можно быть такими оленями? Я же просил такие комменты оставлять при себе!
Получается так примерно:
- "Я перечитал кучу информации как разобрать ноутбук АСУС - ничего не пойму"
- "Странно. Я открыл первую же ссылку и все понял. Я, сука, молодец. А ты, сука, тупой!"
А ничего, что ты до этого уже сотню компов разбирал и собирал????
"Не пойму говорю, объясните."
Что объяснить то? То, что написано по русски, что "Так как это блочный шифроалгоритм, где длина блока 64-бит, а длина данных может быть не кратна 64-битам, значения всех байтов дополняющих блок до кратности в 64-бит устанавливается в 0x01 ."
Объяснить, что 64 бита - это 8 байт. Один символ - один байт. Следовательно если длина текста не крастна 8 байтам, то блок будет расширен. Это надо объяснить?
На счет "оленей", поаккуратней, я тебе помог, так теперь твоя благодарность в том, что нужно переходить на личности? Продолжай в том же духе. Добро пожаловать в черный список.
А ничего, что ты до этого уже сотню компов разбирал и собирал????
кто тебе мешает разобрать сотню компов, неалень?
Все ясно с людьми на этом форуме (большинством людей). Я вот просто сижу и пишу вам - делать мне нечего, да. Читал я все по сотне раз. Не пойму говорю, объясните.
Как можно быть такими оленями? Я же просил такие комменты оставлять при себе!
Ярик! Вот об этом я и говорил. Он не "просит", а "говорит" - "объясните".
Здорово? Мне - весело.