Cómo el equipo de it-animals ganó la final de Digital Breakthrough

Este artículo fue coautor con el líder del equipo de @ Restlin





Selección de casos y nuestra visión de su solución

Inicialmente, la elección recayó en el caso del Ministerio del Interior: Desarrollo de una solución de software autónoma para el análisis lingüístico y la transformación del rostro narrativo en el texto.





Formulación de caso:





Teniendo en cuenta las características específicas de las actividades de ciertos servicios del Ministerio del Interior de Rusia, al preparar documentos, se requiere transformar la cara de la narración de la primera persona a la tercera, teniendo en cuenta el género, en el texto. Por ejemplo, la frase del texto original “Vi que Ivanov fue hacia mí” en el texto final debería transformarse en “Vio que Ivanov fue hacia él”. La solución de software desarrollada llevará a cabo automáticamente el proceso de conversión de la cara de la historia, lo que permitirá a los empleados dedicar más tiempo a otros aspectos de su trabajo. El caso fue preparado por el Departamento de Tecnologías de la Información, Comunicaciones y Protección de la Información del Ministerio del Interior de Rusia. 





Él estaba cerca de nosotros en la especialización y tenía una idea clara de lo bien que podía resolverse este problema.





Se planeó que crearemos un servicio web que pueda convertir automáticamente el testimonio de un testigo de la primera persona a la tercera.





 Todo salió lo mejor posible hasta el momento en que vimos el video con la presentación del estuche por parte del maletín, lo que esperan en la salida: 





  1. solución local que funciona sin acceso a la red; 





  2. suites ofimáticas integradas mediante macros.





Nuestro equipo se dividió en 2 campos: la mitad insistió en el estricto cumplimiento de los requisitos del titular del caso, de lo contrario, el caso debería cambiarse, el segundo insistió en la solución primaria (fuera de tema: una decisión similar tomada por otros chicos y ganaron).





, : , .





:





« » , . , , , , . (, ). - , ( Creatio). .





? Open source : OpenSSL. - php tcpdf pdf . pirs.online , .





, .





,  . - , ASP.NET. 





( : ? , . 





?

: , .





: , . - . , , . - .





:





  • : ;





  • ( );





  • ;





  • ;





  • ;





  • ;





  • ;





  • .





3 , PostgreSQL: 





  1. user - ;





  2. message - . ;





  3. 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, los resultados tuvieron que esperar hasta la noche, aunque los ganadores fueron anunciados en el North-West Hub casi una hora después de la defensa. El tiempo se prolongó como la entrega del Correo Ruso.





Offtop: ¡somos los ganadores! ¡750 mil por equipo, Karl! 750 en 2 días, Karl! ¡Y eso significa que vamos a la Gran Final del Avance Digital en Moscú!



Nuestro repositorio de soluciones








All Articles