Цитата(V_G @ Mar 11 2010, 17:59)

Про собственно шифрование ничего не скажу. А вот про переворот вроде понятно.
На Си существует следующий порядок размещения многобайтных переменных в памяти: младший байт - по младшему адресу.
На Паскале (и в Дельфях) - похоже, наоборот: первыми (по младшим адресам) размещены старшие байты.
Чтобы не мучить МК, перепишите паскалевский код на Си
кароче получилось! Сначала поменял декодирование массива char-ов на массив long. Декодирую, отсылаю - пашет! пошел дальше: меняю размер декодируемого блока - (от 32-х long до 128 long) все равно пашет! тоесть для XTEA пофигу каким блоком декодировать. Далее, дай, думаю, вернусь к массиву char - сделал - РАБОТАЕТ! так и не понял в чем прикол был...

Коды на дельфи и на Си, кстати полностью идентичны...
Еще вопрос к спецам по Дельфи: как этот код оптимизировать? если оперирую с дин. массивом data - ничего не пашет, приходится перед кодированием забивать из Buf в data, а затем обратно в Buf из data и Buf уже в файл. Если проделываю BlockRead или BlockWrite над массивом data - прога вываливается..
Код
type TTeaData = array of Longword;
var
Buf: array[0..511] of Longword;
data: TTeaData;
Код
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
for i := 0 to (SizeOf(Buf) div 4) - 1 do
begin
data[i]:= Buf[i];
end;
if algo=0 then XTeaBlockEncrypt(data, MasterKey);
if algo=1 then XXTeaEncrypt(data, MasterKey);
for i := 0 to (SizeOf(Buf) div 4) - 1 do
begin
Buf[i]:= data[i];
end;
BlockWrite(ToF, Buf, NumRead, NumWritten);
Сообщение отредактировал Ivan Kuznetzov - Mar 12 2010, 05:49