
सरल C++ इमेज स्टेग्नोग्राफी उपकरण जो लीस्ट-सिग्निफिकेंट-बिट एन्कोडिंग का उपयोग करके फ़ाइलों को चित्रों के अंदर एन्क्रिप्ट और छिपाता है।
सरल C++ एन्क्रिप्शन और स्टेग्नोग्राफी टूल जो पासवर्ड-संरक्षित एन्क्रिप्शन का उपयोग करके फ़ाइल की सामग्री को सुरक्षित करता है, और फिर इसे लीस्ट-सिग्निफिकेंट-बिट एन्कोडिंग का उपयोग करके इमेज के पिक्सल-डेटा में एम्बेड करता है। लिनक्स, मैकओएस और विंडोज सिस्टम के लिए।
$ ./steganography encode -i data/orig.png -e data/jekyll_and_hyde.zip -o output.png
Password: 1234
* Image size: 640x426 pixels
* Encoding level: Low (Default)
* Max embed size: 132.38 KiB
* Embed size: 61.77 KiB
* Encrypted embed size: 61.78 KiB
* Generated CRC32 checksum
* Generated encryption key with PBKDF2-HMAC-SHA-256 (20000 rounds)
* Encrypted embed with AES-256-CBC
* Embedded jekyll_and_hyde.zip into image
* Sucessfully wrote to output.png
मूल छवि:

एम्बेडेड ZIP के साथ छवि जिसमें "डॉ. जेकिल और मिस्टर हाइड" पुस्तक की संपूर्ण सामग्री शामिल है:

$ ./steganography decode -i output.png -o "out - jekyll_and_hyde.zip"
Password: 1234
* Image size: 640x426 pixels
* Generated decryption key with PBKDF2-HMAC-SHA-256 (20000 rounds)
* Sucessfully decrypted header
* File signatures match
* Detected embed jekyll_and_hyde.zip
* Encoding level: Low (Default)
* Encrypted embed size: 61.78 KiB
* Successfully decrypted the embed
* Decrypted embed size: 61.77 KiB
* CRC32 checksum matches
* Successfully wrote to out - jekyll_and_hyde.zip
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make -j 4
Usage: steganography [-h] {decode,encode}
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
Subcommands:
decode Decodes and extracts an embed-file from an image
encode Encodes an embed-file into an image
Usage: encode [-h] --input VAR --output VAR --embed VAR [--passwd VAR]
Encodes an embed-file into an image
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
-i, --input specify the input image. [required]
-o, --output specify the output image. [required]
-e, --embed specify the file to embed. [required]
-p, --passwd specify the encryption password.
Usage: decode [-h] --input VAR [--output VAR] [--passwd VAR]
Decodes and extracts an embed-file from an image
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
-i, --input specify the input image. [required]
-o, --output specify the output file. [default: ""]
-p, --passwd specify the encryption password.
प्रोग्राम पहले /dev/urandom से बाइनरी डेटा पढ़कर एक 128-बिट पासवर्ड सॉल्ट और एक 128-बिट AES इनिशियलाइज़ेशन वेक्टर को यादृच्छिक रूप से उत्पन्न करके काम करता है। फिर वह उपयोगकर्ता द्वारा इनपुट किए गए स्ट्रिंग पर PBKDF2-HMAC-SHA-256 का उपयोग करके एन्क्रिप्शन कुंजी उत्पन्न करने में उस पासवर्ड सॉल्ट को पैरामीटर के रूप में उपयोग करता है। फिर एम्बेड की जाने वाली फ़ाइल का CRC32 हैश गणना की जाती है, और डेटा की वैधता के लिए चेकसम के रूप में हेडर में संग्रहीत किया जाता है। फिर यह PKCS #7 एल्गोरिदम का उपयोग करके एम्बेड की जाने वाली फ़ाइल के बाइनरी डेटा को पैड करता है, उसके बाद हेडर और पैड किए गए डेटा दोनों को AES-256 में CBC मोड में एन्क्रिप्ट करता है, पहले उत्पन्न इनिशियलाइज़ेशन वेक्टर का उपयोग करके। अब डेटा वास्तव में छवि के अंदर पहले एक यादृच्छिक ऑफसेट चुनकर एन्कोड किया जाता है, और फिर डेटा के प्रत्येक बिट से गुज़रकर इसे वास्तविक छवि पिक्सेल डेटा में संग्रहीत किया जाता है, जो वह प्रत्येक पिक्सेल के प्रत्येक चैनल बाइट के लीस्ट-सिग्निफिकेंट-बिट को सेट करके पूरा करता है।
डिकोडिंग प्रक्रिया बिल्कुल ऊपर वर्णित एन्कोडिंग प्रक्रिया के समान ही काम करती है, बस उल्टे क्रम में। एकमात्र अंतर यह है कि डिकोडिंग के लिए, प्रोग्राम द्वारा डेटा निकालने और डिक्रिप्ट करने का प्रयास करने के बाद, यह निकासी प्रक्रिया को मान्य करने के प्रयास में हेडर अनुभाग की कुछ जानकारी की तुलना करता है। जिन हेडर फ़ील्ड की तुलना की गई है वे हैं: इस प्रोग्राम के लिए कस्टम 4-बाइट फ़ाइल हस्ताक्षर, और डिक्रिप्ट किए गए डेटा का CRC32 हैश। यदि इनमें से कोई भी फ़ील्ड अपने सही मानों से मेल नहीं खाती है, तो डिक्रिप्शन प्रक्रिया विफल हो जाएगी। ऐसा केवल तभी होना चाहिए जब आप जिस फ़ाइल को डिक्रिप्ट करने का प्रयास कर रहे थे, उसमें वास्तव में कोई एम्बेड नहीं है, यदि आपके द्वारा दर्ज किया गया पासवर्ड गलत है, या यदि इमेज फ़ाइल किसी तरह क्षतिग्रस्त हो गई है।
जबकि किसी छवि में एम्बेड किए गए डेटा का पता लगाना एक सामान्य कार्य है, सैद्धांतिक रूप से यह जानने का कोई तरीका नहीं है कि यह इस प्रोग्राम ने किया है, और सैद्धांतिक रूप से पासवर्ड जाने बिना डेटा को डिक्रिप्ट करने का कोई ज्ञात तरीका नहीं होना चाहिए, यानी ऐसा करने में लाखों साल बिताए बिना।
इस प्रोग्राम का उपयोग महत्वपूर्ण डेटा को एन्क्रिप्ट और छिपाने के लिए न करें जिसे आप चुभती नज़रों से दूर रखना चाहते हैं। यह सिर्फ एक साधारण प्रूफ-ऑफ-कॉन्सेप्ट प्रोग्राम है जो मैंने मनोरंजन के लिए बनाया है। मैं कोई क्रिप्टोग्राफर नहीं हूँ। मैं सिर्फ एक शौकिया हूँ, अपने जोखिम पर उपयोग करें।
यह सॉफ़्टवेयर MIT के अंतर्गत लाइसेंस प्राप्त है। कॉपीराइट © 2022 Zach Collins