Доброго времени суток, уважаемые форумчане. Вы не могли бы помочь мне с алгоритмом шифра Виженера? Дело в том, что я никак не могу реализовать метод шифровки дешифровки, точнее я не могу понять как составить таблицу соответствия алфавита, а потом привинтить сдвиг по ключу... Мозг уже кипит, если можно, подскажите пример реализации на VB или VB.NET. Или просто структуру циклов и условий Заранее благодарю.
Виженер это легко! Смотри, вот у нас есть блок данных: допустим, наш ключ - слово "mouse". Значит, правила подстановки будут задаваться пятью таблицами, которую объединим в одну: Code: abcdefghijklmnopqrstuvwxyz mnopqrstuvwxyzabcdefghijkl opqrstuvwxyzabcdefghijklmn uvwxyzabcdefghijklmnopqrst stuvwxyzabcdefghijklmnopqr efghijklmnopqrstuvwxyzabcd Теперь для примера, зашифруем фразу "CRYPTOGRAPHY AND DATA SECURITY". Запишем символы ключевого текста под символами исходного. Так как ключ периодический, будем повторять пока не закроем весь исходный текст: Code: CRYPTOGRAPHY AND DATA SECURITY MOUSEMOUSEMOUSEMOUSEMOUSE Каждый из символов ключа указывает, которую из таблиц подстановки нам необходимо использовать для подстановки рассматриваемого символа ис- ходного текста. Символ ключа «M» указывает, что соответствующий символ шифротекста необходимо выбирать из таблицы подстановки, алфавит шифро- текста в которой сдвинут относительно алфавита исходного текста на Pos(«M») – Pos(«A») = 12 позиций. Таким образом, первому символу исходно- го текста будет соответствовать символ шифротекста «C» В итоге получим: Code: OFSHXAULSTTM SRP XSXM MWGGFCLC Попросту говоря для ASCII-алфавита шифрование сводится к суммированию ординалов символа исходного текста, и очередного символа ключа по модулю 255, а дешифрование - к вычитанию по этому же модулю. Терь код. Процедура шифрования блока данных: Code: keyword - ключ, неограниченной длины tmp - данные, опять-таки неограниченной длины j := 1; for i := 1 to length(tmp) do begin tmp[i] := Char((Ord(tmp[i])+Ord(keyword[j])) mod 255); Inc(j); if j > Length(keyword) then j := 1; end; Дешифрование: Code: keyword - ключ, неограниченной длины tmp - данные, опять-таки неограниченной длины j := 1; for i := 1 to length(tmp) do begin tmp[i] := Char((Ord(tmp[i])-Ord(keyword[j])) mod 255); Inc(j); if j > Length(keyword) then j := 1; end; Вот собсно и всё. Будут какие вопросы - задавай. (с) RDL_Rider
шифр Виженера День добрый! нужна помощь в написании алгоритма дешифровки шифра Виженера. Проблема в том что известна только длина ключа равная 5, но не сам ключ и соответственно нужен пример кода как реализовать поиск этого ключа в тексте. Заранее благодарен
нужен прогер и все же нужен прогер способный реализовать поиск ключа в этом шифротексте : нлсгинфулйкцслрюыдуб фйввечаферчбрарежвппфовщлпаеррэжзазяппфкюрстщнтхгщобопкьпбгцсолжкоажжьшбрйулрисныкврргбхощханоупйврщюгбырщосккябмощьйфйкцпхпьм вощюйобкщбкглщйиаыымлдьмхл ксжвбняпупчлвюмкфпжбшщжфаюэжхжчфквбмнбхашмтхпйяжоэкшпрбэяьу коаеяьввцсосаггюысвншызитюобвурымсдугжфлубафпвфоиоухаеазяпмахщйжжкрбиуэкасруюбрйрлщлхьмарбтоброщппвбняпупчлбежкшбуййлгвщуасиахмззпфлвцлнсафпщягиуэягцжюлтопныазфаыгрпоыафппссйбшф вольслнрэадфхожвбкюмсгщлвсдкяпжеллмавщшфвпюцсюущшфвурцтхфкюпсунсуфун жхаюслфукрфшпнщпжпкюпзжьтбрййллупчсахпоыахсряжпйфлгвтныжмахщйжжкэбкгучалерйапощппгм мглушыдсагфхубкогиейллебпэбхояйахбмчйщфкюпфущкгьфилйкалчхггуябвтпойрфюыдсашмасеущаьболбохлойхбкюеейш усдщлогапобвщлпбвйкяазаэчжзфиеббаэяфтжшзаеаьмиейюфйвльфрхпоэбчйулте тмогаэлйпжшснвесыггошфаджцчбкпкцпхпьжквгкюгсжфлоивщчэьпфллрйосаьй эафжшзпубкнжомлупвгеджзщрхаеауябойулружпчпййцлйфрщчэкпнмуяапч вншыдсбцабейющпжпкдйчсллмидхыакбыынлолйылкэканмигаггюысволуггмксдсаымссмршатбьымяанжрлтеобиуэкарбплпхльжуюнкяжнтюынввяцггаэяпбылкарбплвцлныквпюцсюущппвурцтхбкыирбвмжхашынискммчбнфугаюлжвощшжуаэясслулгвулнмлчрлигнрщьврщллсущэппфкытцырюуемйсуф кубпжшматсулюхпчлбеущэасучсшгмкгусаьмирьаллссьсттпшржрущоаппсщпвтшмвйбюзаубтчйыоешйврлэпо чфаларюмлаымссмжлпнбтжггмэкацльмеиошжнвущлжжпкшпйощлвюмщлигнрщйхэ з.ы. пробел тоже символ и он тоже заменен на что-то.