Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.04.2007, 05:32
TitiS TitiS вне форума
Новичок
 
Регистрация: 29.12.2006
Сообщения: 62
Репутация: 10
По умолчанию Шифровка с заданием ключа от 1 до 9 символов (можно больше)

Доброго время суток!

Нужна помощь. Пишу программу, в которой необходима шифровка с заданием ключа. Перерыл несколько различных методов, но все они дают одну и ту же проблему - если он например видет на своём пути hag5mo (это только так к примеру, на деле он сталкивается с другими значениями, но понять причину ни как не могу), то шифрует до 5, а что дальше пропускает мимо глаз... У каждого метода свои "значения затупка". Короче мне нужен хороший метод шифровки, с заданием ключа от 1 до 9 цифр (можно и больше).
Ответить с цитированием
  #2  
Старый 04.04.2007, 14:29
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию

Я делаю так:

Код:
for key:=1 to length(s) do
begin
t:=ord(s[key]);
t:=t+key;
s[key]:= chr(t);
end;

принцип работы:
Например есть слово "РЕКЛАМА".
при key=1 слово станет СЕКЛАМА, при 2 СЗКЛАМА, при 3 СЗНЛАМА и т.д.

Можно еще и так:
Код:
key:=Random(round(9));  //функция round необходима для того, чтобы не было дробных значений!!
for m:=1 to length(s) do
begin
t:=ord(s[m]);
t:=t+key;
s[m]:= chr(t);
end;
edit1.text:=s+key;

Надеюсь тебе поможет!!!!;
при дешифровании считывай последний символ в строке или слове(смотря куда будешь ключ писать) и пиши t:=t-key;

И будет тебе счастье!!!!)))))

ПЫ.СЫ. Писал прямо на форуме, поэтому могут быть ошибки!!!

Последний раз редактировалось ~ SaM ~, 04.04.2007 в 18:16.
Ответить с цитированием
  #3  
Старый 04.04.2007, 14:31
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию

Гы.Забыл сказать....
Ключ должен быть только типа integer!!!
Ответить с цитированием
  #4  
Старый 04.04.2007, 19:30
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

to ~ SaM ~
Random никогда не вернет дробного значения, если вызывается с параметром

to TitiS
Если никаких серьезных требований к шифрованию не предъявляется, то можно написать простые функции с применением xor и not. Вот пример
Код:
// Кодирование строки
function Decode(text, key: string): string;
var
  code: Longint;
  i: integer;
begin
   if Length(text) = 0 then Exit;
   if Length(key) = 0 then
   begin
      Result := text;
      Exit;
   end;
 
   code := 0;
   for i := 1 to Length(key) do
      Inc(code, Ord(key));
 
 for i := 1 to Length(text) do
      Result := Result + Chr(not((Ord(text) + i) xor code));
end;
 
// Декодирование строки
function Encode(text, key: string): string;
var
  code: Longint;
  i: integer;
begin
   if Length(text) = 0 then Exit;
   if Length(key) = 0 then
   begin
      Result := text;
      Exit;
   end;
 
   code := 0;
   for i := 1 to Length(key) do
      Inc(code, Ord(key[i]));
 
   for i := 1 to Length(text) do
      Result := Result + Chr((not(Ord(text[i]) xor code)) - i);
end;
Принцип алгоритма основан на том, что операции xor и not обратимые. Если нужно что-то более серьезное, используй встроенные в Винду криптопровайдеры.
Ответить с цитированием
  #5  
Старый 05.04.2007, 07:12
TitiS TitiS вне форума
Новичок
 
Регистрация: 29.12.2006
Сообщения: 62
Репутация: 10
По умолчанию

