Artikel ini disusun bersama pimpinan tim @ Restlin
Pemilihan kasus dan visi kami tentang solusinya
Awalnya, pilihan jatuh pada kasus Kementerian Dalam Negeri: Pengembangan solusi perangkat lunak otonom untuk analisis linguistik dan transformasi wajah naratif dalam teks.
Rumusan kasus:
Mempertimbangkan secara spesifik kegiatan layanan tertentu Kementerian Dalam Negeri Rusia, ketika menyiapkan dokumen, diperlukan untuk mengubah wajah narasi dari orang pertama menjadi orang ketiga, dengan mempertimbangkan jenis kelamin, di teks. Misalnya, frasa di teks asli "Saya melihat Ivanov pergi ke saya" di teks terakhir harus diubah menjadi "Dia melihat Ivanov pergi kepadanya". Solusi perangkat lunak yang dikembangkan akan secara otomatis menjalankan proses mengubah wajah cerita, yang akan memungkinkan karyawan mencurahkan lebih banyak waktu untuk aspek lain dari pekerjaan mereka. Kasus ini disiapkan oleh Departemen Teknologi Informasi, Komunikasi, dan Perlindungan Informasi Kementerian Dalam Negeri Rusia.
Dia dekat dengan kami dalam spesialisasi, dan ada gagasan yang jelas tentang betapa indahnya masalah ini dapat diselesaikan.
Rencananya kami akan membuat web service yang secara otomatis dapat mengubah keterangan saksi dari orang pertama ke orang ketiga.
Semuanya berjalan sebaik mungkin hingga saat kami menonton video dengan presentasi case dari pemegang case, apa yang mereka harapkan di pintu keluar:
solusi lokal yang bekerja tanpa akses jaringan;
suite kantor terintegrasi melalui makro.
Tim kami dibagi menjadi 2 kubu: setengahnya bersikeras pada kepatuhan ketat terhadap persyaratan pemegang kasus, jika tidak kasusnya harus diubah, yang kedua bersikeras pada solusi utama (offtopik: keputusan serupa diambil dari orang lain dan mereka menang).
, : , .
:
ยซ ยป , . , , , , . (, ). - , ( 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 ) .
Tanpa diduga, hasil harus menunggu hingga malam, meskipun pemenang diumumkan di North-West Hub hampir satu jam setelah pertahanan. Waktu berlarut-larut saat pengiriman Russian Post.
Offtop: kami adalah pemenangnya! 750 ribu per tim, Karl! 750 dalam 2 hari, Karl! Dan itu berarti kita akan pergi ke Grandfinal of the Digital Breakthrough di Moskow!
Repositori solusi kami