Cet article a été co-écrit avec le chef d' équipe de @ Restlin
Sélection de cas et notre vision de sa solution
Dans un premier temps, le choix s'est porté sur le cas du ministère de l'Intérieur: Développement d'une solution logicielle autonome d'analyse linguistique et de transformation du visage narratif dans le texte.
Formulation de cas:
Compte tenu des spécificités des activités de certains services du ministère de l'intérieur de la Russie, lors de la préparation des documents, il est nécessaire de transformer le visage de la narration de la première personne à la troisième, en tenant compte du sexe, dans le texte. Par exemple, la phrase dans le texte original «J'ai vu qu'Ivanov est allé vers moi» dans le texte final devrait être transformée en «Il a vu qu'Ivanov est allé vers lui». La solution logicielle développée effectuera automatiquement le processus de conversion du visage de l'histoire, ce qui permettra aux employés de consacrer plus de temps à d'autres aspects de leur travail. L'affaire a été préparée par le Département des technologies de l'information, des communications et de la protection de l'information du Ministère de l'intérieur de la Russie.
Il était proche de nous en matière de spécialisation, et il y avait une idée claire de la beauté de ce problème qui pouvait être résolu.
Il était prévu de créer un service Web capable de convertir automatiquement le témoignage d'un témoin de la première personne à la troisième.
Tout s'est passé au mieux jusqu'au moment où nous avons regardé la vidéo avec la présentation de l'étui du porte-étui, ce qu'ils attendent à la sortie:
solution locale qui fonctionne sans accès au réseau;
suites bureautiques intégrées via des macros.
Notre équipe a été divisée en 2 camps: la moitié a insisté sur le strict respect des exigences du titulaire du dossier, sinon le cas devrait être changé, le second a insisté sur la solution principale (hors-sujet: une décision similaire prise par d'autres gars et ils ont gagné).
, : , .
:
« » , . , , , , . (, ). - , ( 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 ) .
De manière inattendue, les résultats ont dû attendre le soir, même si les gagnants ont été annoncés au North-West Hub près d'une heure après la défense. Le temps a traîné avec la livraison de la poste russe.
Offtop: nous sommes les gagnants! 750 000 par équipe, Karl! 750 en 2 jours, Karl! Et cela signifie que nous allons à la grande finale de la percée numérique à Moscou!
Notre référentiel de solutions