Skip to content

πŸ›‘οΈπŸ”’ Консольная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π½Π° C++20 для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ (AES-256), Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ вычислСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы (SHA-256) Ρ„Π°ΠΉΠ»ΠΎΠ² с использованиСм OpenSSL ΠΈ Boost.ProgramOptions.

License

Notifications You must be signed in to change notification settings

nmaks2012/CryptoGuard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

14 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CryptoGuard

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
Loading

Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹

  1. Π‘ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
  2. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Visual Studio Code.
  3. ΠŸΡ€ΠΈ появлСнии запроса Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Reopen in Container, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Dev Container. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструмСнтов.

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Conan для управлСния зависимостями ΠΈ CMake для сборки.

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ для сборки:

    mkdir build && cd build
  2. УстановитС зависимости с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Conan: (ВыполняСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²ΠΎΠΉ сборкой)

    conan install --settings=build_type=Debug --build=missing ..
  3. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚: (ВыполняСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ измСнСниях Π² ΠΊΠΎΠ΄Π΅)

    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: ΠŸΠ°Ρ€ΠΎΠ»ΡŒ для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ/Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

  1. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ тСстовый Ρ„Π°ΠΉΠ»:

    echo "Hello OpenSSL crypto world!" > secret.txt
  2. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°:

    ./CryptoGuard --command encrypt --input secret.txt --output encrypted.bin --password "my-pass-123"
  3. Π”Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°:

    ./CryptoGuard -c decrypt -i encrypted.bin -o decrypted.txt -p "my-pass-123"
  4. ВычислСниС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы (Π²Ρ‹Π²ΠΎΠ΄ Π² консоль):

    ./CryptoGuard -c checksum -i secret.txt
  5. ВычислСниС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы (Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»):

    ./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.

About

πŸ›‘οΈπŸ”’ Консольная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π½Π° C++20 для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ (AES-256), Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ вычислСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы (SHA-256) Ρ„Π°ΠΉΠ»ΠΎΠ² с использованиСм OpenSSL ΠΈ Boost.ProgramOptions.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published