Dieser Artikel wurde gemeinsam mit dem Teamleiter von @ Restlin verfasst
Fallauswahl und unsere Vision der Lösung
Die Entscheidung fiel zunächst auf das Innenministerium: Entwicklung einer autonomen Softwarelösung zur sprachlichen Analyse und Transformation des narrativen Gesichts im Text.
Fallformulierung:
Unter Berücksichtigung der Besonderheiten der Aktivitäten bestimmter Dienste des Innenministeriums Russlands bei der Erstellung von Dokumenten ist es erforderlich, das Gesicht der Erzählung unter Berücksichtigung des Geschlechts von der ersten Person in die dritte Person umzuwandeln Text. Zum Beispiel sollte der Satz im Originaltext „Ich habe gesehen, dass Iwanow zu mir gegangen ist“ im endgültigen Text in „Er hat gesehen, dass Iwanow zu ihm gegangen ist“ umgewandelt werden. Die entwickelte Softwarelösung führt automatisch den Prozess der Konvertierung des Gesichtes der Geschichte durch, sodass die Mitarbeiter mehr Zeit für andere Aspekte ihrer Arbeit verwenden können. Der Fall wurde von der Abteilung für Informationstechnologien, Kommunikation und Informationsschutz des russischen Innenministeriums vorbereitet.
Er war uns in der Spezialisierung nahe und es gab eine klare Vorstellung davon, wie schön dieses Problem gelöst werden konnte.
Es war geplant, einen Webdienst zu erstellen, der das Zeugnis eines Zeugen automatisch von der ersten in die dritte Person umwandeln kann.
Alles lief so gut wie möglich, bis wir das Video mit der Präsentation des Falls vom Fallinhaber sahen, was sie am Ausgang erwarten:
lokale Lösung, die ohne Netzwerkzugriff funktioniert;
Integrierte Office-Suiten über Makros.
Unser Team war in zwei Lager aufgeteilt: Die Hälfte bestand auf der strikten Einhaltung der Anforderungen des Fallinhabers, andernfalls sollte der Fall geändert werden, die zweite bestand auf der primären Lösung (offtopic: eine ähnliche Entscheidung, die von anderen Jungs getroffen wurde, und sie gewannen).
, : , .
:
« » , . , , , , . (, ). - , ( 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 ) .
Unerwartet mussten die Ergebnisse bis zum Abend warten, obwohl die Gewinner fast eine Stunde nach der Verteidigung im North-West Hub bekannt gegeben wurden. Die Zeit zog sich mit der Zustellung der russischen Post hin.
Offtop: Wir sind die Gewinner! 750 Tausend pro Team, Karl! 750 in 2 Tagen, Karl! Und das heißt, wir gehen zum Grandfinal des digitalen Durchbruchs nach Moskau!
Unser Lösungs-Repository