Форум: "Основная";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];
ВнизНужна помощь касательно шифрования строк в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c