Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (до версии 2009) - часть 6

Автор: Coltrain
Дата сообщения: 17.12.2012 10:19
R3Pa4eK

Цитата:
пример алгоритма BWT в Delphi?

Подойдет? http://coding.derkeiler.com/Archive/Delphi/borland.public.delphi.language.basm/2004-09/0030.html
Автор: AHTOLLlKA
Дата сообщения: 26.01.2013 15:10
всем привет!
пытаюсь научиться адекватно парсить пакеты, нужно что-то на подобии этого чтобы получилось



Код:
MyType = packed record
UID: Dword;
NickLen: byte;
Nick: String;
Other: Byte;
end;
PMyType = ^MyType;

.....................................

var
t : PMyType;
buf : TByteArray;
begin
buf:=''; //тут данные
t := PMyType(@buf[0]);
len:=t^.NickLen;
SetString ( nick ,pchar(@t.Nick),len);
Автор: A_V
Дата сообщения: 27.01.2013 08:44
AHTOLLlKA


Цитата:
но когда я получаю "Other" то он выдает байт не после строки как мне нужно, а выдает 4-ый байт с начала строки

строка - это указатель, простым доступом через поля структуры
(т.е обращаясь по жестко заданному смещению) ты не получишь данные после нее,
т.к на этапе компиляции не известно, сколько в строке байт.

т.е читать данные надо примерно так:

Код:
ptr: PByte
...
ptr := @t.NickLen;
inc(ptr, SizeOf(Byte));
nick := ReadWidestring(ptr, t.NickLen);
MessageLen := ReadByte(ptr);
Message := ReadWidestring(ptr, MessageLen);
Unk := ReadByte(Ptr);
Автор: AHTOLLlKA
Дата сообщения: 28.01.2013 15:28
A_V, спасибо за ответ!

может кто подскажет как мне такое провернуть?
есть array of byte с данными - 8195
мне нужно достать 195 от туда, превратив в даже в DEC - 408

почему то не могу реализовать без тупого превращения в строку и копирования (( а это ниразу не гуд
Автор: A_V
Дата сообщения: 29.01.2013 09:10
AHTOLLlKA
а в чем проблема?
a[1]*$10*$10+a[2]*$10+a[3]
ну или циклом пройтись, если нидексы не жестко заданы.
правда как из 195 получается 408 я не уловил, 195h = 405d
Автор: AHTOLLlKA
Дата сообщения: 30.01.2013 02:43
вот мне подсказали как сделать

Код: ((packet[0] and $0F) shl 8) + packet[1]
Автор: XPerformer
Дата сообщения: 30.01.2013 10:33
В копилку методов сортировки (или индусские программисты курят в сторонке)
[more=Sleepsort ]


Код: program Sleepsort;

var
items: TArray<integer>;
i: integer;

begin
randomize;
writeln('Random: ');
setlength(items, 25);
for i := 0 to High(items) do
begin
items[i] := random(length(items) * 4);
write(IntToStr(items[i]) + ' ');
end;
writeln;
writeln('Sorted: ');
for i := 0 to high(items) do
begin
TSortThread.Create(items[i]);
end;
readln;
end.
unit uSortThread;

interface

uses
Classes;

type
TSortThread = class (TThread)
private
fValue : integer;
protected
procedure Execute; override;
public
constructor Create(n : integer);
end;

implementation

uses SysUtils;

constructor TSortThread.Create(n: integer);
begin
inherited Create;
fValue := n;
end;

procedure TSortThread.Execute;
begin
sleep(fValue * 333); // artificial slowdown, to make the process visible for the human eye
write(IntToStr(fValue)+' ');
end;

end.
Автор: Ognev
Дата сообщения: 01.02.2013 16:27
Всем доброго времени суток!

Подскажите, есть ли готовое решение по шифровке/расшифровке файлов любым асимметричным алгоритмом. Предполагается использовать под Delphi XE2. С ходу сам ничего работающего найти не смог.
Автор: ant0ni02004
Дата сообщения: 02.02.2013 00:36
Ognev
не думаю что это будет достаточно быстро...
асимметричное шифрование в этом смысле обычно используется, чтобы передать ключ для быстрого симметричного алгоритма (как в PGP)
Автор: Linco
Дата сообщения: 02.02.2013 13:56
Априори асимметричные алгоритмы медленней, чем симметричные. Выбор их может быть обусловлен необходимостью распространения ключей через незащищенные каналы связи.
Однако, имхо, для Ваших задач их скорость буде достаточной попробуйте RSA или ГОСТ
Автор: Ognev
Дата сообщения: 02.02.2013 23:36
ant0ni02004, Linco,
мне не для сети, файлы маленькие, так что скорость большой роли не играет. Но мечталось найти уже готовый алгоритм, чтобы не реализовывать самому велосипед. Либо исходники, либо dll - через компоненты не очень хочется. Я наткнулся на коллекцию готовых алгоритмов FGInt (Fast Gigantic Integers), попробовал оттуда RSA, но нормально не заработало - временами неправильно раскодирует. Может что еще присоветуете? Может кто PGP в Дельфи прикручивал, или еще что-то.
Автор: ant0ni02004
Дата сообщения: 03.02.2013 14:26
Ognev
так смысл PGP, грубо говоря, в том, что при помощи RSA пересылается мааааленький (по размеру) ключик для быстрого симметричного алгоритма (напр. 3DES). И шифрование собственно файлов (или даже целых дисков) происходит именно симметриком (а Вам нужно именно ассиметриком, если я правильно понимаю)

а что за ошибки в FGInt обнаружились?
P.S.
по поводу pgp + delphi - поиск выдаёт много интересных ссылок как их подружить
pgpsdk хотя бы
Автор: Ognev
Дата сообщения: 03.02.2013 22:22
ant0ni02004

Цитата:
так смысл PGP, грубо говоря, в том, что при помощи RSA пересылается мааааленький (по размеру) ключик для быстрого симметричного алгоритма (напр. 3DES).

Я в курсе, но у меня другая задача. Мне нужно маленький ключик (или пару десятков, не суть) зашифровать так, чтобы мой exe-шник его раскодировал, но в нем не содержалось ключа, которым можно было бы генерить другие такие файлы. Это для лицензирования.


Цитата:
а что за ошибки в FGInt обнаружились?

Я с кодом особо не разбирался, сделал пробный exe-шник с тремя Memo. Основной глюк в том, что некоторые тексты неверно раскодируются. Грубо говоря, вбил строчку в Memo - нормально раскодировалось, вбил еще - нормально, вбил третью - крокозябры. Возможно, у меня руки кривые, или может FGInt не рассчитан на юникодные строки - я пока не разбирался, но так как к нему нет документации, то вряд ли буду. Единственно, проверю не связан ли глюк по раскодированию с концевым переносом строкb в Memo.


Цитата:
по поводу pgp + delphi - поиск выдаёт много интересных ссылок

Из того, что я бегло просмотрел про pgpsdk осталось ощущение, что использовать его для моей задачи можно, наверное, но это будет похоже на сбор грибов на танке - соберешь, но пешком и без пушки удобнее ))) Мне ж всего нужен в проге маленький кусочек кода по раскодированию открытым ключом готового файла, генерацию самого файла я готов делать и какими-нибудь утилитами, если это будет проще. И если не получится найти достаточно простой вариант того, что хочется, скорее всего буду думать в стандартную сторону - зашифровано симметричным алгоритмом, внутри электронная подпись.
Автор: XPerformer
Дата сообщения: 08.02.2013 09:54
Подскажите функцию
аналог PoxEx, но так чтобы можно было задать не только сколько символов пропустить от начала, но сколько символов просматривать при поиске - то есть чтобы можно было игнорировать начало и конец строки.
Строка очень большая, операций поиска подстроки над ней производится тысячи, поэтому вариант вырезать подстроку с помощью Copy и потом в ней искать не подходит
Автор: k94kwk1
Дата сообщения: 10.02.2013 12:33
Здравствуйте!

