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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2008, 23:22   #1
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию Кодирование на основе ключевого слова и шифрование файла

Грубо говоря есть пороль, например 12TU43 и есть ключевое слово, по размеру равное размеру пороля, например МОЛОКО Помогите придумать алгоритм как это связать, никак не могу додуматься.
И еще подскажите где бы закодированое слово хранить? Я думал скидывать его в ини файл и потом этот файл зашифровать, но шифровать не могу. Прошу помощи у знающих людей.

Заранее благодарен.
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 15.09.2008, 10:37   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

немного непонятно, ключевое слово жестко зашито в программу?
Можете использовать "классику" - побайтный XOR пароля и ключевого слова. Это самое простое, что может быть. При чём, при достаточной длине ключа (когда длина ключевого слова больше и равна шифротексту) - защищенность достаточно высока.

либо используйте готовые библиотеки для шифрации.
Но тут уже настоящие и очень серьёзные алгоритмы применяются.
chipher.zip Delphi Encryption Compedium Part I v.3.0 FWS 678 k 31 Aug 1999
by Hagen Reddmann
Remarks: freeware
тоже с исходниками идёт.

или
приятель очень хвалил от TurboPower

tplockbox_2_07.zip TurboPower LockBox 2.07

LockBox is a cross-platform toolkit for data encryption. It contains
routines & components for use with Borland Delphi, C++Builder, & Kylix. It
provides support for Blowfish, RSA, MD5, SHA-1, DES, triple- DES, Rijndael,
& digital signing of messages.

TurboPower LockBox project page:

http://sourceforge.net/projects/tplockbox

Url: http://download.sourceforge.net/tplo...ckbox_2_07.zip

Бесплатная. Исходники. Примеры. (всё вместе в архиве 315 кил)

или
http://www.rsdn.ru/article/crypto/easypgp.xml
или
Secure.BlackBox.v3.1.48
_http://www.eldos.com/sbb/
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.09.2008, 10:43   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
И еще подскажите где бы закодированое слово хранить?
лучше закодированное слово вообще не хранить - храните хэш (например, рекомендую MD5)
Когда пользователь вводит пароль, введённый пароль шифруете, получаете от него хэш и сравниваете с сохранённым - если совпал - значит ввели правильно, нет - отдыхай... ;-)

и вообще - многое зависит от конкретных деталей - что Вы делаете, для чего и т.д. и т.п.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.09.2008, 13:35   #4
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

Ну, у меня есть серийник винта, он кодируется с помощью ключевого слова (это я уже сделал), при переносе с одного компа на другой, программа палит что винт заменили, и просит ввести новый код для программы, этот же код генерирую я на отдельной программе. То есть единственное что мне осталось это где лучше всего хранить сам серийник винта, что бы если его спалили то он был или каракулями или что бы его вообще не найти.
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 16.09.2008, 09:52   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да шифрованный текст хранить можно где угодно (на то он и зашифрованный!!
Хоть в той же INI-шке!

Сначала зашифруйте (например, по "классике" прогоните XOR со своим ключевым словом (и, кстати,
для ключевого слова лучше брать что-то типа Az1PKmZZm00#32$.)
Потом преобразуйте полученное зашифрованное значение в строку (способов миллион :-)
например, начиная от base64 (смотри вложенный файлик base64dec.dpr ;-))
и до банального преобразования в HEX:
Код:
var
  SNew, Password, S : string;
  i : integer;
begin
  SNew := '';
  Password := 'МОЛОКО';
  S := 'Юстас';
  for i:=1 to Length(s) do
     SNew := SNew +
       IntToHex( ord(S[i]) xor ord(Password[i]),2 );
  ShowMessage(SNew);
end;
Вложения
Тип файла: rar base64dec.rar (1.3 Кб, 29 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2008, 22:09   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

В немного более общем виде (да и попроще в реализации) то, что в base64dec.rar:
Код:
var Base64Table: string;
...
Base64Table:='abcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZ';
...
function DecodeBase64(cStr: string): string;
var
  ResStr: string;
  DecStr: string;
  RecodeLine: array[1..76] of byte;
  f1: word;
  l: integer;
begin
try
  l := length(cStr);
  ResStr := '';
  for f1 := 1 to l do
    if cStr[f1]= '=' then
      RecodeLine[f1] := 0
    else
      RecodeLine[f1] := pos(cStr[f1], Base64Table) - 1;
  f1 := 1;
  while f1 < length(cStr) do
  begin
    DecStr := chr(byte(RecodeLine[f1] shl 2) + RecodeLine[f1 + 1] shr 4) +
      chr(byte(RecodeLine[f1 + 1] shl 4) + RecodeLine[f1 + 2] shr 2) +
      chr(byte(RecodeLine[f1 + 2] shl 6) + RecodeLine[f1 + 3]);
    ResStr := ResStr + DecStr;
    inc(f1, 4);
  end;
except
ResStr:='';
end;
  DecodeBase64 := ResStr;
end;

function EncodeBase64(const inStr: string): string;
  function Encode_Byte(b: Byte): char;
  begin
    Result := Base64Table[(b and $3F)+1];
  end;

var
  i: Integer;
begin
  i := 1;
  Result := '';
  while i<=Length(InStr) do
  begin
    Result := Result + Encode_Byte(Byte(inStr[i]) shr 2);
    Result := Result + Encode_Byte((Byte(inStr[i]) shl 4) or (Byte(inStr[i+1]) shr 4));
    if i+1 <=Length(inStr) then
      Result := Result + Encode_Byte((Byte(inStr[i+1]) shl 2) or (Byte(inStr[i+2]) shr 6))
    else
      Result := Result + '=';
    if i+2 <=Length(inStr) then
      Result := Result + Encode_Byte(Byte(inStr[i+2]))
    else
      Result := Result + '=';
    Inc(i, 3);
  end;
end;
Использую (с некоторыми изменениями) эти две функции.
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автозаполнение ключевого поля Avalonix БД в Delphi 6 29.05.2008 12:33
вывод слова из файла, ошибка Ceprey Общие вопросы C/C++ 4 17.04.2008 12:05
Манчестерское кодирование Боня Помощь студентам 1 17.05.2007 17:07
Кодирование Mss_Smith Помощь студентам 3 17.04.2007 14:46
Шифрование файла с помощью пароля Hallo Обсуждение статей 3 09.02.2007 10:50