Các vấn đề thực ta phải quan tâm: Dễ bị khớp mẫu, nhưng điểm yếu này có thể tránh được thông qua việc nén trước thông tin (để có thể loại bỏ các mẫu). Một số điều lưu ý:
1. XOR áp dụng cho 1 chuỗi văn bản không là thuật toán mã hóa mạnh.
2. Mã hóa thông tin trong ứng dụng XML dễ bị đụng độ với các ký tự chuẩn trong XML
3. Nếu cần mã hóa mạnh, KHÔNG sử dụng thuật toán XOR đơn thuần. Cần có các hệ mật mã an toàn đang được sử dụng (DES, TDES, AES, RC4, RC6, IDEA .. RSA, Elgamal, hệ mật sắp ba lô, hệ mã tuyến tính [n, k, d], ...) hoặc cần được sử dụng phức hợp.
Mã hóa XOR hoạt động bằng cách sử dụng hàm đại số boolean exclusive-OR (XOR). XOR là 1 toán tử nhị phân (tức là toán tử hai ngôi có 2 tham số - giống như phép cộng). Theo tên của nó, exclusive - OR, nó dễ dàng để suy ra (đúng, hoặc sai). Bảng chân lý cho toán tử XOR.
A B A XOR B T T F T F T F T T F F F
Tham khảo:
http://www.cprogramming.com/tutorial/xor.html
http://www.eggheadcafe.com/tutorials/aspnet/8b53894c-a889-4914-8c46-122980cc44ae/simple-xor-encryption.aspx
Trước khi xem đoạn code dưới đây ta có một kết luận về phép toán XOR như sau: Giả sử ta cần mã hóa bản rõ P bằng khóa K. Ta thu được bản mã C = P xor K và P = C xor K.
Ví dụ sử dụng XOR để mã hóa một chuỗi bất kỳ:
public void Encrypt(byte[]
ip_secret_buffer, byte[] ip_key_buffer)
{
for (int i = 0, j =0; i < ip_secret_buffer.Length; i++)
{
ip_secret_buffer[i] ^=
ip_secret_buffer[j];
j = (++j <
m_app_initial_data.Length) ? j : 0;
}
}
public void Decrypt(byte[]
ip_secret_buffer, byte[] ip_key_buffer)
{
Encrypt(ip_secret_buffer,
ip_key_buffer);
}
public string Encrypt(string
ip_str_plaintext, string ip_str_key)
{
var
v_secret_buffer = Encoding.UTF8.GetBytes(ip_str_plaintext);
var
v_key_buffer = Encoding.UTF8.GetBytes(ip_str_key);
Encrypt(v_secret_buffer, v_key_buffer);
return Encoding.UTF8.GetString(v_secret_buffer);
}
0 comments:
Đăng nhận xét