Вопрос:
Использую Delphi: ADOConnection+ AdoQuerty + Datasource для доступа к БД Access. Данные отображаются в DBGRid. Есть три операции для работы с записями: правка, добавить, удалить.
Реализуется многопользовательский режим. Т.е. несколько пользователей могут подключаться к БД и выполнять эти операции.
При добавлении или правке – проблем нет я все решаю.
Вопрос с удалением данных: что делать, если в момент, когда один из пользователей правит какую-либо запись другой ее удаляет???? У меня после завершения правки прога начинает орать, что запись была удалена и не выпускает с записи пока не нажму “OK”. Хотелось бы как то поцивилизованее эту ситуацию обрабатывать?


Например:

а) закрывать запись от одновременного редактирования двумя пользователями (т.е. если один встал на эту запись, то другой не может)
б) выводить сообщение о недоступности редактирования записи только один раз
в) ваш вариант???


Что порекомендуете?

Автор: ant0ni02004
Дата сообщения: 10.02.2013 15:34
k94kwk1
блокировки наше всё
смотрите в сторону select for update
Автор: Frodo_Torbins
Дата сообщения: 11.02.2013 14:29
k94kwk1
Вроде Адо должен уметь ставить автоматические блокировки. Вот в этой серии что то было об этом: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=408
Автор: FuryArrow
Дата сообщения: 12.02.2013 12:06
Delphi 7
Имеется файл ресурсов:
Код: 101 BITMAP 101.BMP
Автор: landy
Дата сообщения: 12.02.2013 12:56

Цитата:
Я наткнулся на коллекцию готовых алгоритмов FGInt (Fast Gigantic Integers), попробовал оттуда RSA, но нормально не заработало - временами неправильно раскодирует.

В какой версии Delphi ты это пробовал? FGint написано для семёрки, в более новых нужно использовать явное приведение к AnsiChar (из-за введения Unicode.)

Для твоей задачи идея и библиотека вполне подходят, но есть маленькое условие - тебе нужно шифровать ключ закрытым ключом (D+N), а расшифровывать - открытым (E+N).
Автор: Ognev
Дата сообщения: 12.02.2013 19:41
landy,


Цитата:
В какой версии Delphi ты это пробовал?

Delphi XE2


Цитата:
FGint написано для семёрки, в более новых нужно использовать явное приведение к AnsiChar (из-за введения Unicode.)

Читал про это в виде предположения. Но, честно сказать, желания лазить по коду без комментариев, который реализует то, что я плохо понимаю, не возникло. И хоть бы какие примеры использования были.


Цитата:
есть маленькое условие - тебе нужно шифровать ключ закрытым ключом (D+N), а расшифровывать - открытым (E+N).

Да, я в курсе. Наверное, поэтому первое знакомство с использованием PGP в Delphi произвело на меня столь гнетущее впечатление - там было описано все, что мне не надо ))) Кстати говоря, в инете этот момент плохо освещен. Я много где встречал утверждение, что асимметричные алгоритмы используются для шифрования открытым ключом и расшифровки закрытым. Но почти нигде не написано, что с таким же успехом можно делать наоборот.

Я нашел тут на просторах инета простейшую реализацию, сводящуюся к шифрованию целых чисел целочисленными ключами. Чуть поднатужившись переписал это на Int64. Смутно полагаю, что криптостойкость тут никакая. Но склоняюсь пока к этому варианту, так как с головой влезать в реализацию шифрования не очень хочется. Именно поэтому и поднял вопрос о готовом решении. Как шифровать этим алгоритмом файлы я ума не приложу ))) Но есть вариант шифровать не файл лицензии, а, грубо говоря, некий серийный номер, который будет преобразован в Int64 перед шифрованием.
Автор: k94kwk1
Дата сообщения: 12.02.2013 21:18
ПО поводу блокировок
ADO ставит блокировки, в т.ч. и те, которые мне нужны. В частности ltPessimistic . Но при установки в ADOQuery блокируется не запись, а вся таблица. Почему не понимаю!
Автор: ant0ni02004
Дата сообщения: 12.02.2013 21:36
k94kwk1
так читайте таблицу(select) в read-only, а редактируйте 1 запись в pessimistic (т.е. в другом adoquery)
и еще - обратите внимание на TBetterAdoDataSet, он получше TAdoQuery будет
и всё-таки - используйте select for update where id=:id
Автор: landy
Дата сообщения: 13.02.2013 08:51

