Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.30;
Скачать: CL | DM;

Вниз

Нужна помощь касательно шифрования строк в Delphi   Найти похожие ветки 

 
Nik Samivan   (2003-12-15 17:19) [0]

Привет умельцам Delphi!

Нужна Ваша помощь касательно шифрования строк.
Дело вот в чем, значит, есть на форме Edit1 и Edit2
В первое поле юзер вводит строку с данными, а во вторую пароль для шифровки этой строки,
Затем (по событию OnClick для Button1) нужно считать данные из Edit1 и зашифровать их по паролю, введенного в Edit2, затем это нужно сохранить в обычный .txt файл. (ну, потом, соответственно, нужно будет считывать и расшифровывать)
Так вот все это дело я сначала делал путем простой функции, обеспечивающей шифрование по XOR алгоритму:

function CryptInfo(Input,Key: string):string;
var
i,j: integer;
tmps,text:string;
begin
text:=Input;
for i:=1 to length(text) do
begin
if i>length(key) then j:=i mod length(key) else j:=i;
tmps:=tmps+chr((ord(text[i]))xor(ord(key[j])));
end;
result:=pchar(tmps);
end;

(Потом, соответственно, вызывал ее – info:= CryptInfo (Text, key) );

Когда только я первый раз глянул, проверить работает ли эта функция или нет, то не заметил ничего подозрительного, но потом выяснилось, что пароль и сами данные для шифрования необходимо набирать в различных раскладках, а иначе будут страшные глюки.
Вы представляете, что если Вы набираете данные на английском языке, то пароль должен быть непременно на русском!!!
Так вот, товарищи программеры, в связи с этим у меня вопрос: кто-нибудь знает, как исправить это?
То есть, что бы и данные и пароль могли бы быть совершенно любыми и на любых языках и в любых регистрах, а так же, что бы результат был пригоден для сохранения в текстовый файл?
Ну, и естественно, алгоритм должен быть не хуже чем XOR, а лучше, если будет лучше :)

Заранее спасибо,
надеюсь на Вашу помощь!
Nik Samivan.


 
Sha ©   (2003-12-15 17:37) [1]

Работай со всем текстом как с одной строкой - глюки пропадут.


 
Sha ©   (2003-12-15 17:39) [2]

А с файлом - BlockRead/BlockWrite


 
Dimka Maslov ©   (2003-12-15 17:54) [3]

примени дополнительное кодирование, увеличивающее объём информации, но дающее в итоге исключительно печатаемые символы. Например url-кодирование: http://delphibase.endimus.com/?action=viewtopic&topic=strcode


 
Nik Samivan   (2003-12-15 20:56) [4]

Привет, Sha!
А можно поконкретнее, что ты имел ввиду, говоря
> Работай со всем текстом как с одной строкой - глюки пропадут.

Мне не совсем понятно, если можно,
приведи какой-нибудь пример, как исправить глюки.


 
Nik Samivan   (2003-12-15 21:04) [5]

Привет, Dimka Maslov!

А URL-кодирование оно шифровуется разве по паролю? Или я что-то путаю? Но мне желательно, что бы расшифровать данные можно было только зная пароль...
Объясни подробнее (если не в лом) как там шифруются данные, ведь там для шифровки не нужен пароль (как мне кажется)...


 
Sha ©   (2003-12-16 12:59) [6]

>Nik Samivan (15.12.03 20:56) [4]
>Мне не совсем понятно, если можно,
>приведи какой-нибудь пример, как исправить глюки.

Пожалуйста. Обработку ошибок чтения/записи напиши сам.

function Cripto(const s, key: string): string;
begin;
Result:=s;
end;

procedure TForm1.btnLoadClick(Sender: TObject);
var
f: file;
s: string;
begin;
AssignFile(f,"test.txt");
Reset(f,1);
SetLength(s,FileSize(f));
BlockRead(f,(pointer(s))^,length(s));
CloseFile(f);
Memo1.Text:=Cripto(s,"");
end;

procedure TForm1.btnUnloadClick(Sender: TObject);
var
f: file;
s: string;
begin;
s:=Cripto(Memo1.Text,"");
AssignFile(f,"test.txt");
Rewrite(f,1);
BlockWrite(f,(pointer(s))^,length(s));
CloseFile(f);
end;


 
Amoeba ©   (2003-12-16 14:00) [7]

Скачай библиотеку QStrings (найдешь поисковиком), там есть функции шифрования строк с использованием пароля.


 
Dimka Maslov ©   (2003-12-16 14:19) [8]

сначала с паролем, а потом url-кодирование


 
Nik Samivan   (2003-12-16 14:21) [9]

Dimka Maslov, а что, это генеально!!!
И что срасботает? Щас проверим!


 
Nik Samivan   (2003-12-16 14:43) [10]

Да, Дим, спасибо, кажись будет работать,
вот только это все равно что без шифра - стойкости то мало, как видно, или попрет? Как думаешь?
Amoeba, спасибо тоже за совет, поищу, непременно!

А, уважаемый Sha, Вы что написали такое совсем без комменнтариев, особенно прикольно это:

function Cripto(const s, key: string): string;
begin;
Result:=s;
end;

Ладно, я вроде сообразил, сделаем, как Диман советовал - сначала по паролю, потом url.


 
zapped ©   (2003-12-16 15:04) [11]

позвольте высказать ИМХО
уже на будущее, видать :))
по-моему строчка
j:=i mod length(key);
является полным эквивалентом
if i>length(key) then j:=i mod length(key) else j:=i;


 
Sha ©   (2003-12-16 15:14) [12]

Nik Samivan (16.12.03 14:43) [10]

А мне прикольно, что тебе прикольно :)



Страницы: 1 вся ветка

Текущий архив: 2003.12.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-99561
The Vizit0r!
2003-12-18 00:26
2003.12.30
КОЛЕСИКО


3-99478
rumrunner
2003-12-04 22:00
2003.12.30
ADO briefcase model ne rabotaet s master/detail?


14-99788
ИдиотЪ
2003-12-05 08:55
2003.12.30
резонанс


8-99650
Kaylang
2003-08-20 14:20
2003.12.30
Где можно найти нормальную информацию по TChart?


1-99644
webpauk
2003-12-16 18:28
2003.12.30
PopupMenu