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

Вниз

Шифрование по паролю, косяк с пробелами   Найти похожие ветки 

 
jcrush ©   (2005-05-26 06:04) [0]

procedure tcl.Code(var text: string; password: string;
decode: boolean);
var
i, PasswordLength: integer;
sign: shortint;
begin
PasswordLength := length(password);
if PasswordLength = 0 then
 Exit;
if decode then
 sign := -1
else
 sign := 1;
for i := 1 to Length(text) do
 text[i] := chr(ord(text[i]) + sign *
 ord(password[i mod PasswordLength + 1]));
end;


 
Digitman ©   (2005-05-26 09:10) [1]


> косяк с пробелами


и что ж за "косяк", позвольте осведомиться ?


 
jcrush ©   (2005-05-26 09:43) [2]

пробел заменяется символом после расшифровки, а не пробелом как должно быть..


 
Digitman ©   (2005-05-26 09:50) [3]

не знаю уж, что у тебя там заменяется, но у меня этот код работает нормально :

procedure TForm1.Button1Click(Sender: TObject);
var
 t: string;
begin
 t:= "A B C D E F G H";
 code(t, "1  2  3  4  5  6  ", false);
 showmessage(t);
 code(t, "1  2  3  4  5  6  ", true);
 showmessage(t);
end;


как видишь, пробелы есть и в кодируемой строке и в строке пароля


 
jcrush ©   (2005-05-26 09:53) [4]

Так стоп, все нормально, похоже это из-за другого...
короче расшифровывается сообщение пришедешее по winpopup протоколу... и походу там в процессе все и гадится... тока понять где... без шифровки сообщение то с прабелами и все впорядке..


 
Digitman ©   (2005-05-26 09:59) [5]


> сообщение пришедешее по winpopup протоколу


да по барабану откуда оно пришло)

для успешной работы твоего алгоритма это сообщение должно иметь формат AnsiString


 
jcrush ©   (2005-05-26 10:13) [6]

мне кажется не по барабану...
попробуй сам:

http://stfw.ru/jcrush/soft/jmess.exe

отошли сам себе сообщение с паролем..


 
jcrush ©   (2005-05-26 10:18) [7]

кажеться я понял в чем дело...
зачем при отправке и получении по winpopup всему виной эта функция:
OEMToChar(PChar(Msg),PChar(Msg));


 
Digitman ©   (2005-05-26 10:18) [8]

и зачем мне это ?
черт-те что за код) ... мой Касперский и Клам категорически возражают)

ты с отладчиком-то дружишь ?)


 
Digitman ©   (2005-05-26 10:19) [9]


> кажеться я понял в чем дело


вот именно ...

я ж тебе стазу сказал - AnsiString !)


 
КиТаЯц ©   (2005-05-26 10:28) [10]

jcrush ©   (26.05.05 10:18) [7]
Кхм... Как вариант
OEMToChar(PAnsiChar(Msg),PAnsiChar(Msg));


 
VMcL ©   (2005-05-26 10:40) [11]

Подозреваю, что chr(ord(text[i]) + sign *
ord(password[i mod PasswordLength + 1]));
может дать нуль (#0), а для OemToChar это "смертельно".


 
jcrush ©   (2005-05-26 10:47) [12]

Ничего из перечисленного не подошло :(
ситуация такая:
1 шифруется
2 переводится в дос
3 отправляется
4 переводится в нормальное состояние
5 расшифровывается

без 1,5 с пробелами все впорядке..


 
jcrush ©   (2005-05-26 10:50) [13]

VMcL прав, всмысле дать 0?


 
Digitman ©   (2005-05-26 10:51) [14]


> jcrush ©   (26.05.05 10:47) [12]


не пересмотреть ли тебе выбор/реализацию алгоритма шифрации/дешифрации ?


 
jcrush ©   (2005-05-26 10:53) [15]

все спасибо, я понял, вопрос снят.. спасибо


 
jcrush ©   (2005-05-26 10:57) [16]

Хотя нет не снят :(


 
VMcL ©   (2005-05-26 11:18) [17]

>>jcrush

Можно узнать комбинацию параметров, при которой приведенная процедура работает некорректно?


 
jcrush ©   (2005-05-26 12:20) [18]

если после того как зашифровал, делаю:
OEMToChar(PAnsiChar(Msg),PAnsiChar(Msg));


 
Digitman ©   (2005-05-26 12:23) [19]

а где у тебя соответствующий CharToOEM() ?


 
VMcL ©   (2005-05-26 12:47) [20]

>>jcrush ©   (26.05.05 12:20) [18]

Э-э-э... я имел в виду значения параметров.


 
jcrush ©   (2005-05-26 12:48) [21]

когда сообщение приходит я его  CharToOEM() потом расшифровываю..


 
jcrush ©   (2005-05-26 12:56) [22]

каких?
CharToOEM((PAnsiChar(Msg),PAnsiChar(Msg));


 
Digitman ©   (2005-05-26 13:08) [23]


> когда сообщение приходит я его  CharToOEM() потом расшифровываю


с какого перепугу-то ?

в дан.случае передаваемые сообщения должны, наверно, иметь OEM-кодировку, т.е. после шифрации ПЕРЕД передачей ты должен его перекодировать в ОЕМ (CharToOEM), и , соответственно, на другой стороне после приема OEM-данных сначала перекодировать их в Ansi (OEMToChar), а уж после этого дешифровать  ...



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

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

Наверх




Память: 0.52 MB
Время: 0.044 c
3-1115900109
pavel_guzhanov
2005-05-12 16:15
2005.06.14
вопрос про DBGrid


4-1114276037
Виталик
2005-04-23 21:07
2005.06.14
Вопрос по логону.


6-1111590160
bober
2005-03-23 18:02
2005.06.14
подключение диска


3-1115812937
Юленька
2005-05-11 16:02
2005.06.14
Удаление столбцов


1-1117468406
PIF
2005-05-30 19:53
2005.06.14
Компиляция res файла