Mã hóa XOR - Phép mã hóa đơn giản - C#

Mã hóa XOR - Phép mã hóa đơn giản - C#

Mã hóa Exclusive-OR là phép mã hóa đối xứng sử dụng hàm đại số boolean XOR. Do tính đối xứng cả hai encryptor và decryptor phải biết được khóa mã, trong khi thuật toán xử dụng thật đơn giản, gần như là không thể phá vỡ.

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 KP = 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);

    }

Vậy là ta đã có một hàm mã hóa đơn giản không quá phức tạp.

Bạn thấy bài viết này như thế nào?: 
Average: 10 (6 votes)
Ảnh của Binh Tran Thanh

Drupal Consultant

Started my career as a drupal8 developer in EM Solutions . I love learning Web technologies like HTML, CSS, PHP, Jquery Ajax and Drupal backend . Currently working as a drupal backend developer.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Microsoft "rút chân" khỏi cuộc chơi lớn CES

Microsoft "rút chân" khỏi cuộc chơi lớn CES

Tháng 12 vừa qua, Microsoft đã công bố rằng CES 2012 sẽ là lần tham gia cuối cùng của mình.

Amazon: 1 triệu thiết bị Kindle được bán ra mỗi tuần

Amazon: 1 triệu thiết bị Kindle được bán ra mỗi tuần

Amazon đang rất thành công với các thiết bị Kindle, đặc biệt là Kindle Fire. Hiện số lượng thiết bị Kindle bán ra mỗi tuần đã tăng lên 1 triệu...

Một thập niên đầy biến động tại Hewlett/Packard (HP)

Một thập niên đầy biến động tại Hewlett/Packard (HP)

Một thập niên đầy biến động tại Hewlett/Packard (HP) với việc các thành viên hội đồng quản trị (HĐQT) và Giám đốc điều hành công ty liên tục từ chức hoặc bị buộc ngưng việc do rất nhiều lí do khác nhau.

Công ty diệt chuột T&C

 

Diet con trung