![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравсвтвуйте господа, имеется сертификат в DER кодировке, необходимо получить одной из полей, погуглив как это реализовать нашел громоздкий непонятный код и решил что это не мой путь, открыв сертификат notepad++ нашел нужное мне поле, оно всегда имеет следующую форму: RASP##_AAAAAA_AA написал простенький код считывающий сертификат как текстовый файл, и находящий нужный текст:
Код:
while not eof(f) do
begin
readln(f,s);
name:='';
for i:=1 to length(s) do
begin
if ((s[i]='R') and (s[i+1]='A') and (s[i+2]='S') and (s[i+3]='P')) then
begin
name:=s[i]+s[i+1]+s[i+2]+s[i+3];
j:=4;
while s[i+j] in ['A'..'Z','0'..'9','_',''''] do
begin
name:=name+s[i+j];
j:=j+1;
end;
///// выполняем нужные операции и выходим из цикла
end;Проблема следующая, срабатывает не на всех сертификатах, примерно на 1 из 4 упорно не находит нужное поле, помогите разобраться в чем проблема и как решить? Варианты сертификатов с нужными полями ниже, на одном срабатывает на другом нет. http://yadi.sk/d/Gfl_uQ755K5Fu http://yadi.sk/d/xK-302cf5K5Ga Спасибо |
|
#2
|
||||
|
||||
|
Ты читаешь в строку. Причем читаешь как строку. То есть считывается до первого перевода строки, плюс не забывай, что в строке не может быть нулевых символов (а в бинарном файле они есть).
Поэтому читать надо как массив байт, и работать как с массивом байт. |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
JoKeR13 (30.05.2013)
| ||
|
#3
|
|||
|
|||
|
Спасибо, догадывался о том, что вижу строку не полностью, а до первого символа "конца" строки, но решил уточнить у знающих людей, попробую как бинарный считать, немного усложнит код, наверное
|
|
#4
|
|||
|
|||
|
Спасибо еще раз, вот так, если кому то понадобится, получилось
Код:
var name:string; f:file; i,j:integer; mas: array of byte;
begin
assignfile(f,path);
FileMode:=fmOpenRead;
reset(f,1);
SetLength(mas, FileSize(f));
blockread(f,Pointer(mas)^,Length(mas));
closefile(f);
for i:=0 to Length(mas)-1 do
begin
if (chr(mas[i])='R') and (chr(mas[i+1])='A') and (chr(mas[i+2])='S') and (chr(mas[i+3])='P') then
begin
name:=chr(mas[i])+chr(mas[i+1])+chr(mas[i+2])+chr(mas[i+3]);
j:=4;
while chr(mas[i+j]) in ['A'..'Z','0'..'9','_',''''] do
begin
name:=name+chr(mas[i+j]);
j:=j+1;
end;
copyfile(pchar(path),pchar(edit2.Text+name+'.cer'),true);
exit;
end;
end;
end; |