Trang 1 / 3 123 LastLast
Hiển thị kết quả từ 1 đến 10 / 23

Chủ đề: giúp với

  1. #1
    Tham gia
    09-03-2004
    Bài viết
    1
    Like
    0
    Thanked 0 Times in 0 Posts

    giúp với

    Tôi đang viết chương trỉnh mã hóa dư liệu ( bằng thụât toán DES)
    nhưng sử lý từng bit khó quá. Có ai thạo giúp với.
    Quote Quote

  2. #2
    Tham gia
    03-01-2004
    Bài viết
    901
    Like
    0
    Thanked 8 Times in 7 Posts
    0 rõ antín muốn "xử lý từng bit" ra sao ?

    Nhưng thường thì:

    x AND 0 -> 0 : có thể dùng để CLEAR (xóa) bits
    x AND 1 -> x : có thể dùng để CHECK/KEEP (kiểm / giữ nguyên) bits
    x AND x -> x

    x OR 0 -> x : có thể dùng để CHECK/KEEP (kiểm / giữ nguyên) bits (nhưng thường
    là dùng (x AND 1) rồi)
    x OR 1 -> 1 : có thể dùng để SET (lập) bits
    x OR x -> x

    x XOR 0 -> x : có thể dùng để CHECK/KEEP (kiểm / giữ nguyên) bits (nhưng thường
    là dùng (x AND 1) rồi)
    x XOR 1 -> NOT x : có thể dùng để INVERSE (đảo) bits
    x XOR x -> 0

    Tóm lại: giả sử mình có 1 byte dữ liệu X; đánh số các bit: 0 -> 7 (1 byte)

    1) Để xóa (CLEAR) bit i & giữ nguyên bit j của byte dữ liệu X -> tạo 1 mask (mặt nạ ?) thỏa: bit i của mask là 0 & bit j của mask là 1 (tương tự cho các bits còn lại)
    ==> X = X AND mask -> xóa bit i & giữ nguyên bit j của byte dữ liệu X

    2) Để lập (SET) bit i & giữ nguyên bit j của byte dữ liệu X -> tạo 1 mask (mặt nạ ?) thỏa: bit i của mask là 1 & bit j của mask là 0 (tương tự cho các bits còn lại)
    ==> X = X OR mask -> lập bit i & giữ nguyên bit j của byte dữ liệu X

    3) Để đảo (INVERSE) bit i & giữ nguyên bit j của byte dữ liệu X -> tạo 1 mask (mặt nạ ?) thỏa: bit i của mask là 1 & bit j của mask là 0 (tương tự cho các bits còn lại)
    ==> X = X XOR mask -> đảo bit i & giữ nguyên bit j của byte dữ liệu X

    4) Để kiểm (CHECK) / lấy giá trị ở bit i của byte dữ liệu X -> tạo 1 mask (mặt nạ ?) thỏa: bit i của mask là 1 & các bits còn lại của mask là 0
    ==> Y = X AND mask -> Y là 0 nếu bit i của byte dữ liệu X là 0; Y khác 0 nếu bit i của byte dữ liệu X khác 0

    Lưu ý: bạn có thể lập / xóa / đảo nhiều hơn 1 bit (2, 3, 4...) chỉ bằng 1 lần AND / OR / XOR . Nhưng để kiểm / lấy giá trị thì làm từng bit.
    Nếu bạn làm cho 2 bit j & bit j: tạo 1 mask (mặt nạ ?) thỏa: bit i & bit j của mask là 1 & các bits còn lại của mask là 0
    ==> Y = X AND mask -> Y là 0 nếu bit i & bit j của byte dữ liệu X đều là 0; Y khác 0 nếu bit i HOẶC bit j của byte dữ liệu X khác 0 (nếu bit i là 1 còn bit j là 0 hoặc ngược lại thì Y vẫn khác 0) => mình biết được là cả 2 bit i & bit j đều là 0 (hay là có ít nhứt 1 bit là 1)
    Được sửa bởi bete lúc 14:23 ngày 18-03-2004

  3. #3
    Tham gia
    23-02-2003
    Location
    Melbourne
    Bài viết
    5,256
    Like
    0
    Thanked 20 Times in 16 Posts
    Còn SHL với SHR sao bete ko nói luôn thể?

  4. #4
    Tham gia
    03-01-2004
    Bài viết
    901
    Like
    0
    Thanked 8 Times in 7 Posts
    SHL thường dùng để nhân đôi
    SHR thường dùng để chia đôi

    ==> tui 0 biết antín "xử lý bit" như nào => tui đoán là lập / xóa / đảo / kiểm giá trị của các bit thôi nên 0 nhắc tới (ở mức hợp ngữ - assembly language - thì có thể dùng SHL & SHR để kiểm giá trị của bit đầu / bit cuối => nhưng mình có thể xài AND thay vào đó rồi)

    0 biết SHL & SHR còn có thể xài cho ứng dụng nào khác 0 jiSh hả ?

  5. #5
    Tham gia
    11-12-2003
    Bài viết
    194
    Like
    0
    Thanked 0 Times in 0 Posts
    Xin man phep dua ra y kien cua minh nhe : ban co the dung toan tu XOR de ma hoa du lieu, duoc khong ?

  6. #6
    Tham gia
    03-01-2004
    Bài viết
    901
    Like
    0
    Thanked 8 Times in 7 Posts
    ý của songok là cho byte dữ liệu X, mình lập mask M và lưu trữ Y = X XOR M
    Tới khi giải mã thì làm Z = Y XOR M = X ?

    Cái này có lẻ thuộc về phần đảo bit ?

  7. #7
    Tham gia
    03-01-2004
    Bài viết
    901
    Like
    0
    Thanked 8 Times in 7 Posts
    Để trả lời cho ccâu hỏI của antín:

    1) Để xóa (CLEAR) bit i & giữ nguyên bit j của byte dữ liệu X -> tạo 1 mask (mặt nạ ?) thỏa: bit i của mask là 0 & bit j của mask là 1 (tương tự cho các bits còn lại)
    ==> X = X AND mask -> xóa bit i & giữ nguyên bit j của byte dữ liệu X

    hàm ClearBit
    input1: byte dữ liệu X
    input2: số nguyên i (mình muốn xóa bit thứ i => i: 0->7)

    khởi tạo mask (byte) M = 1 => bit 0 của M là 1, các bít còn lại là 0
    M = (M shl i) => bit i của M là 1, các bít còn lại là 0
    M = NOT M => bit i của M là 0, các bít còn lại là 1
    trả về: Y = X AND M (bit i của Y là 0; bit j (j khác i) của Y = bit j của X)

    Sử dụng: X = ClearBit(X, i);

    2) Để lập (SET) bit i & giữ nguyên bit j của byte dữ liệu X -> tạo 1 mask (mặt nạ ?) thỏa: bit i của mask là 1 & bit j của mask là 0 (tương tự cho các bits còn lại)
    ==> X = X OR mask -> lập bit i & giữ nguyên bit j của byte dữ liệu X

    hàm SetBit
    input1: byte dữ liệu X
    input2: số nguyên i (mình muốn lập bit thứ i => i: 0->7)

    khởi tạo mask (byte) M = 1 => bit 0 của M là 1, các bít còn lại là 0
    M = (M shl i) => bit i của M là 1, các bít còn lại là 0
    trả về: Y = X OR M (bit i của Y là 1; bit j (j khác i) của Y = bit j của X)

    Sử dụng: X = SetBit(X, i);

    3) Để đảo (INVERSE) bit i & giữ nguyên bit j của byte dữ liệu X -> tạo 1 mask (mặt nạ ?) thỏa: bit i của mask là 1 & bit j của mask là 0 (tương tự cho các bits còn lại)
    ==> X = X XOR mask -> đảo bit i & giữ nguyên bit j của byte dữ liệu X

    hàm InverseBit
    input1: byte dữ liệu X
    input2: số nguyên i (mình muốn đảo bit thứ i => i: 0->7)

    khởi tạo mask (byte) M = 1 => bit 0 của M là 1, các bít còn lại là 0
    M = (M shl i) => bit i của M là 1, các bít còn lại là 0
    trả về: Y = X XOR M (bit i của Y là đảo bit i của X; bit j (j khác i) của Y = bit j của X)

    Sử dụng: X = InverseBit(X, i);

    4) Để kiểm (CHECK) / lấy giá trị ở bit i của byte dữ liệu X -> tạo 1 mask (mặt nạ ?) thỏa: bit i của mask là 1 & các bits còn lại của mask là 0
    ==> Y = X AND mask -> Y là 0 nếu bit i của byte dữ liệu X là 0; Y khác 0 nếu bit i của byte dữ liệu X khác 0

    hàm GetBit
    input1: byte dữ liệu X
    input2: số nguyên i (mình muốn check bit thứ i => i: 0->7)

    khởi tạo mask (byte) M = 1 => bit 0 của M là 1, các bít còn lại là 0
    M = (M shl i) => bit i của M là 1, các bít còn lại là 0
    trả về Y = X AND M (bit i của Y là bit i của X; bit j (j khác i) của Y là 0)

    Sử dụng: Z = GetBit(X, i);

    5) Để hoán vị bit i & bit j của byte dữ liệu X:

    Nếu làm dài dòng (nhưng dễ hiểu):

    Hàm SwapBit
    input1: byte dữ liệu X
    input2: số nguyên i (mình muốn đổi bit thứ i)
    input2: số nguyên j (mình muốn đổi bit thứ j)

    Y = X;
    Y1 = GetBit(X, i) => Y1 là 0 nếu bit i của X là 0; Y1 khác 0 nếu bit i của X là 1;
    Y2 = GetBit(X, j) => Y2 là 0 nếu bit j của X là 0; Y2 khác 0 nếu bit j của X là 1;
    nếu Y1 là 0 => Y=ClearBit(Y,j); nếu Y1 khác 0 => Y=SetBit(Y,j);
    nếu Y2 là 0 => Y=ClearBit(Y,i); nếu Y2 khác 0 => Y=SetBit(Y,i);
    trả về Y

    Sử dụng: X = SwapBit(X, i, j);

  8. #8
    Tham gia
    25-02-2004
    Bài viết
    39
    Like
    0
    Thanked 0 Times in 0 Posts
    Tôi đang học Assembly và đang viết chương trình đảo 1 kí tự thành số nhị phân . Tôi có dùng Shl (SHL Al,1) mà không hiểu sao khi biên dịch chương trình lại báo :
    Expected : Instruction or directive

    Ai biết giúp tôi với . Tôi xin cảm ợn
    Ngoài cách kiểm tra giá trị của CF là JC và JNC thì còn cách nào khác khộng Nếu có mong bạn miểu tả cả cú pháp và chức năng .
    Được sửa bởi Panda1982 lúc 01:26 ngày 21-03-2004

  9. #9
    Tham gia
    11-12-2003
    Bài viết
    194
    Like
    0
    Thanked 0 Times in 0 Posts
    nhung neu ma hoa bang toan tu XOR thi nguoi ta se giai ma duoc neu nhu kien nhan thu het tat cac 255 ky tu

  10. #10
    Tham gia
    03-01-2004
    Bài viết
    901
    Like
    0
    Thanked 8 Times in 7 Posts
    songok nói đúng lắm => 0 rõ songok nói trong bài trước mã hóa bằng XOR là thế nào ?
    Trường hợp để gây khó khăn cho người khác giải mã thì tui nghĩ có thể xài pasword là 1 chuỗi ký tự => xem như chuỗi của nhiều bytes => byte thứ 1 của dữ liệu được XOR với byte thứ 1 của pasword, byte thứ 2 của dữ liệu được XOR với byte thứ 2 của pasword, ..., byte thứ n của dữ liệu được XOR với byte thứ n của pasword, byte thứ n+1 của dữ liệu được XOR với byte thứ 1 của pasword, byte thứ n+2 của dữ liệu được XOR với byte thứ 1 của pasword, ....; có được 0 songok hả ?

Trang 1 / 3 123 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •