Este artigo foi escrito em coautoria com o líder da equipe de @Restlin
Seleção de casos e nossa visão de sua solução
Inicialmente, a escolha recaiu sobre o caso do Ministério da Administração Interna: Desenvolvimento de uma solução de software autônomo para análise linguística e transformação da face narrativa no texto.
Formulação de caso:
Levando em consideração as especificidades das atividades de determinados serviços do Ministério de Assuntos Internos da Rússia, ao preparar documentos, é necessário transformar o rosto da narração da primeira pessoa para a terceira, levando em consideração o gênero, no texto. Por exemplo, a frase no texto original “Eu vi que Ivanov foi até mim” no texto final deve ser transformada em “Ele viu que Ivanov foi até ele”. A solução de software desenvolvida realizará automaticamente o processo de conversão da face da história, o que permitirá que os funcionários dediquem mais tempo a outros aspectos do seu trabalho. O caso foi preparado pelo Departamento de Tecnologias da Informação, Comunicações e Proteção da Informação do Ministério de Assuntos Internos da Rússia.
Ele era próximo a nós na especialização e tinha uma ideia clara da beleza de como esse problema poderia ser resolvido.
Foi planejado que criaríamos um serviço web que pode converter automaticamente o depoimento de uma testemunha da primeira pessoa para a terceira.
Tudo correu bem até o momento em que assistimos ao vídeo com a apresentação da caixa do porta-malas, o que eles esperam na saída:
solução local que funciona sem acesso à rede;
pacotes de escritório integrados por meio de macros.
Nossa equipe foi dividida em 2 campos: metade insistiu no cumprimento estrito dos requisitos do titular do caso, caso contrário, o caso deveria ser alterado, o segundo insistiu na solução primária (offtopic: uma decisão semelhante disparou de outros caras e eles ganharam).
, : , .
:
« » , . , , , , . (, ). - , ( Creatio). .
? Open source : OpenSSL. - php tcpdf pdf . pirs.online , .
, .
, . - , ASP.NET.
( : ? , .
?
: , .
: , . - . , , . - .
:
: ;
( );
;
;
;
;
;
.
3 , PostgreSQL:
user - ;
message - . ;
file - , .
php- Yii2 . .
OpenSSL, - .
, . - (libengine-gost-openssl 1.1) , -2012. .
: . - , , . !
PHP openssl , , , openssl engine .
openssl . , openssl.
:
exec("openssl req -nodes -newkey gost2012_512 -keyout $eSignPath/client.key -pkeyopt paramset:A -out $eSignPath/client.csr -subj \"/C=RU/ST=Udm/L=Izhevsk/O=IT/OU=animals/CN=user-{$user->id}\" -config $caPath/openssl.cnf ");
exec("openssl ca -engine gost -keyfile $caPath/ca.key -cert $caPath/ca.crt -in $eSignPath/client.csr -out $eSignPath/client.crt -batch -config $caPath/openssl.cnf 2>&1", $output);
$eSignPath
- , $caPath
- .
:
exec("openssl ca -config $caPath/openssl.cnf -keyfile $caPath/ca.key -cert $caPath/ca.crt -revoke $eSignPath/client.crt 2>&1", $output);
exec("openssl ca -gencrl -config $caPath/openssl.cnf -keyfile $caPath/ca.key -cert $caPath/ca.crt -out $caPath/crl.pem 2>&1", $output);
$eSignPath
- , $caPath
- .
:
exec("openssl smime -engine gost -sign -in $fp -out $fp.sig -nodetach -binary -signer $clientKeysPath/client.crt -inkey $clientKeysPath/client.key -outform SMIME 2>&1", $output);
$fp
- , $clientKeysPath
- .
:
$output = exec("openssl cms -engine gost -verify -in $sigPath -inform SMIME -CAfile $pathCA/ca.crt -out $fp -certsout $clientKeysPath/client.crt 2>&1");
$fp
- , $clientKeysPath
- , $sigPath
- .
openssl - . , , . , : - .
: , tcpdf pdf pdf . , pdf .
: . , , , . , .
tcpdf openssl. . openssl (-, ) api:
$fields = [
'r' => 'api/sign',
'filePath' => $tempdoc,
'userId' => $user->id,
];
$query = http_build_query($fields);
$ch = curl_init();
$host = \Yii::$app->params['apiHost'] ?? '';
curl_setopt($ch, CURLOPT_URL, $host . '/index.php?' . $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$signature = curl_exec($ch);
/*if (empty($this->signature_data['extracerts'])) {
openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED);
} else {
openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED, $this->signature_data['extracerts']);
}*/
!
Zoom , , .
: , ( 5 ) .
Inesperadamente, os resultados tiveram que esperar até a noite, embora os vencedores tenham sido anunciados no Pólo Noroeste, quase uma hora depois da defesa. O tempo se arrastava com a entrega do correio russo.
Offtop: nós somos os vencedores! 750 mil por equipe, Karl! 750 em 2 dias, Karl! E isso significa que estamos indo para a Grandfinal do Digital Breakthrough em Moscou!
Nosso repositório de soluções