C++ में क्रिप्टोग्राफी: एन्क्रिप्शन और हैशिंग — पूर्ण गाइड
क्रिप्टोग्राफी आधुनिक अनुप्रयोगों की सुरक्षा की मूलभूत नींव है। C++ में, डेवलपर्स के पास शक्तिशाली लाइब्रेरी उपलब्ध हैं जो डेटा के एन्क्रिप्शन, डिक्रिप्शन और हैशिंग को लागू करने की अनुमति देती हैं। इस लेख में, हम दो लोकप्रिय लाइब्रेरी: OpenSSL और Crypto++ पर विस्तार से चर्चा करेंगे, साथ ही प्रमुख अवधारणाओं: सममित एन्क्रिप्शन (AES), असममित एन्क्रिप्शन (RSA) और क्रिप्टोग्राफ़िक हैश फ़ंक्शन (SHA-256) को समझेंगे।
1. क्रिप्टोग्राफी की बुनियादी अवधारणाएँ
कोड पर जाने से पहले, बुनियादी शब्दों को समझना महत्वपूर्ण है:
- सममित एन्क्रिप्शन — एन्क्रिप्शन और डिक्रिप्शन दोनों के लिए एक ही कुंजी का उपयोग किया जाता है। उदाहरण: AES, DES, ChaCha20।
- असममित एन्क्रिप्शन — कुंजियों की एक जोड़ी: सार्वजनिक कुंजी (एन्क्रिप्शन के लिए) और निजी कुंजी (डिक्रिप्शन के लिए)। उदाहरण: RSA, ECC।
- हैश फ़ंक्शन — डेटा का एक निश्चित लंबाई की स्ट्रिंग में अपरिवर्तनीय रूपांतरण। उदाहरण: SHA-256, MD5 (पुराना), BLAKE2।
- सॉल्ट (salt) — रेनबो टेबल से सुरक्षा के लिए हैशिंग से पहले पासवर्ड में जोड़ा गया यादृच्छिक डेटा।
2. C++ में OpenSSL लाइब्रेरी
OpenSSL एक क्रॉस-प्लेटफ़ॉर्म ओपन-सोर्स लाइब्रेरी है जो SSL/TLS प्रोटोकॉल और क्रिप्टोग्राफ़िक एल्गोरिदम का एक विस्तृत सेट लागू करती है। C++ में इसके साथ काम करने के लिए, हेडर फ़ाइलों को शामिल करना और libssl और libcrypto लाइब्रेरी से लिंक करना आवश्यक है।
उदाहरण 1: OpenSSL के साथ SHA-256 हैशिंग
#include <iostream>#include <openssl/sha.h>#include <cstring>
std::string sha256(const std::string& input) { unsigned char hash[SHA256_DIGEST_LENGTH]; SHA256_CTX sha256; SHA256_Init(&sha256); SHA256_Update(&sha256, input.c_str(), input.length()); SHA256_Final(hash, &sha256);
std::string output; for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) { char buf[3]; sprintf(buf, "%02x", hash[i]); output += buf; } return output;}
int main() { std::string data = "PythonLib - C++ में क्रिप्टोग्राफी"; std::cout << "SHA-256: " << sha256(data) << std::endl; return 0;}यह कोड SHA256 संदर्भ के बुनियादी उपयोग को प्रदर्शित करता है। फ़ंक्शन SHA256_Init संदर्भ को आरंभ करता है, SHA256_Update डेटा जोड़ता है (स्ट्रीमिंग प्रोसेसिंग के लिए कई बार कॉल किया जा सकता है), और SHA256_Final गणना पूरी करता है और परिणाम लिखता है।
उदाहरण 2: सममित एन्क्रिप्शन AES-256-CBC
#include <iostream>#include <openssl/evp.h>#include <vector>#include <cstring>
std::vector<unsigned char> aes_encrypt(const std::string& plaintext, const unsigned char* key, const unsigned char* iv) { EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new(); EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), nullptr, key, iv);
std::vector<unsigned char> ciphertext(plaintext.size() + EVP_CIPHER_block_size(EVP_aes_256_cbc())); int len = 0; int ciphertext_len = 0;
EVP_EncryptUpdate(ctx, ciphertext.data(), &len, reinterpret_cast<const unsigned char*>(plaintext.c_str()), plaintext.size()); ciphertext_len = len;
EVP_EncryptFinal_ex(ctx, ciphertext.data() + len, &len); ciphertext_len += len; ciphertext.resize(ciphertext_len);
EVP_CIPHER_CTX_free(ctx); return ciphertext;}
int main() { // 256-बिट कुंजी (32 बाइट) और 128-बिट IV (16 बाइट) unsigned char key[32] = "01234567890123456789012345678901"; unsigned char iv[16] = "0123456789012345";
std::string message = "PythonLib के लिए गुप्त डेटा"