Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/quasarapp/qt-secret
Simple encryption library supporting RSA and AES algorithms.
https://github.com/quasarapp/qt-secret
aes alghorithm algorithms cmake cqtdeployer cryptography library qmake qt quasarapp rsa
Last synced: 6 days ago
JSON representation
Simple encryption library supporting RSA and AES algorithms.
- Host: GitHub
- URL: https://github.com/quasarapp/qt-secret
- Owner: QuasarApp
- License: lgpl-3.0
- Created: 2019-05-29T06:50:04.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2023-03-26T19:34:05.000Z (almost 2 years ago)
- Last Synced: 2025-01-08T06:11:35.261Z (14 days ago)
- Topics: aes, alghorithm, algorithms, cmake, cqtdeployer, cryptography, library, qmake, qt, quasarapp, rsa
- Language: C++
- Homepage: https://quasarapp.ddns.net:3031/docs/QuasarApp/Qt-Secret/latest/index.html
- Size: 5.78 MB
- Stars: 254
- Watchers: 15
- Forks: 69
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# ![Qt-Secret Logo](res/png/Qt-Secret_Banner_web.png)
# Note
The OpenSSL library is better for security and performance, so we implemented a Qt wrapper library to make it easier to use. See the [EasySSL](https://github.com/QuasarApp/easyssl) library.Fast encryption library supporting RSA and AES algorithms.
# Futures
The Qt-Secret library supports the following algorithms:### RSA
The current implementation supports the following key sizes:
#### Supported sizes
* RSA64
* RSA128
* RSA256
* RSA512
* RSA1024
* RSA2048
* RSA3072
* RSA4096
* RSA6144
* RSA8192#### Supported futures
* Encryption and decryption of messages.
* Signature and verification of the message signature.### AES
AES implementation was borrowed from [bricke](https://github.com/bricke/Qt-AES), because it fulfills the goals of this library.Individual thanks [bricke](https://github.com/bricke) for implementing the AES encryption class.
#### AES Levels
The class supports all AES key lengths* AES_128
* AES_192
* AES_256#### Modes
The class supports the following operating modes* ECB
* CBC
* CFB
* OFB#### Padding
By default the padding method is `ISO`, however, the class supports:* ZERO
* PKCS7
* ISO# Build
## with qmake
* git clone https://github.com/QuasarApp/Qt-Secret.git
* cd Qt-Secret
* git submodule update --init --recursive
* sudo apt install qt5-default
* qmake -r DEFINE+=WITHOUT_GUI Qt-Secret.pro
> DEFINE+=WITHOUT_GUI fot build without gui example, if you want build gui example remove this line. For build the gui example you need to install qml controls 2 in you os. Try **sudo apt install qml-module-qtquick-controls2 qtdeclarative5-dev qtdeclarative5-qtquick2-plugin**
* make -j8
* make test #(for testing)## with cmake
* git clone https://github.com/QuasarApp/Qt-Secret.git
* cd Qt-Secret
* git submodule update --init --recursive
* sudo apt install qt5-default
* cmake -DCMAKE_PREFIX_PATH=you/Qt/dir .
* make -j8
* make test #(for testing)# Include
## for qmake projects
* cd yourRepo
* git submodule add https://github.com/QuasarApp/Qt-Secret.git # add the repository of Qt-Secret into your repo like submodule
* git submodule update --init --recursive
* Add to the list of libraries for the Qt-Secret assembly. For example, you can create Main.Pro in which connect Qt-Secret and your project.pro files as subprojects.
**Main.pro:**
``` qmake
TEMPLATE = subdirs
CONFIG += orderedSUBDIRS += \
Qt-Secret \
MyProject
```
* Include in your MyProject.pro file the pri file of Qt-Secret library
``` qmake
include($$PWD/../Qt-Secret/src/Qt-Secret.pri)
```
* Rebuild your project### For cmake projects
* cd yourRepo
* git submodule add https://github.com/QuasarApp/Qt-Secret.git # add the repository of Qt-Secret into your repo like submodule
* git submodule update --init --recursive
* Include in your CMakeLists.txt file the main CMakeLists.txt file of Qt-Secret library
``` cmake
add_subdirectory(Qt-Secret)
target_link_libraries(MyBinary PUBLIC Qt-Secret)
```
* Rebuild your project
#### NoteBy Default Qt-Secret makes as a static library. If you want to create a shared library just add the BUILD_SHARED_LIBS into your main CMakeLists.txt file. Example :
```cmake
set(BUILD_SHARED_LIBS ON)
add_subdirectory(Qt-Secret)
target_link_libraries(MyBinary PUBLIC Qt-Secret)
```## For other build systems
* cd yourRepo
* git submodule add https://github.com/QuasarApp/Qt-Secret.git # add the repository of Qt-Secret into your repo like submodule
* git submodule update --init --recursive
* Add the rule for build Qt-Secret
* Add INCLUDEPATH and LIBS for your build system
* Rebuild your project#### Detailed instructions of include in QtCreator see [here](Doc/QtCreator.md).
# Usage
## RSA
### Encryption and decryption of messages.
``` cpp
#include
#includebool testEncryptAndDecryptExample() {
QByteArray pub, priv;
QRSAEncryption e(QRSAEncryption::Rsa::RSA_2048);
e.generatePairKey(pub, priv); // or other rsa sizeQByteArray msg = "test message";
auto encryptMessage = e.encode(msg, pub);
if (encryptMessage == msg)
return false;auto decodeMessage = e.decode(encryptMessage, priv);
return decodeMessage == msg;
}int main() {
if (testEncryptAndDecryptExample()) {
qInfo() << "Success!";
}
}
```### Signature and verification of the message signature.
``` cpp
#include
#includebool testExample() {
QByteArray pub, priv;
QRSAEncryption e(QRSAEncryption::Rsa::RSA_2048);
e.generatePairKey(pub, priv); // or other rsa sizeQByteArray msg = "test message";
auto signedMessage = e.signMessage(msg, priv);
if (e.checkSignMessage(signedMessage, pub)) {
qInfo() <<" message signed success";
return true;
}return false;
}
int main() {
if (testExample()) {
qInfo() <<"success!";
}
}
```## AES
Sample code using a 128bit key in ECB mode
``` cpp
#include "qaesencryption.h"QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB);
QByteArray encodedText = encryption.encode(plainText, key);QByteArray decodedText = encryption.decode(encodedText, key);
```Example for 256bit CBC using QString
``` cpp
#include
#include "qaesencryption.h"QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::CBC);
QString inputStr("The Advanced Encryption Standard (AES), also known by its original name Rijndael "
"is a specification for the encryption of electronic data established by the U.S. "
"National Institute of Standards and Technology (NIST) in 2001");
QString key("your-string-key");
QString iv("your-IV-vector");QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
QByteArray hashIV = QCryptographicHash::hash(iv.toLocal8Bit(), QCryptographicHash::Md5);QByteArray encodeText = encryption.encode(inputStr.toLocal8Bit(), hashKey, hashIV);
QByteArray decodeText = encryption.decode(encodeText, hashKey, hashIV);QString decodedString = QString(encryption.removePadding(decodeText));
//decodedString == inputStr !!!
```### Example via static invocation
Static invocation without creating instances, 256 bit key, ECB mode, starting from *QString* text/key
``` cpp
#include
#include "qaesencryption.h"QString inputStr("The Advanced Encryption Standard (AES), also known by its original name Rijndael "
"is a specification for the encryption of electronic data established by the U.S. "
"National Institute of Standards and Technology (NIST) in 2001");
QString key("your-string-key");
QString iv("your-IV-vector");QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
QByteArray hashIV = QCryptographicHash::hash(iv.toLocal8Bit(), QCryptographicHash::Md5);//Static invocation
QByteArray encrypted = QAESEncryption::Crypt(QAESEncryption::AES_256, QAESEncryption::CBC,
inputStr.toLocal8Bit(), hashKey, hashIV);
//...
// Removal of Padding via Static function
QString decodedString = QString(QAESEncryption::RemovePadding(decodeText));
```