Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.05.2013, 13:55
JoKeR13 JoKeR13 вне форума
Прохожий
 
Регистрация: 30.05.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Сертификат 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  
Старый 30.05.2013, 21:27
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Ты читаешь в строку. Причем читаешь как строку. То есть считывается до первого перевода строки, плюс не забывай, что в строке не может быть нулевых символов (а в бинарном файле они есть).
Поэтому читать надо как массив байт, и работать как с массивом байт.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
JoKeR13 (30.05.2013)
  #3  
Старый 30.05.2013, 22:06
JoKeR13 JoKeR13 вне форума
Прохожий
 
Регистрация: 30.05.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо, догадывался о том, что вижу строку не полностью, а до первого символа "конца" строки, но решил уточнить у знающих людей, попробую как бинарный считать, немного усложнит код, наверное
Ответить с цитированием
  #4  
Старый 31.05.2013, 11:03
JoKeR13 JoKeR13 вне форума
Прохожий
 
Регистрация: 30.05.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
Хорошо Результат

Спасибо еще раз, вот так, если кому то понадобится, получилось

Код:
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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter