Hiding Data in Plain Sight: Least Significant Bit Image Steganography in Python

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ม.ค. 2025

ความคิดเห็น • 16

  • @gusthomas6872
    @gusthomas6872 9 หลายเดือนก่อน +4

    the way you explain RGB so precisely in just 10 seconds is so killer

    • @ctralie
      @ctralie  9 หลายเดือนก่อน +1

      Thank you Gus! It's good to know that this way of explaining it works!

  • @alexioskouvakas1953
    @alexioskouvakas1953 5 หลายเดือนก่อน

    Thank you, Chris! This tutorial has been such a great resource!

    • @ctralie
      @ctralie  5 หลายเดือนก่อน

      I'm so glad to hear that, thanks for watching!

  • @KrafTeck666
    @KrafTeck666 9 หลายเดือนก่อน

    Your video is really interessting and well explained. I would have loved to see what the encoding looked like by showing the red channel only like you did at 4:44 but with the original image and the altered image.

    • @ctralie
      @ctralie  9 หลายเดือนก่อน +1

      Thank you! And thank you for this suggestion! I updated the notebook here to show this:
      ctraliedotcom.github.io/basicimageprocessing/LSBImgSteg.html
      and I gave you a shoutout

  • @MrNerdyjoke
    @MrNerdyjoke 5 หลายเดือนก่อน

    Love it! Dot product was a cool trick for decoding

    • @ctralie
      @ctralie  5 หลายเดือนก่อน

      Yes, numpy at its finest! I'm glad I actually decided to do that out manually

  • @shmigo1628
    @shmigo1628 9 หลายเดือนก่อน

    Nice video on an interesting topic! Image compression was one of the first things that came to my mind at the beginning, nice that you covered it in the end. I think you don't need to encode the null terminator explicitly in this case, because the rest of the image is zeroes anyway, no?

    • @ctralie
      @ctralie  9 หลายเดือนก่อน +1

      Thank you so much! You are absolutely right that I've already made everything 0's after the message, so the null terminator is not needed. Well spotted! What I probably should have done is keep all of the pixels intact that don't need to store the message. In that case I would require the null terminator

  • @TomášTichy-y5w
    @TomášTichy-y5w 5 หลายเดือนก่อน

    Hi Chris, Absolutely great video that is easy to follow through. How can you embed information so that it remains intact even after the image undergoes manipulations like resizing, cropping, or compression? Any best practices or examples? Thanks !

    • @ctralie
      @ctralie  5 หลายเดือนก่อน

      Awesome, glad you got so much out of it!
      Wow this is a great question. So yeah, this LSB technique would completely fail under these kinds of images operations. For a recent paper that hides information that's robust to the sorts of transformations you're talking about, checkout this paper
      openaccess.thecvf.com/content_ECCV_2018/papers/Jiren_Zhu_HiDDeN_Hiding_Data_ECCV_2018_paper.pdf
      figure 4 talks about a neat trick to make it robust to compression, which is one of the hardest transformations to deal with
      an even more recent paper that got a lot of press is Glaze:
      people.cs.uchicago.edu/~ravenben/publications/pdf/glaze-usenix23.pdf
      Both of these are significantly more sophisticated than LSB though! I'd have to think if there's a simpler hand crafted way to make something more robust

  • @thangkhuathuu499
    @thangkhuathuu499 3 หลายเดือนก่อน

    Hi i'm confused about the part why do we have to round down the image?

    • @ctralie
      @ctralie  3 หลายเดือนก่อน

      Ah okay, so perhaps "IRound"; I should have called it "IEven". What I was doing there was getting rid of the least significant bit of all pixels to give the image a clean slate to put data into. So after the step IRound = I - I%2, the image IRound has all even numbers. Since all even numbers are 0's, this is like starting with all 0's. But we can add 1 to some of them if we want to store a 1. Does that make sense?

  • @void4831
    @void4831 10 หลายเดือนก่อน +2

    facinating

    • @ctralie
      @ctralie  10 หลายเดือนก่อน +2

      Thanks for watching!