PNG này là ngăn bí mật: 4 bước
PNG này là ngăn bí mật: 4 bước
Anonim
PNG này là ngăn bí mật
PNG này là ngăn bí mật
PNG này là ngăn bí mật
PNG này là ngăn bí mật

Thách thức của bạn, độc giả thân mến, là tìm ra thông điệp nào được ẩn trong hình ảnh output-p.webp

Hai hình ảnh ở đây trông giống hệt nhau nhưng không phải. Đây là hình ảnh greenman-p.webp

Hướng dẫn này được lấy cảm hứng từ một video youtube tuyệt vời. Sau khi xem video này vào đêm khuya một ngày và trằn trọc nghĩ ra một bài giảng hay và đề thi giữa kỳ cho lớp lập trình Java nâng cao, dự án này đã ra đời. Các hình ảnh ở trên, cùng với đoạn mã được mô tả trong hướng dẫn này, là miễn phí trên Github.

Quân nhu

Bạn sẽ cần một máy tính và bạn sẽ phải biết cách biên dịch và chạy một chương trình Java. Chương trình này chỉ là hai tệp ngắn và bạn sẽ cần chạy nó trên dòng lệnh.

Bước 1: Steganography là gì

Bạn nên xem video youtube mà tôi đã liên kết ở bước trước, nhưng đây là phần tóm tắt:

Nếu bạn cần ẩn một tin nhắn bí mật cho bạn bè, một cách tuyệt vời để làm điều đó là với Steganography. Ý tưởng của Steganography hình ảnh rất đơn giản; hình ảnh máy tính được tạo bằng pixel và mỗi pixel là sự kết hợp của màu đỏ, xanh lá cây và xanh lam. Trong nhiều định dạng hình ảnh máy tính, số lượng màu đỏ, xanh lục và xanh lam trong mỗi pixel được biểu thị bằng các giá trị từ 0-127. Vì vậy, ví dụ, một pixel rất đỏ sẽ có giá trị màu đỏ là 127 và các giá trị xanh lục và xanh lam là 0. Bí quyết là đây: cường độ đỏ 126 không thể phân biệt được với cường độ đỏ 127 (đối với mắt người). Và do đó, bằng cách thử cộng hoặc trừ một trong mỗi pixel màu đỏ, chúng ta có thể ẩn các bit trong pixel. Nếu chúng tôi tìm thấy một cách lén lút để thu thập các bit sao lưu, chúng tôi có thể lấy dữ liệu mà chúng tôi đã lén đưa vào hình ảnh!

Sáng tạo! Steganography có thể được thực hiện với bất kỳ phương tiện kỹ thuật số nào! Bạn có thể chơi với các bit trong tệp nhạc hoặc video chẳng hạn, nhưng điều đó đòi hỏi bạn phải nghiên cứu thêm bên ngoài phạm vi của tài liệu hướng dẫn này.

Bước 2: Cách mã hóa văn bản trên máy tính

Cách mã hóa văn bản trên máy tính
Cách mã hóa văn bản trên máy tính

Những gì tiếp theo ở đây có thể yêu cầu một bằng cấp về CS hoặc rất nhiều niềm đam mê sở thích để hiểu. Máy tính lưu trữ dữ liệu dưới dạng bit 1s và 0s. Các số 1 và số 0 này thường được nhóm lại thành các chùm 8 và được gọi là "byte". Như đã giải thích ở đây và ở đây, có một số cách chúng ta có thể yêu cầu máy tính diễn giải byte thành văn bản. Để tận dụng tối đa bài giảng / hướng dẫn steganography này, bạn cần hiểu ít nhiều về ASCII và UTF8. Đây là hai cách phổ biến để mã hóa dữ liệu ngôn ngữ trong một chuỗi byte.

Khi bạn đã có ý tưởng về chủ đề này, bạn sẽ hiểu điều này: Trong ASCII và UTF8, từ "the" được biểu thị bằng các byte sau (trong hệ lục phân) 0x74 0x68 0x65. Trong hệ nhị phân, các byte này là: 01110100b 01101000b 01101101b

Hơn nữa, bạn sẽ hiểu rằng trong UTF8, Biểu tượng cảm xúc khuôn mặt cười toe toét được biểu thị bằng các byte sau (trong hệ lục phân) 0xF0 0x9F 0x98 0x80. Trong hệ nhị phân, các byte này là 11110000b 10011111b 10011000b 10000000b.

Trong bất kỳ trường hợp nào, bạn sẽ thấy trong ảnh chụp màn hình đính kèm rằng máy tính của tôi đang làm gì đó với những byte này. Tôi đã đánh dấu chúng trong đầu ra chương trình bằng các mũi tên và "LOOK!" Lớn.

Bước 3: Cách thức hoạt động của chương trình

Biên dịch chương trình từ github rất dễ dàng. Nhận repo được hiển thị trên trang đầu tại đây và sau đó

Chương trình được chạy như thế này từ dòng lệnh: java Main input-p.webp

trong các ví dụ đính kèm, bạn sẽ thấy rằng tôi đã chạy java Main greenman-p.webp

Bạn sẽ làm điều tương tự.

Nếu bạn nhìn vào Main.java, bạn sẽ thấy rằng đây là những gì sẽ xảy ra:

  1. Chương trình đọc hình ảnh thành một mảng 2D
  2. Chương trình biến thông báo bạn đã cung cấp thành một mảng byte (byte )
  3. Sau đó, chương trình sử dụng một lớp MessageHider để ẩn các byte thông báo trong mảng hình ảnh.
  4. Sau đó, chương trình ghi mảng hình ảnh 2d ra một tệp (output.png) với dữ liệu ẩn bên trong. Nếu bạn nhìn vào hình ảnh này, nó không thể phân biệt được với bản gốc
  5. Sau đó, chương trình đọc output-p.webp" />

Vì vậy, khá nhiều mã hoạt động như chúng ta mong đợi.

Bước 4: Kết luận

Vì vậy, tôi đã cung cấp cho bạn một số mã làm việc, bằng chứng rằng nó hoạt động dưới dạng hình ảnh và một số ghi chú bài giảng tôi đưa cho sinh viên đại học của mình. Tôi cũng đã cho bạn một thử thách! Tôi đã dành một vài giờ để viết mã và chuẩn bị ghi chú bài giảng vì vậy tôi xin lỗi vì hướng dẫn này không có nhiều hình ảnh. Nếu bạn nghĩ steganography là thú vị, hãy chấp nhận thử thách của tôi!