Страница: 1 | 2 |
Вопрос: Алгоритм шифрования
Добавлено: 16.10.06 21:53
Автор вопроса: BuPTy03
В общем задался я целью зашифровать строку, состоящую из цифр. Шифровать решил заглавными латинскими.
В общем, решил реализовать это следующим образом: к значению цифры и её позиции прибавляется 65 (Asc("A")). Если получается значение, превышающее 90 (Asc("Z")), то снова перескакивает на A.
Зашифровать строку мне удалось, а вот с расшифровкой ерунда какая-то выходит.
Вот код:
Text2 = ""
For i = 1 To Len(Text1)
Text2 = Text2 + Chr(65 + Val(Mid(Text1, i, 1) + i - 1) Mod 26)
Next i
End Sub
Private Sub Command2_Click()
Text3 = ""
For i = 1 To Len(Text2)
Text3 = Text3 + Trim(Str(Asc(Mid(Text2, i, 1)) - 65 - (i - 1) Mod 26))
Next i
End Sub
На форме 3 текстбокса и 2 кнопки. При нажатии на первую строка из первого текста шифруется и шифр помещается во второй текстбокс. При нажатии на вторую кнопку текст из второго текстбокса должен расшифровываться и помещаться в третий текстбокс (тут у меня косяк - не правильно расшифровывается).
Чтобы был нагляднее алгоритм шифрования вот как будет выглядеть результат (вверху - позиция символа в строке, справа по вертикали - сам символ):
0 A B C D E F G H I J K L M N O P Q R S T U V W Z Y Z A
1 B C D E F G H I J K L M N O P Q R S T U V W Z Y Z A B
2 C D E F G H I J K L M N O P Q R S T U V W Z Y Z A B C
3 D E F G H I J K L M N O P Q R S T U V W Z Y Z A B C D
4 E F G H I J K L M N O P Q R S T U V W Z Y Z A B C D E
5 F G H I J K L M N O P Q R S T U V W Z Y Z A B C D E F
6 G H I J K L M N O P Q R S T U V W Z Y Z A B C D E F G
7 H I J K L M N O P Q R S T U V W Z Y Z A B C D E F G H
8 I J K L M N O P Q R S T U V W Z Y Z A B C D E F G H I
9 J K L M N O P Q R S T U V W Z Y Z A B C D E F G H I J
Помогите, плз, разобраться с алгоритмом расшифровки.
Заранее спасибо.
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
BuPTy03
Вопросов: 2
Ответов: 4
Профиль | | #1
Добавлено: 16.10.06 21:56
Тут принцип шифрования криво отобразился...
Я текстовый файлик залил на http://slil.ru/23259641
Номер ответа: 2
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #2
Добавлено: 16.10.06 22:21
эээээээ.... это ты называешь шифрованием?
Если правильно помню, это называется защитой, основаной на неизвестности, т.е. на основе того что злоумышленнику не известен алгоритм шифрования, IP-адрес, порт и т.п.
В принципе лучше вместо шифрования переименовать текстовый файл во что-то вроде:
ЭТОТ_ФАЙЛ_НИКОМУ_НИ_ОТКРЫВАТЬ_#ЛЯ_ПОТОМУ_ЧТО_ПРИБЬЮ.txt
По крайней мере времени будет тратиться меньше да и код для этого сразу без ошибок написать можно.
PS Нужно использовать стандартные алгоритмы шифрования, которые используют все. И надежнее, и гемороя меньше.
К примеру - алгоритм AES, который, если не ошибаюсь, принят даже в правительстве США.
Проще всего юзать это через CryptoAPI, или же, если используешь дотнет, то System.Security.Cryptography
Номер ответа: 3
Автор ответа:
BuPTy03
Вопросов: 2
Ответов: 4
Профиль | | #3
Добавлено: 16.10.06 22:46
Ну называйте как хотите.
Мне честно говоря, всё равно, как шифровать, просто мне интересна сама задача. Как сделать так, чтобы получилось. Я полчаса соображал, как заставить ВБ зашифровать строку нужным мне образом, что мне удалось, и ещё порядка трёх часов думал как его восстановить из шифра, в чём потерпел фиаско. Я уже придумал ещё 2 способа зашифровать строку, но тут просто спортивный интерес. Должен же быть способ это реализовать?
А текстовый файл не при чём - он просто показывает вам что должно на что заменяться. Он в комплекте с прогой не пойдёт )
Номер ответа: 4
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #4
Добавлено: 17.10.06 08:28
расскажи, как программе понять, А это перебор от Z или это именно А? У тебя должно стоять ограничение на число символов за один проход обрабатываемых если в таком виде оставишь код. Если хочешь исправить - придётся отказаться от округления. Как вариант шифротекст пусть будет тоже цифрами. Не надо mod 26. Просто бери и перегоняй число в строку. Я помнится сделал забавный шифровщик - у меня символы расшифровывались с конца наперёд. Причём расшифрованый символ становился ключём для следующего. И если в одном ошибка, все последующие верными уже не будут. Вообще вариантов оч много. Деразай
Номер ответа: 5
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #5
Добавлено: 17.10.06 08:39
Забей и юзай Skip-коды.
Номер ответа: 6
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #6
Добавлено: 17.10.06 18:09
MD5! Даже сам расшифровать не сможешь! ))
Расшифровать можно только зная заведомо правильный пароль. Примеры на форуме.
Номер ответа: 7
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #7
Добавлено: 17.10.06 18:35
2Arseny
LOLOLOLOLOL. MD5 это хеш. Надеюсь, ты знаешь в чём суть хешей?
Номер ответа: 8
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #8
Добавлено: 17.10.06 18:41
Забей и юзай AES
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 17.10.06 19:07
Ну дык он его потом подбирать будет. Долго что ли )
Чел прикольнулся явно. Пжалуйста, пример расшифровки пароля из NTLM хэша в студию!
Номер ответа: 10
Автор ответа:
BuPTy03
Вопросов: 2
Ответов: 4
Профиль | | #10
Добавлено: 17.10.06 21:27
Знал бы - не задавал бы вопроса )
Не понял...
У меня обрабатывает по одному символу и так.
А смысл перегона в строку? И как я найду окончание алфавита без MOD?
Да я уже тоже придумал такой способ (следующий символ шифруется предыдущим), только я уже писал - тут спортивный интерес. Как должен выглядеть алгоритм расшифровки именно этого способа?
Номер ответа: 11
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #11
Добавлено: 17.10.06 22:46
Код писать не буду, пробуй понять.
Дык в этои фишка - понять, где ошибка. Так как ты используешь для кодирования позицию символа, причём прибавляя, то автоматом получается возможность переполнения. То что ты округляешь после Z до A. Это и есть причина ошибки. Ты должен что-то менять. Просто это не заставишь работать. Смотри, у тебя всего 26 символов. Это предельное число. У тебя
Asc(Mid(Text2, i, 1)) - 65
Здесь, когда по второму кругу идёшь, результат получится очмаленький, ибо символ будет A, после - 65 = 0. дальше ещё вычиать, поэтому и баг. Тебе надо на вход ставить ограничитель. За вызов обрабатывать не более чем доступно. И так блоками. У меня бага была когда RC4 использовал. Там пришлось разбивать на блоки. У тя та же фигня должна быть
Номер ответа: 12
Автор ответа:
BuPTy03
Вопросов: 2
Ответов: 4
Профиль | | #12
Добавлено: 18.10.06 01:39
В общем, тем кто сможет уложить алгоритм расшифровки в одну строку в цикле - мегареспект )
Номер ответа: 13
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #13
Добавлено: 08.04.07 23:48
тебе же сказали - юзай AES
Номер ответа: 14
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #14
Добавлено: 08.04.07 23:57
Верно сказали. Advanced Encryption System тут как раз в пору. Я не понял, почему люди не прислушиваются к мнению профи типа Бранда? Вам решение предлагают, чтобы вы заново клавиатуру не изобретали, а вы..
Номер ответа: 15
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #15
Добавлено: 09.04.07 00:50
а я потом флудер?? ))) Флудер не тот кто поддерживает флуд, а тот, кто его начинает (с) )