Hiển thị kết quả từ 1 đến 10 / 23
Chủ đề: giúp với
-
18-03-2004 00:24 #1
Registered User
- 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.
-
18-03-2004 14:18 #2
Registered User
- 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
-
18-03-2004 23:44 #3
DDTH.com
- 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ể?
-
19-03-2004 00:10 #4
Registered User
- 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ả ?
-
19-03-2004 01:59 #5
Xin man phep dua ra y kien cua minh nhe : ban co the dung toan tu XOR de ma hoa du lieu, duoc khong ?
-
19-03-2004 18:45 #6
Registered User
- 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 ?
-
20-03-2004 22:51 #7
Registered User
- 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);
-
21-03-2004 01:21 #8
Registered User
- 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
-
21-03-2004 03:40 #9
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
-
21-03-2004 05:07 #10
Registered User
- 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ả ?


Quote
Bookmarks