Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2014, 00:20   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Шифр замены, оптимизация

Здравствуйте, написал шифратор текстов методом подстановки, но мне кажется что код слишком не универсален и огромен, да и алгоритм описывался "как есть", в общем все работает, но планирую добавить больше символов, включая английский+чтоб шифр текст выводился с учетом верхнего и нижнего регистров, а так же точка, запятая и т.д., в общем пока цель-подумать над оптимизацией кода, кто может-помогите, пожалуйста, не к спеху, а для себя)) Заранее спасибо, есть идея сделать ключ в зависимости от длинны введенной строки, и чтобы сдвиг во втором алфавите зависел от этого, думаю сам справлюсь) пока для одной строки написал код, а потом буду делать для редакторов текста
Вложения
Тип файла: rar шифратор.rar (6.1 Кб, 19 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 21.01.2014 в 00:33.
Алексей_2012 вне форума Ответить с цитированием
Старый 21.01.2014, 00:33   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,428
По умолчанию

Код:
for i := 1 to k do
begin
    j := pos(shifr[i], rus);
    if j > 0 then
        result := result + rus1[j]
    else
    begin
        showmessage('FATAL ERROR');
        exit;
    end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 21.01.2014, 01:57   #3
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

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

Код:
var s: string;
    i: integer;
begin
  s:= Edit1.Text; // загоняем текст из какого либо источника в string
  for i := 1 to Length(s)  do // в цикле
  s[i] := chr(ord(s[i]) + 1); //получаем порядковый номер символа, сдвигаем на нужное количество индексов, переводим обратно
  ShowMessage(s);//выводим результат
Обратный перевод делаем с точностью наоборот
Код:
s[i] := chr(ord(s[i]) - 1);
Пойдёт в качестве оптимизации?

Последний раз редактировалось doktor255; 21.01.2014 в 02:01.
doktor255 вне форума Ответить с цитированием
Старый 21.01.2014, 16:04   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
Весь сдвиг можно осуществить буквально тремя строками кода, причём по всем символам, а не как у тебя, по выбранному диапазону символов.
1. выход за пределы выбранного алфавита
ord('я')=$FF
chr($FF+1)=???
2.невозможно использовать алфавит из нескольких диапазонов
строчные + прописные + знаки препинания
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.01.2014, 16:32   #5
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
1. выход за пределы выбранного алфавита
ord('я')=$FF
chr($FF+1)=???
evg_m chr($FF+1) = Ā
Это называется юникод.
Цитата:
Сообщение от evg_m Посмотреть сообщение
2.невозможно использовать алфавит из нескольких диапазонов
строчные + прописные + знаки препинания
Ни когда не слышал подобного бреда. Возможно использовать и строчные, и прописные, и знаки препинания. Чушь не пиши пожалуйста.
doktor255 вне форума Ответить с цитированием
Старый 21.01.2014, 16:37   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
evg_m chr($FF+1) = Ā
Это называется юникод.
лишь в юникодных Делфях.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.01.2014, 16:49   #7
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Есть повод изучать. Тем более коли речь идёт о шифровании.

Последний раз редактировалось doktor255; 21.01.2014 в 16:57.
doktor255 вне форума Ответить с цитированием
Старый 21.01.2014, 20:46   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
evg_m chr($FF+1) = Ā
Это называется юникод.
это называется выход за пределы шифруемого алфавита вне зависмости от системы кодировки!
полученного символа НЕТ в том алфавите для которого мы выполняем шифрование.
и исходный алфавит это вовсе не 0-$FF, а всего лишь символы: строчные и прописные, русские и английские.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.01.2014 в 20:53.
evg_m вне форума Ответить с цитированием
Старый 21.01.2014, 21:01   #9
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Ну нет полученного символа в алфавите. И что? Это что меняет вообще??? Я на 100% уверен что топикстартер не преследовал цель остаться в рамках алфавита.
doktor255 вне форума Ответить с цитированием
Старый 22.01.2014, 12:17   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
Ну нет полученного символа в алфавите. И что? Это что меняет вообще??? И что? Это что меняет вообще???
Невозможно отобразить шифрованный текст, поскольку это уже не текст а просто набор байтов.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод замены V_I_P Общие вопросы C/C++ 1 12.11.2013 02:01
Макрос замены в word Foma-78 Microsoft Office Word 3 19.06.2012 05:33
Замены Igorec Общие вопросы C/C++ 2 22.02.2010 20:15
Диалог замены файла kiber_punk Общие вопросы Delphi 2 24.10.2008 10:02