Вверх ↑
Этот топик читают: Гость
Ответов: 3349
Рейтинг: 233
#1: 2011-03-10 18:54:27 ЛС | профиль | цитата
===RC6 Шифрование===
Источник
code_22894.txt



карма: 1

1
файлы: 1code_22894.txt [9.8KB] [857]
Голосовали:sаmakacd
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 26061
Рейтинг: 2120
#2: 2011-03-10 19:09:45 ЛС | профиль | цитата
Ivann, а на строковые данные не вариант перевести, с выходом на событие и на нижнюю точку Те сделать так, как сделаны компоненты Криптогафии
------------ Дoбавленo в 19.09:
Тааак. Память выделяем


procedure Initialize(AKey: string);
begin
GetMem(KeyPtr, KeySize);
FillChar(KeyPtr^, KeySize, #0);
Key := AKey;

InvolveKey;
end;

А освобождаем где
карма: 22

0
Ответов: 4641
Рейтинг: 334
#3: 2011-03-10 19:09:46 ЛС | профиль | цитата
Ivann, FPC
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#4: 2011-03-10 19:13:58 ЛС | профиль | цитата
Ravilr, спешу обоадовать, что добавлено никуда не будет, пока не будет приведено в божеский вид. Сыро, очень сыро

Вот, к примеру



while (i < Length(TempKey)) do
begin
Move((KeyPtr+j)^, K1, 4);
Move(TempKey[i], K2, 4);
K1 := ROL(K1, K2) xor K2;
Move(K1, (KeyPtr+j)^, 4);
j := (j + 4) mod KeySize;
Inc(i, 4);
end;

Бред работать со строковой переменной таким способом. Явно не смотрели, как это реализовано в компонентах "Криптография"
Огромная ценность строковой переменной, что под нее память выделяется автоматически и уничтожается тоже
карма: 22

0
Ответов: 4641
Рейтинг: 334
#5: 2011-03-10 19:17:42 ЛС | профиль | цитата
[offtop]nesco, ну ни чего, Ivann, надеюсь доведет до ума![/offtop]
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 3349
Рейтинг: 233
#6: 2011-03-10 19:20:10 ЛС | профиль | цитата
Я уже с 0 переделываю
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#7: 2011-03-10 19:22:55 ЛС | профиль | цитата
Ivann писал(а):
Я уже с 0 переделываю

Во! Это уже интереснее. Не забудь про выделение памяти с ее последующим освобождением. Если используешь выделение памяти внутри метода, то желательно применять блок TRY-FINALLY-END, тогда любой exit внутри блока приведет к переходу на финальную секцию FINALLY-END, где и производится освобождение ресурсов и освобождение контекстов, если таковые имеются
карма: 22

0
Разработчик
Ответов: 4697
Рейтинг: 426
#8: 2011-03-10 19:28:21 ЛС | профиль | цитата
nesco писал(а):
огда любой exit внутри блока приведет к переходу на финальный участок FINALLY-END, где и производится освобождение ресурсов и освобождение контекстов, если таковые имеются

Ого Век живи - век учись, не знал такого
карма: 10
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#9: 2011-03-10 19:31:06 ЛС | профиль | цитата
Assasin писал(а):
Век живи - век учись, не знал такого

А ты что, в моих компонентах такого не встречал, значит, плохо изучал код компонентов
------------ Дoбавленo в 19.30:
Вот, к примеру, кусок из таблицы



TRY
case dc.Data_type of
data_null: exit;
end;
if Assigned(PData(Control.LVItemData[Row])) then
begin
fd := PData(Control.LVItemData[Row]);
FreeData(fd);
end
else
begin
new(fd);
FillChar(fd^, sizeof(TData), 0);
end;
CopyData(fd, @dc);
Control.LVItemData[Row] := cardinal(fd);
FINALLY
FreeData(s);
END;

или из DS_ODBC


        Buffer := AllocMem( FD.ColumnSize + 4 );
TRY
R := SQLGetData( fSession, i + 1, SQL_C_DEFAULT, Buffer, FD.ColumnSize, @FD.ColumnSize );
if ((R = SQL_SUCCESS) or (R = SQL_SUCCESS_WITH_INFO)) and (FD.ColumnSize <> SQL_NULL_DATA) then
begin
St := NewMemoryStream;
St.Write( Buffer^, FD.ColumnSize );
St.Position := 0;
if scalar then
dtStream(ndt, St)
else
dtString(ndt, 'Binary');
free_and_nil(St);
end; { If }
FINALLY
FreeMem(Buffer);
END;
карма: 22

0
Разработчик
Ответов: 4697
Рейтинг: 426
#10: 2011-03-10 19:31:58 ЛС | профиль | цитата
nesco писал(а):
кусок из таблицы

Ни, в такие дебри я не совался, разве что только по нужде и не вникая
карма: 10
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#11: 2011-03-10 19:34:41 ЛС | профиль | цитата
Вот как раз, я привел вырезку из DS_ODBC, где показал, как освобождается память, если произойдет сбой внутри секции
карма: 22

0
Разработчик
Ответов: 4697
Рейтинг: 426
#12: 2011-03-10 19:37:33 ЛС | профиль | цитата
nesco писал(а):
Вот как раз, я привел вырезку из DS_ODBC, где показал, как освобождается память, если произойдет сбой внутри секции

Ага, я уже свой пробный метод написал быстренько и исследовал его на характеристики, уже понял как работает - будем пользоваться
карма: 10
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#13: 2011-03-10 19:41:00 ЛС | профиль | цитата
Assasin писал(а):
будем пользоваться

Есть еще один блок -- финальное завершение исключений EXCEPT-FINALLY-END. Он позволяет корректно завершить осовбождение ресурсов в случае непредвиденных исключений, причем, EXCEPT становится SILENT, те тихий
карма: 22

0
Ответов: 3349
Рейтинг: 233
#14: 2011-03-11 19:36:50 ЛС | профиль | цитата
 while (i < Length(TempKey)) do
begin
Move((KeyPtr+j)^, K1, 4);
Move(TempKey[i], K2, 4);
K1 := ROL(K1, K2) xor K2;
Move(K1, (KeyPtr+j)^, 4);
j := (j + 4) mod KeySize;
Inc(i, 4);
end;
nesco, А тут я не очень понял, как можно по другому?
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#15: 2011-03-11 19:44:33 ЛС | профиль | цитата
Ivann писал(а):
А тут я не очень понял, как можно по другому?

Оставь пока "как есть"
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)