
برنامج بايثون لإخفاء الملفات داخل الصور باستخدام البت الأقل أهمية.
برنامج بلغة بايثون يعتمد على طرق إخفاء المعلومات (Steganography) لإخفاء الملفات في الصور باستخدام تقنية Least Significant Bit.
لقد استخدمت الطريقة الأساسية وهي Least Significant Bit. يتكون البكسل الملون من الأحمر والأخضر والأزرق، مشفرًا على بايت واحد. الفكرة هي تخزين المعلومات في البت الأول من كل مكون من مكونات RGB للبكسل. في أسوأ الحالات، تختلف القيمة العشرية بمقدار واحد وهو ما لا يمكن للعين البشرية ملاحظته. عمليًا، إذا لم تكن لديك مساحة كافية لتخزين جميع بياناتك في البت الأول من كل بكسل، يجب البدء في استخدام البت الثاني، وهكذا. يجب أن تضع في اعتبارك أن كلما زادت البيانات المخزنة في الصورة، زادت احتمالية اكتشافها.
تعتمد وحدة LSBSteg على OpenCV لإخفاء البيانات في الصور. تستخدم البت الأول من كل بكسل وكل لون في الصورة. الكود بسيط الفهم؛ إذا تم استخدام جميع البتات الأولى، تبدأ الوحدة في استخدام البت الثاني، لذا كلما زادت البيانات، زاد تغيير الصورة. يمكن للبرنامج إخفاء جميع البيانات إذا كانت هناك مساحة كافية في الصورة. الوظائف الرئيسية هي:
فقط الصور بدون ضغط هي المدعومة، أي ليست JPEG لأن بتات LSB قد يتم العبث بها أثناء مرحلة الضغط.
هذه الأداة تتطلب فقط OpenCV وتبعياتها.
pip install -r requirements.txt
LSBSteg.py
Usage:
LSBSteg.py encode -i <input> -o <output> -f <file>
LSBSteg.py decode -i <input> -o <output>
Options:
-h, --help Show this help
--version Show the version
-f,--file=<file> File to hide
-i,--in=<input> Input image (carrier)
-o,--out=<output> Output image (or extracted file)
تشفير النص:
#encoding
steg = LSBSteg(cv2.imread("my_image.png"))
img_encoded = steg.encode_text("my message")
cv2.imwrite("my_new_image.png", img_encoded)
#decoding
im = cv2.imread("my_new_image.png")
steg = LSBSteg(im)
print("Text value:",steg.decode_text())
إخفاء الصور:
#encoding
steg = LSBSteg(cv2.imread("carrier.png")
new_im = steg.encode_image(cv2.imread("secret_image.jpg"))
cv2.imwrite("new_image.png", new_im)
#decoding
steg = LSBSteg("new_image.png")
orig_im = steg.decode_image()
cv.SaveImage("recovered.png", orig_im)
إخفاء الملفات الثنائية:
#encoding
steg = LSBSteg(cv2.imread("carrier.png"))
data = open("my_data.bin", "rb").read()
new_img = steg.encode_binary(data)
cv2.imwrite("new_image.png", new_img)
#decoding
steg = LSBSteg(cv2.imread("new_image.png"))
binary = steg.decode_binary()
with open("recovered.bin", "rb") as f:
f.write(data)
هذا البرنامج مرخص بموجب رخصة MIT.