Decoding, твой код не срабатывает - пишет не совпадение типов переменных... =(
~ Sam ~ пойду разбираться с твоим способом
Ответить с цитированием
  #6  
Старый 05.04.2007, 09:56
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

to TitiS
странно, но похоже, что форум проглючило. Я вставил код прямо из Delphi методом Copy/Paste, но посмотрев его после твоего сообщения, увидел, что код не соответствует оригиналу… Выкладываю исходники…
Decode.zip
Ответить с цитированием
  #7  
Старый 05.04.2007, 13:05
TitiS TitiS вне форума
Новичок
 
Регистрация: 29.12.2006
Сообщения: 62
Репутация: 10
По умолчанию

Да, Decoding, у тебя хороший метод шифровки, но в моём случае он не подходит надо шифровать не одну строку, а бесконечное число строк (strings а если точнее, то items), есть ли что нибудь на этот счет? Заменив edit's - memo's - вроде как всё работает, но при разном ключе он поразному меняет 'свой предел строк' что мне не допустимо... Эх... программа то уже можно сказать написана, да вот только с этой шифровкой проблемы
Ответить с цитированием
  #8  
Старый 05.04.2007, 15:52
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

А если шифровать каждую строку отдельно, в цикле?
Ответить с цитированием
  #9  
Старый 05.04.2007, 17:53
~ SaM ~ ~ SaM ~ вне форума
Начинающий
 
Регистрация: 05.01.2007
Адрес: Днепропетровск
Сообщения: 141
Репутация: 25
По умолчанию

to Decoding

Код:
to ~ SaM ~
Random никогда не вернет дробного значения, если вызывается с параметром

не знал!Спасибо за подсказку!
Ответить с цитированием
  #10  
Старый 06.04.2007, 08:41
TitiS TitiS вне форума
Новичок
 
Регистрация: 29.12.2006
Сообщения: 62
Репутация: 10
По умолчанию

Decoding, честно, пытаюсь это реализовать, но писал то прогу сначал с учтением, что будет использоваться именно Strings, а не String. Сейчас придётся изучать весь код (потому что уже не помню что не так - пытался добавить несколько циклов и изменил типы переменных, но какие то глюки, которые возможно из-за использованных компонентов) и подкорректировать. Буду пользоваться твоим методом, т.к. он мне очень понравился Так что благодарность тебе

Но если кто знает о хорошем методе, который отвечает требованиям в первом посту, то, пожалуйста, пишите.
Ответить с цитированием
  #11  
Старый 13.06.2007, 18:46
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию

Вот посмотри этот файл. Я давно делал уже точно не помню как там и что. Но есть мето шифрования/дешифрования с ключем "EnCryptSum" - Шифрует вроде суммированием кодов символов.
А есть без ключа по методу Виженера, там надо задать алфавит который используется.
Если что не понятно, спрашивай, вместе разберемся)
Вложения
Тип файла: zip cryptography.zip (1.3 Кбайт, 50 просмотров)
Ответить с цитированием
  #12  
Старый 14.06.2007, 05:03
TitiS TitiS вне форума
Новичок
 
Регистрация: 29.12.2006
Сообщения: 62
Репутация: 10
По умолчанию

Спасибо, гляну, как будет свободное время. Надеюсь твой метод будет оченб надёжным и Key Book Plus ( http://www.denasoft.net/keybook.htm )наконец выйдет из Alpha 0.5
Ответить с цитированием
  #13  
Старый 14.06.2007, 15:04
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию

Метод должен быть надежным) пиши если что.
Ответить с цитированием
  #14  
Старый 29.06.2007, 05:53
TitiS TitiS вне форума
Новичок
 
Регистрация: 29.12.2006
Сообщения: 62
Репутация: 10
По умолчанию

Наконец дошли руки до твоего юнита Извени, что так долго - дел по горло было... Сейчас вроде освободился.

Парочка эксперементов с функциями
Function EnCryptSum(Text,Password:string):string;
Function DeCryptSum(Code,Password:string):string;
дали очень даже хорошие результаты:
использовал слизанный словарь паролей (около 200 штук) и метод Sum шифровал/дешифровал без единого "лишнего" или "нетого" символа. Это при том, что в качестве ключа использовались несколько длиной 9..18 символов... Сохранял результат в текстовой файл, после чего этот файл расшифровывал - всё впорядке, лишних символов переноса не обнаружено Таких результатов мне ещё не удалось увидеть (подчеркну - с выбором ключа шифровки)
Есть правда вопрос:

Чем Sum лучше Sub,CryptSymbolVij? В каких случаях лучше ту или иной тип шифровки использовать?

P.S. Парень, что писал функции - молодец, если это ты, то вдвойне молодец Пойду дальше эксперементировать... Если найду что -то, сообщу

Последний раз редактировалось TitiS, 29.06.2007 в 06:01.
Ответить с цитированием
  #15  
Старый 29.06.2007, 13:39
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию

Писал я) Спасибо.
Sum и Sub это в принципе одно и тоже, разница тока в том, что в первом случае коды складываются, а во втором вычитаются)) Знаю, может это и лишнее, но я собирался делать модуль с разными процедурами шифрования.

En(De)CryptSymbolVij - ну это не главная функция, она вспомогательная(шифрует/расшифровывает один символ по таблице Виженера), используется в функции:
function En(De)CryptVij(Text, Key, ABC:string):string; - Шифрует(Расшифровывает) уже строку целиком

CryptSymbolVij - Это метод шифрования Виженера, он намного надежнее Sum, тем более если используется не стандартный алфавит (ABC), поэтому лучше использовать этот алгоритм, если данные ценные и хранятся длительное время в шифрованном виде.
Тока в нем ограничение, в алфавите должны быть все символы которые есть в кодируемой строке, иначе не будет работать.
А так, при кодировании нужно все запятые, пробелы и другие спец символы удалять, там вроде есть функция, которая это делает.

Последний раз редактировалось Burka, 29.06.2007 в 13:50.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter