CryptoGuard
β ΡΡΠΎ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, Π΄Π΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΡ
ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ OpenSSL.
- ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ
- ΠΠ°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ
- Π‘Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ°
- Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅: Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° AES-256-CBC. ΠΠ»ΡΡ ΠΈ Π²Π΅ΠΊΡΠΎΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (IV) Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΠΈΠ· ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
- ΠΠ΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΠ΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ°Π½Π΅Π΅ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠΎΠΉ ΠΆΠ΅ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ.
- ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ°: Π Π°ΡΡΠ΅Ρ Ρ Π΅Ρ-ΡΡΠΌΠΌΡ (SHA-256) Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΉΠ»Π°.
- C++20
- OpenSSL: Π΄Π»Ρ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
- Boost.ProgramOptions: Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
- CMake: ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ±ΠΎΡΠΊΠΈ.
- Conan: ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ.
- GTest: ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
- Dev Containers: Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
graph TD
subgraph "ΠΡΡ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅"
direction LR
A["ΠΠ°Π½Π½ΡΠ΅ (Π€Π°ΠΉΠ»)"]
P["Π‘Π΅ΠΊΡΠ΅Ρ (ΠΠ°ΡΠΎΠ»Ρ)"]
end
subgraph "ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ CryptoGuard"
direction LR
E["ΠΠ°ΡΠΈΡΠ° ΠΈ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅"]
D["ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠΈΡΡΠ°"]
C["ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ"]
end
subgraph "Π Π΅Π·ΡΠ»ΡΡΠ°Ρ"
direction LR
O1["ΠΠ°ΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»"]
O2["ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ»"]
O3["Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ (Checksum)"]
end
A -- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ --> E
P -- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ --> E
E -- ΡΠΎΠ·Π΄Π°Π΅Ρ --> O1
O1 -- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ --> D
P -- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ --> D
D -- Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ --> O2
A -- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ --> C
C -- ΡΠΎΠ·Π΄Π°Π΅Ρ --> O3
- Π‘ΠΊΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
- ΠΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π²
Visual Studio Code
. - ΠΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π½Π°ΠΆΠΌΠΈΡΠ΅
Reopen in Container
, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Dev Container. ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ Π²ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΡΠΎΠ΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Conan Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΈ CMake Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ.
-
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ:
mkdir build && cd build
-
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Conan: (ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΎΠΉ)
conan install --settings=build_type=Debug --build=missing ..
-
Π‘ΠΎΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ: (ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ Π² ΠΊΠΎΠ΄Π΅)
conan build --settings=build_type=Debug ..
ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»
CryptoGuard
ΠΈ ΡΠ΅ΡΡΡCryptoGuard_tests
ΠΏΠΎΡΠ²ΡΡΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈbuild/
.
ΠΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ build
.
--help
: ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΏΡΠ°Π²ΠΊΡ.--command, -c
: ΠΠΎΠΌΠ°Π½Π΄Π° (encrypt
,decrypt
,checksum
). ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ.--input, -i
: ΠΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ». ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ.--output, -o
: ΠΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ». ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π΄Π»Ρencrypt
ΠΈdecrypt
.--password, -p
: ΠΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ/Π΄Π΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
-
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ»:
echo "Hello OpenSSL crypto world!" > secret.txt
-
Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°:
./CryptoGuard --command encrypt --input secret.txt --output encrypted.bin --password "my-pass-123"
-
ΠΠ΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°:
./CryptoGuard -c decrypt -i encrypted.bin -o decrypted.txt -p "my-pass-123"
-
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ (Π²ΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ):
./CryptoGuard -c checksum -i secret.txt
-
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ (Π²ΡΠ²ΠΎΠ΄ Π² ΡΠ°ΠΉΠ»):
./CryptoGuard -c checksum -i secret.txt -o checksum.txt
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ
ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠ΅ΡΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ build
:
cd build
ctest
Π Visual Studio Code
Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² .vscode/launch.json
ΡΠ°ΠΉΠ»Π΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Launch CryptoGuard
Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ ΡΠ°ΠΉΠ»Π°, ΡΠΎ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ F5
ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΡ ΠΎΠΊΠ½ΠΎ Run and Debug
ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ ΠΊΠ»Π°Π²ΠΈΡ Ctrl+Shift+D
.