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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2011, 19:42   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)не сократите вы.(если нужно обратно вернуть)
2)смотря как и кому передавать, если свой протокол, то все зависит от прямоты рук.
3)кому сильно надо всеравно прочтет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.05.2011, 19:48   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Эта строка - это имя файла.
ну слава Богу, выпытали, наконец-то...

Цитата:
2. Передавать файлы на мой взгляд лучше с именем из латинских символов.
3. Это поможет уберечь информацию от людей, которым ее нельзя видеть.
ладно. понятно. даже соглашусь.
я бы даже всё к большим буквам приводил...

Код:
1. Сократить имя
Зачем?! чем файл с именем "APMKWBBC78DS5S213FEW34" будет передаваться хуже, чем файл с именем, скажем
"BBBDAAADSDDAPMKFFFFWBGGGGGGBCGGGG9 DDSDF000078DS5S213FEWW56734ASSD8344 " !?!


и, главное.
есть такая "волшебная" штука, как архиватор WinRAR
у него есть опция -p - паролить архив.
а есть -hp - паролить и архив и его содержимое.
Для шифрации используется AES (это ОЧЕНЬ криптостойкий алгоритм). Если используете пароль длинее 10 символов то будет ГАРАНТИЯ, что не имя файла, ни сам файл никто (без знания пароля, разумеется) НЕ УВИДИТ!
Так зачем изобретать велосипед?! (тем более на дерявянных квадратных колёсам... )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.05.2011, 20:01   #13
Crunkordie
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 48
По умолчанию

Вы конечно извините, но вы чуть-чуть не в ту сторону идете=)...
Serge_Bliznykov, сократить имя файлы - это было больше желательно, чем необходимо, раз нельзя, то пусть будет длинное. Крайне не хотелось бы использовать сторонние программы типа WinRar'a и т.п. Использовать пароль и т.п. нет необходимости.
Остается сделать читаемую строку из кириллицы в не читаемую строку из латиницы с возможность восстановления исходной строки=)
Crunkordie вне форума Ответить с цитированием
Старый 05.05.2011, 22:16   #14
BingoBongo
Пользователь
 
Регистрация: 29.04.2011
Сообщений: 51
По умолчанию

че демогогию разводить?!
на пробуй

Цитата:
procedure XORing(Str: String);
var
i: Integer;
XORing_: Char;
Result: String;

begin

for i := 1 to Length(Str) do
begin
XORing := CHR((ORD(Str[i]) XOR ORD(Length(Str[i]) + SQR(17)) XOR ORD(37) XOR ORD(57) XOR ORD(77) XOR ORD(37)));
Result := Result + XORing;
end;

end;
это самое банальное, что можно предложить.
а если еще циферки менять, так и свой собственный шифр разработаешь!
BingoBongo вне форума Ответить с цитированием
Старый 05.05.2011, 22:55   #15
Crunkordie
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 48
По умолчанию

Цитата:
Сообщение от BingoBongo Посмотреть сообщение
это самое банальное, что можно предложить.
а если еще циферки менять, так и свой собственный шифр разработаешь!
Если не трудно, дай ссылку на дешифратор...
Crunkordie вне форума Ответить с цитированием
Старый 05.05.2011, 23:14   #16
BingoBongo
Пользователь
 
Регистрация: 29.04.2011
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Crunkordie Посмотреть сообщение
Если не трудно, дай ссылку на дешифратор...
ты пошутил??? это шифратор-дешифратор в одном

Result - выдает обработанный текст. Присваиваешь Str'у любой строковый параметр (например XOR(Edit1.Text)), а после Result := Result + XORing_; end; например Memo1.Text := Result;

чтобы дешифровать, вставь в тот же Edit1 то что получилось в Memo1. Он дишифранет.
BingoBongo вне форума Ответить с цитированием
Старый 06.05.2011, 08:46   #17
Crunkordie
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 48
По умолчанию

Цитата:
Сообщение от BingoBongo Посмотреть сообщение
ты пошутил??? это шифратор-дешифратор в одном

Result - выдает обработанный текст. Присваиваешь Str'у любой строковый параметр (например XOR(Edit1.Text)), а после Result := Result + XORing_; end; например Memo1.Text := Result;

чтобы дешифровать, вставь в тот же Edit1 то что получилось в Memo1. Он дишифранет.
Этот метод не совсем подходит, конечный результат может содержать недопустимые символы для имени файла + в результате много квадратиков

Последний раз редактировалось Crunkordie; 06.05.2011 в 08:52.
Crunkordie вне форума Ответить с цитированием
Старый 07.05.2011, 00:22   #18
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Учитывая все условия, Base64 самая лучшая кандидатура.
eduard93 вне форума Ответить с цитированием
Старый 07.05.2011, 09:08   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от eduard93
Учитывая все условия, Base64 самая лучшая кандидатура.
угу. согласен. ну, с небольшой модификацией, чтобы убрать из словаря недопустимые символы.


вот, написал пример.
строка шифруется с помощью XOR со строкой ключа.
Результат преобразуется в печатные символы по таблице BASE64 (потом выполняется замена некоторых символов, которые недопустимы в имения файла)

пример.
Код:
исходная строка "Иванов Иван Иванович 1985г." (длина 27 символов)
преобразуется в строку "wdrkrLSiO8Ha5Kx6iPnp1eqjsrc7OAE8dLlu" (длина 36 символов)
Внимание! Строка BASE64 - регистрозависимая (большие и малые буквы - это РАЗНЫЕ коды!)


т.к. код не сложный, позволю его прямо в сообщении привести (полный исходник проекта - во вложении!)
И, отдельно, скомпилированный EXEшник.

Код:
implementation
uses synacode;

const
  KeyPass = #09'8'#04'AZ@'#27; {Это ключ для шифрования.
     Он может быть любой. Главное, чтобы он был подлинее и послучайнее...}

{$R *.DFM}

function StringCoder(const s : string) : string;
var k, i : integer;
  key, sResult  : string;
begin
  key := KeyPass;
  sResult := s;
  k := 1;
  for i := 1 to Length(s) do
    begin
      sResult[i] := chr((ord(sResult[i]) XOR ord(key[k])));
      inc(k);
      if (k>length(key)) then k := 1;
    end;
  StringCoder := sResult
end;

procedure TForm1.btDecodeClick(Sender: TObject);
var ss : string;
  i : integer;
begin
  ss := edResult.Text;
  {вернём заменённые знаки}
  for i := 1 to Length(ss) do
    case ss[i] of
      '@' : ss[i] := '+';
      '$' : ss[i] := '/';
      '_' : ss[i] := '=';
    end;
  edSource.Text :=  StringCoder( DecodeBase64(ss));
  laLengthSource.Caption := IntToStr( Length(edSource.Text));
  laLengthResult.Caption := IntToStr( Length(edResult.Text));
end;


procedure TForm1.btEncodeClick(Sender: TObject);
var ss : string;
  i : integer;
begin
  ss := EncodeBase64(StringCoder(edSource.Text));
  {откорректируем недопустимые в имени файла знаки}
  for i := 1 to Length(ss) do
    case ss[i] of
      '+' : ss[i] := '@';
      '/' : ss[i] := '$';
      '=' : ss[i] := '_';
    end;
  edResult.Text := ss;
  laLengthSource.Caption := IntToStr( Length(edSource.Text));
  laLengthResult.Caption := IntToStr( Length(edResult.Text));
end;


ДОБАВЛЕНО
Использованная в первом варианте реализация BASE64 оказалась с "дырками" - при некоторых исходных кодах кодирование в BASE64 происходило неверно!
Поэтому я взял реализацию (целиком модуль) из бесплатной библиотеки Synapse
(The synchronyous socket library.)
погонял, вроде косяков не обнаружил..
Вложения
Тип файла: rar FNameCoderDemo_EXE.rar (177.9 Кб, 17 просмотров)
Тип файла: rar FNameCoderDemo_SOURCE.rar (10.8 Кб, 26 просмотров)

Последний раз редактировалось Serge_Bliznykov; 07.05.2011 в 10:28.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.05.2011, 12:50   #20
Crunkordie
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 48
По умолчанию

Спасибо большое за Вашу помощь. Буду тестить...
Crunkordie вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодирование Михаил93 Помощь студентам 5 27.02.2011 01:49
Кодирование asil Помощь студентам 1 02.05.2009 20:48
Кодирование. Blizzz Общие вопросы Delphi 5 19.01.2009 18:28
Кодирование Mss_Smith Помощь студентам 3 17.04.2007 14:46