Статус: Новичок
Группы: Участники
Зарегистрирован: 14.03.2012(UTC) Сообщений: 7 Откуда: <eltyyjdcr
|
Сам отвечу на свой вопрос. оказывается уже давно есть шикарный csptest. Для 4 криптопро на делфи7 была навая программа: Код:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
edt1: TEdit;
edt2: TEdit;
lbl1: TLabel;
lbl2: TLabel;
lbl3: TLabel;
edt3: TEdit;
btn1: TButton;
dlgOpen1: TOpenDialog;
btn2: TButton;
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
edt1.Text:='[reg][sbis][20'+Copy(IntToStr(CurrentYear+1), 3, 2)+']-';
//edt2.Text:='_'+Copy(IntToStr(CurrentYear), 3, 2);
edt2.Text:='_';
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
if dlgOpen1.Execute then
edt3.Text:=dlgOpen1.FileName;
end;
function ExecAndWait(const FileName,
Params: ShortString;
const WinState: Word): boolean; export;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: ShortString;
begin
{ Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
CmdLine := '"' + Filename + '" ' + Params;
FillChar(StartInfo, SizeOf(StartInfo), #0);
with StartInfo do
begin
cb := SizeOf(StartInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WinState;
end;
Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
{ Ожидаем завершения приложения }
if Result then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
{ Free the Handles }
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
procedure TForm1.btn2Click(Sender: TObject);
var
myFile: TextFile;
nameKeyOrg, nameKeyNew: string;
begin
If FileExists(edt3.Text) then
begin
AssignFile(myFile, edt3.Text);
reset(myFile);
while (not EOF(myFile)) do
begin
Readln(myFile, nameKeyOrg);
nameKeyNew:=StringReplace(edt1.Text+Copy(nameKeyOrg, 0, Pos(edt2.Text, nameKeyOrg)-1), ' ', '_', [rfReplaceAll]);
ExecAndWait('c:\Program Files\Crypto Pro\CSP\csptest.exe', Format(' -keycopy -contsrc "%s" -pinsrc 12345678 -contdest \\.\registry\%s -pindest ""', [nameKeyOrg, nameKeyNew]), SW_SHOWNORMAL);
end;
CloseFile(myFile);
end;
end;
end.
В edt1 то что надо добавить в начало В edt2 то что надо удалить с конца после этого символа (мне приходят ключи вида "НАИМЕНОВАНИЕОРГАНИЗАЦИИ_17") Ну и edt3 путь к файлу с именами контейнеров. Имена контейнеров получил быстро так - вставил ключи, в криптопро открыл просмотреть сертификаты в контейнере - обзор и просто принтскрин и через файнреадер прогнал.
|