Bác nào biết gửi message vào ảnh dùng Least Significant Bit trong java swing

Các bác cho em hỏi ,bác nào biết message vào ảnh dùng Least Significant Bit trong java swing ạ

Tức là write message vào ảnh? Hay chuyển đổi mảng byte thành ảnh? Hay là chuyển đổi message thành ảnh ?
Và dùng LSB ?

chuyền tin nhắn vào ảnh , và 1 phần mềm đọc ảnh ra tin nhắn ạ

Hiểu, tức là “giấu” message vào một bức ảnh. Chia nhỏ problem ra:

  1. Là biến ảnh thành một mảng byte: http://stackoverflow.com/questions/3211156/how-to-convert-image-to-byte-array-in-java

  2. Là biến mảng byte này thành bitset: http://stackoverflow.com/questions/36145753/convert-byte-to-bitset

  3. Là biến message thành dãy nhị phân: có thể dùng function này:

    String s = "daynhauhoc, Nancru";
    StringBuilder buf = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        int charcterASCII = s.charAt(i);
        buf.append(Integer.toBinaryString(charcterASCII));
    }
    System.out.println("answer : " + buf.toString());
  1. Thay thế mỗi bit ở vị trí 8*x - 1 trong BitSet ảnh, thay bằng bit vị trí thứ x của dãy nhị phân message. Và x = 0 -> message.length

  2. Nếu làm được tới chỗ này sẽ hiểu rõ cách lấy ra

Good luck

3 Likes

bác có thể cho e ních fb có gì e mắc e liện hệ đc không

Không, hỏi trên đây đi. Tui muốn fb tui toàn em xinh tươi thôi, hehe

1 Like

bác ơi cho em hỏi cái

1 Like

LSB là việc thay đổi dãy 8 bit mà ít gây ra ảnh hưởng nhất, ngược lại là MSB gây ra ảnh hưởng nhất. Ta biết là một 1 byte có 8 bit. Max value cho dãy 8 bit này là 255(1111 1111).
Nếu change theo MSB ví dụ ta có 1111 1111 => 0111 1111 = 127 (Change nhiều nhất)
Nhưng change theo LSB, ví dụ ta có 1111 1111 => 1111 1110 = 254 (Change ít nhất)
Đương nhiên ta cũng có thể change vị trí thứ Hai hoặc vị trí thứ Bảy của dãy bit.
Vị trí thứ Hai 1111 1111 => 1111 1101 = 253
Vị trí thứ Bảy 1111 1111 => 1011 1111 = 191

Nhưng trong hình ảnh, với dãy màu 8bit, 24bit, 32bit v.v thì việc bạn change bit cuối cùng sẽ không ảnh hưởng tới thị giác màu sắc của con người. Đó là tại sao phát minh ra kỹ thuật giấu message vào LSB thay vì MSB hay các vị trí khác.

Trở lại vấn đề

Ví dụ bạn có một khung hình màu sắc 8 bit, với dãy bit như thế này:
10000000.10100100.10110101, 10110101.11110011.10110111, 11100111.10110011.00110011
Và A có dãy binary như thế này: 1000001. Thì sẽ lấy từng bit ở dãy A’s binary change vào từng cụm 8 bit ở dãy image’s binary
10000001.10100100.10110100, 10110100.11110010.10110110, 11100110.10110011.00110011

Đó là việc messages vào hình ảnh. Tài liệu cụ thể có thể đọc ở đây: Tài liệu cụ thể như thế này:
http://www.lia.deis.unibo.it/Courses/RetiDiCalcolatori/Progetti98/Fortini/lsb.html

Em xem code nhưng không hieur 1 vài chỗ bác có thể giải thích cho em đc không , chỗ cái đoạn 2 vòng for, sao cần lấy đồ dày của ảnh để thực hiện phép tình làm gì ạ.

Chỗ này nó muốn tính cái byte/int set vào sẽ set ở dãy binary nào của hình ảnh. Nên nhớ là khi image convert ra binary thì nó sẽ là một ma trận với width x height.
Chỗ này đại ý nó sẽ phân message ra thành: độ dài của message và dãy binary của message để set vào ảnh theo thứ tự độ dài -> dãy binary. Và mỗi bit mới cần set vào thì sẽ di chuyển dãy binary theo xuống chiều dài ảnh theo từng dòng và từng cột (width x height).
Ví dụ như nó đã set được 40 bit đầu tiên rồi (32 bit của độ dài chuỗi(int = 4 bytes * 8) và 8 bit của kí tự đầu tiên của chuỗi). Và width của ảnh chỉ có 5 bytes(40 bits). Thì kí tự tiếp theo bắt buộc phải set ở vị trí số [1][0]

1 Like

CÓ gì e hỏi tiếp đc không bác

Ok, được thôi :japanese_goblin:

Mà câu hỏi muốn hỏi thì đặt ra luôn đi, đừng chờ tui confirm gì hay ko, forum còn những bạn khác có thể giải được mà.

Tại vì bác biết thuật toán này , lên hỏi dễ hơn

bác ơi rảnh không cho em hỏi cái

Bác ơi e cần bác giúp với

bác cho em xin fb hay skype để liên hệ đc không , e muốn hỏi vài chỗ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?