CryptoEngine Wiki
CryptoEngine (C) is a DLL Library that provide Cryptography Services.
Brought to you by:
saeed15
CryptoEngine provide SHA2 and SHA3 classes for hashing, in this example we will use
"Strategy Pattern" to explain how we can use them:
//Class HashContext takes a reference of CELIB::HashCrypto interface, //then we can use it with any other inherited class such as SHA256 and others. class HashContext{ public: HashContext(CELIB::HashCrypto& hashInterface) :m_hashInterface(hashInterface){} QByteArray hashString(const QByteArray& plain, bool * isOk){ return m_hashInterface.hash(plain, isOk); } //Another hash functions... private: CELIB::HashCrypto& m_hashInterface; }; int main(int argc, char *argv[]) { QByteArray plain("abc"), result; std::cout << "\nplain: " << plain.data() << std::endl; //SHA2-224: CELIB::SHA224 sha224; HashContext hc1(sha224); result = hc1.hashString(plain, 0); std::cout << "\nSHA224-Hex: " << result.toHex().toUpper().data() << std::endl; //SHA2-256: CELIB::SHA256 sha256; HashContext hc2(sha256); result = hc2.hashString(plain, 0); std::cout << "\nSHA256-Hex: " << result.toHex().toUpper().data() << std::endl; //SHA2-384: CELIB::SHA384 sha384; HashContext hc3(sha384); result = hc3.hashString(plain, 0); std::cout << "\nSHA384-Hex: " << result.toHex().toUpper().data() << std::endl; //SHA2-512: CELIB::SHA512 sha512; HashContext hc4(sha512); result = hc4.hashString(plain, 0); std::cout << "\nSHA512-Hex: " << result.toHex().toUpper().data() << std::endl; //SHA3-256: CELIB::SHA3_256 sha3_256; HashContext hc5(sha3_256); result = hc5.hashString(plain, 0); std::cout << "\nSHA3_256-Hex: " << result.toHex().toUpper().data() << std::endl; //etc... return 0; }
output:
/* plain: abc SHA224-Hex: 23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7 SHA256-Hex: BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD SHA384-Hex: CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7 SHA512-Hex: DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F SHA3_256-Hex: 4E03657AEA45A94FC7D47BA826C8D667C0D1E6E33A64A036EC44F58FA12D6C45 */
Static Functions:
For more flexibility, we can use static hashing functions without creating any objects:
result = CELIB::SHA256::hash(plain, 0, 0); std::cout << "\nStatic-SHA256-Hex: " << result.toHex().toUpper().data() << std::endl;
output:
Static-SHA256-Hex: BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD
Note that you can hash files with same both ways, and you can use compare(...) functions to check
if the hash string for this text/file is correct.