Нужно представить файл в шестнадцатеричном виде и найти в нём определённую текстовую строку. Вот что я смог:
var f:file of byte;
s,z,buf:string;
x:byte;
a,b,bufsize:integer;
begin
assignfile(f,'C:\***************************************************');
reset(f);
for a:=1 to filesize(f)-15 do
begin
for b:=a to a+14 do
begin
seek(f,b);
read(f,x);
s:=s+inttostr(x);
end;
bintohex(pchar(s),pchar(z),bufsize);
if z='**************' then begin
edit1.text:=z;
break;
end
else z:='';
end;
end;
BinToHex не делает того, чего ты хочешь... Эта процедура берет число (число, а не строку), и возвращает его представление в 16-ричной СС. Тебе что найти-то надо? Файл байтов, допустим, начинается сочетанием байт со значениями от 1 до 14... Тогда приведенная к 16-ричному представлению эта последовательность будет иметь вид:
0102030405060708090A0B0C0D0E
Ты будешь искать строки, заданные именно в таком виде? Тогда вот так:
if OpenDialog1.Execute then begin
assignfile(f, OpenDialog1.FileName);
reset(f);
for a := 0 to filesize(f) - 14 do begin
s := '';
Seek(f, a);
for b := 1 to 14 do begin
read(f, X); { <--- Читаем побайтно и сразу переводим в Hex... }
s := s + IntToHex(X, 2); { <--- ... и складываем в строку }
end;
if s = '0102030405060708090A0B0C0D0E' then begin
// нашли строку, делай что нужно
end;
end; // for a
end; // OpenDialog.Execute
Volvo, использую код,предложенный тобой, перевёл нужную для поиска строку в HeX, убедился,что она есть в нужном файле(Hex-редактором)...не ищет почему-то...
Естественно... Используй большие буквы, а не маленькие. Или
if s=UpperCase('55006e0063006f006e006e00650063007400650064') then begin
Спасибо,получилось! теперь нужно часть файла конвертировать в base64. Для этого наверное тоже процедура в delphi предусмотрена?
Со строками и с потоками - точно есть:
procedure EncodeStream(Input, Output: TStream); // Кодирует поток в Base64
procedure DecodeStream(Input, Output: TStream); // Раскодирует поток из Base64 в нормальный вид
function EncodeString(const Input: string): string; // Кодирует строку в Base64
function DecodeString(const Input: string): string; // Раскодирует строку из Base64 в нормальный вид
Вопрос не по теме наверно... Вот какое преобразование строки надо сделать, чтобы из '530074006F0072006500640050006100730073007700' получить
'E77D34EF8D34E85D34EF6D34EB9D34EB' ?
Вопрос действительно не по теме... И я вообще сомневаюсь, стоит ли на него отвечать, потому что кажется мне, что ты пытаешься что-то сделать с паролем? Подобрать хочешь?
По внешнему виду вторая строка похожа на результат хеширования MD4 или MD5 (возможно - в совокупности с другой функцией, или неоднократное применение хеширования)... Больше, извини, на эту тему я ничего говорить не буду...
Нет,подбирать хеши у меня желания нет никакого, т.к. есть уже много программ для этих целей Моя программа "вытаскивает" из этого файла хеш пароля, и я не вижу в этом ничего страшного. Выходная строка - действительно MD5.