Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
3-99470
Adoon
2003-12-04 13:15
2003.12.30
Как узнать данные записей в TDataSet не перемещаясь по ним?


3-99500
Ru
2003-12-04 11:35
2003.12.30
Об SQL


14-99735
Agrippina
2003-12-04 18:26
2003.12.30
Причины и следствия


1-99528
velial
2003-12-16 11:56
2003.12.30
Передача параметров в процедуру/функцию


11-99515
Юрий
2003-04-15 15:26
2003.12.30
ForceDirectories





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский