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

 
Customize display và form modes trong  Drupal 8

Customize display và form modes trong Drupal 8

Last week as I was looking over the Drupal 8 landing page on Drupal.org, I noticed a section titled "Customize display and form modes" and my curiosity was piqued. I fired up an instance of Drupal 8 on Simplytest.me to take a look.

Phần 1 - Cài đặt, model và CRUD trong Symfony 2

Giải nén → đổi tên thư mục Symfony thành sfdemo, sao chép vào thư mục “/var/www”

MacBook Pro Retina 13 inch sẽ được phát hành trong tháng Chín

MacBook Pro Retina 13 inch sẽ được phát hành trong tháng Chín

Theo chuyên gia phân tích Ming-Chi Kuo của KGI Securities dự đoán, một phiên bản mới của MacBook Pro Retina với màn hình 13 inch sẽ được Apple giới thiệu ra thị trường vào tháng 9 tới đây.

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

 

Diet con trung