Цитата:
Кстати говоря, в инете этот момент плохо освещен. Я много где встречал утверждение, что асимметричные алгоритмы используются для шифрования открытым ключом и расшифровки закрытым. Но почти нигде не написано, что с таким же успехом можно делать наоборот.

Теоретически - да, но на практике, например Windows CryptoAPI (которая позволяет использовать системные встроенные модули шифрования, в том числе RSA) такой режим работы не поддерживает.

Исправить же FGInt несложно - полагаю (но не проверял), что достаточно будет заменить всюду PChar на PAnsiChar.
Автор: Ognev
Дата сообщения: 13.02.2013 09:29
landy,


Цитата:
Исправить же FGInt несложно - полагаю (но не проверял), что достаточно будет заменить всюду PChar на PAnsiChar.

Попробую, может заработает.
Автор: landy
Дата сообщения: 13.02.2013 19:39

Цитата:
Исправить же FGInt несложно - полагаю (но не проверял), что достаточно будет заменить всюду PChar на PAnsiChar.

Попробую, может заработает.

Ну и, естественно, не забыть string -> AnsiString
Автор: Ognev
Дата сообщения: 13.02.2013 19:57
landy,

Цитата:
Ну и, естественно, не забыть string -> AnsiString

Да, только сейчас проникся реальной глубиной проблемы перехода на Unicode )))

FGInt пока не трогал, смотрел другие варианты. Убедился, что тот вариант, что

Цитата:
Я нашел тут на просторах инета простейшую реализацию, сводящуюся к шифрованию целых чисел целочисленными ключами.

не то, что я думал. Расшифровка идет неправильно, если числа большие. Ткните, если можно на реальную реализацию шифрования RSA достаточно большого целого числа целочисленными ключами.

Ну и на повестке попробовать дожать FGInt. Отпишусь по окончанию.
Автор: Ognev
Дата сообщения: 14.02.2013 11:08
Отчет о проделанной с FGInt работе.

1) Все в FGInt явно привел к Ansi.
2) Нашел у себя косяк с вычислением приватной экспоненты (засовывал при ее вычислении n вместо функции Эйлера).
3) Использовал для хранения шифрованного-дешифрованного текста не RichEdit.Lines.Text, а глобальные переменные AnsiString.

После этого все заработало! Можно ли FGInt явно не приводить к Ansi не проверял.

Всем большое спасибо за помощь!
Автор: V1s1ter
Дата сообщения: 14.02.2013 11:20
Всем кто юзает Absolute Database
После перехода с 6.20 на 7.10 (возможно проблемма была и ранее) при попытке, в Object Incpector, установить свойства таблицы Active в True вылетает такая ошибка
Table file decompression error. Possible table corruption 0 - Native error: 20189.
Иногда бывает не вылетает. Делфи 2007. Ситуация повторяется везде даже на ихних демках. Откомпилированные и запущенные программы эту ошибку не выдают.
Кто знает где собака порылась?
Автор: XPerformer
Дата сообщения: 14.02.2013 11:36
V1s1ter
Судя по changelog, они эту ошибку уже несколько билдов пытаются исправить
Под XE проблем не испытываю

Добавлено:
правда, шифрование таблиц не включаю
Автор: StalkerSoftware
Дата сообщения: 01.03.2013 16:58
Hi All,

Вопрос по типам.
Есть C++ функция

Код:
BOOL WINAPI CryptSignMessage(
_In_ PCRYPT_SIGN_MESSAGE_PARA pSignPara,
_In_ BOOL fDetachedSignature,
_In_ DWORD cToBeSigned,
_In_ const BYTE *rgpbToBeSigned[],
_In_ DWORD rgcbToBeSigned[],
_Out_ BYTE *pbSignedBlob,
_Inout_ DWORD *pcbSignedBlob
);

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

Предыдущая тема: MPO File


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.