
مكتبة Go بدون اعتماديات لـ LSB steganography في الصور: ترميز ملفات عشوائية داخل حاملات PNG وفك ترميز الرسائل المخفية، مع فحوصات مسبقة لحجم الرسالة.
إخفاء المعلومات (Steganography) هي مكتبة مكتوبة بلغة Go الصرفة لتتيح إخفاء المعلومات البسيط بتقنية LSB على الصور. وهي قادرة على ترميز الصور وفك ترميزها. ويمكنها تخزين ملفات بأي صيغة. هذه المكتبة مستوحاة من Stego by EthanWelsh، وهي أداة سطر أوامر بالغرض نفسه.
go get -u github.com/auyer/steganography
| الأصلية | المُرمَّزة |
|---|---|
![]() | ![]() |
تحتوي الصورة الثانية على الفقرة الأولى من وصف الستيغوصور على Wikipedia، وهي متاحة أيضًا في examples/message.txt كمثال.
package main
import (
"bufio"
"image/png"
"io/ioutil"
"github.com/auyer/steganography"
)
يُستخدم وضع الكتابة لأخذ رسالة وتضمينها داخل ملف صورة باستخدام إخفاء المعلومات بتقنية LSB بهدف إنتاج ملف صورة سرية يحتوي على رسالتك.
لاحظ أن الحد الأدنى لحجم الصورة هو 24 بكسل لبايت واحد. ولكل بايت إضافي، يلزم 3 بكسلات إضافية.
inFile, _ := os.Open("input_file.png") // opening file
reader := bufio.NewReader(inFile) // buffer reader
img, _ := png.Decode(reader) // decoding to golang's image.Image
w := new(bytes.Buffer) // buffer that will recieve the results
err := steganography.Encode(w, img, []byte("message")) // Encode the message into the image
if err != nil {
log.Printf("Error Encoding file %v", err)
return
}
outFile, _ := os.Create("out_file.png") // create file
w.WriteTo(outFile) // write buffer to it
outFile.Close()
ملاحظة: تمت إزالة جميع فحوصات الأخطاء للإيجاز، لكن ينبغي تضمينها.
يمكن استخدام وضع الطول لإجراء فحص أولي على الصورة الحاملة بهدف استنتاج حجم الملف الذي يمكنها تخزينه.
sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieves the size of the encoded message
يُستخدم وضع القراءة لقراءة صورة تم ترميزها باستخدام إخفاء المعلومات بتقنية LSB، واستخراج الرسالة المخفية من تلك الصورة.
inFile, _ := os.Open(encodedInputFile) // opening file
defer inFile.Close()
reader := bufio.NewReader(inFile) // buffer reader
img, _ := png.Decode(reader) // decoding to golang's image.Image
sizeOfMessage := steganography.GetMessageSizeFromImage(img) // retrieving message size to decode in the next line
msg := steganography.Decode(sizeOfMessage, img) // decoding the message from the file
fmt.Println(string(msg))
ملاحظة: تمت إزالة جميع فحوصات الأخطاء للإيجاز، لكن ينبغي تضمينها.
للاطلاع على مثال كامل، راجع ملف examples/stego.go. إنه تطبيق سطر أوامر مبني على النسخة الأصلية المتفرعة من هذا المستودع، لكنه مُعدَّل لاستخدام مكتبة إخفاء المعلومات.