
JPEG स्टेगानोग्राफ़ी
go get lukechampine.com/jsteg
jsteg एक पैकेज है जो jpeg फ़ाइलों के अंदर डेटा छिपाने के लिए है, यह एक तकनीक है जिसे steganography के नाम से जाना जाता है। यह डेटा के प्रत्येक बिट को छवि के सबसे कम महत्वपूर्ण बिट्स में कॉपी करके किया जाता है। छिपाए जा सकने वाले डेटा की मात्रा jpeg के फ़ाइल आकार पर निर्भर करती है; छिपे हुए डेटा के प्रत्येक बाइट को संग्रहीत करने में लगभग 10-14 बाइट jpeg लगते हैं।
// open an existing jpeg
f, _ := os.Open(filename)
img, _ := jpeg.Decode(f)
// add hidden data to it
out, _ := os.Create(outfilename)
data := []byte("my secret data")
jsteg.Hide(out, img, data, nil)
// read hidden data:
hidden, _ := jsteg.Reveal(out)
ध्यान दें कि डेटा किसी भी तरह से सीमांकित नहीं है; कॉलर यह निर्धारित करने के लिए जिम्मेदार है कि hidden के कौन से बाइट्स उसके लिए महत्वपूर्ण हैं। ऐसा करने का सबसे आसान तरीका डेटा की शुरुआत में उसकी लंबाई जोड़ना है।
एक jsteg कमांड शामिल है, जो इस पैकेज के फ़ंक्शनों के चारों ओर एक सरल रैपर प्रदान करता है। यह jpeg फ़ाइलों में डेटा छिपा और प्रकट कर सकता है और इनपुट/आउटपुट रिडायरेक्शन का समर्थन करता है। यह स्वचालित रूप से लंबाई उपसर्गों को संभालता है और jsteg द्वारा उत्पन्न jpeg की पहचान करने के लिए एक मैजिक हेडर का उपयोग करता है।
एक अधिक संकीर्ण रूप से केंद्रित कमांड जिसका नाम slink है, भी शामिल है। slink एक jpeg में एक सार्वजनिक कुंजी (public key) एम्बेड करता है, और पासवर्ड स्ट्रिंग्स से प्राप्त कीपेयर का उपयोग करके डेटा पर हस्ताक्षर करना और हस्ताक्षर सत्यापित करना आसान बनाता है। पूर्ण विवरण के लिए cmd/slink देखें।
दोनों कमांड के बाइनरी यहाँ पाए जा सकते हैं।
यह पैकेज image/jpeg पैकेज से काफी मात्रा में कोड का पुन: उपयोग करता है। उस कोड के उपयोग को नियंत्रित करने वाला BSD-शैली लाइसेंस go_LICENSE फ़ाइल में पाया जा सकता है।