|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Сертификат DER как текстовый файл
Здравсвтвуйте господа, имеется сертификат в 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
|
||||
|
||||
Ты читаешь в строку. Причем читаешь как строку. То есть считывается до первого перевода строки, плюс не забывай, что в строке не может быть нулевых символов (а в бинарном файле они есть).
Поэтому читать надо как массив байт, и работать как с массивом байт. jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо 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; |