Thứ Ba, ngày 25 tháng 1 năm 2011

Mã hóa ROT 13

ROT13 (rotate by 13 places) khi dịch ra tiếng việt tôi tạm gọi là phương pháp mã hóa xoay vòng 13 vị trí. Nó là một dạng đơn giản của họ các phương pháp mã hóa văn bản thô (plain text) bằng cách thay thế dữ liệu đơn vị (kí tự, nhóm kí tự) trong văn bản bằng những đơn vị kí tự khác. Các đơn vị kí tự dùng mã hóa trong tình hướng này được gọi là ciphertext, còn nhóm các phương pháp vừa đề cập thì sẽ được gọi là substitution cipher.
Phương thức mã hóa ROT 13 được thực hiện dựa trên thứ tự của bảng chử cái trong tiếng anh. Một kí tự sẽ được mã hóa bằng cách sử dụng kí tự sau nó 13 vị trí để thay thế cho nó. Khi giải mã thì ta chỉ cần làm tương tự như quá trình mã hóa, tức là cứ tiếp tục nhảy 13 vị trí tiếp theo, nếu tới cuối bảng chử cái thì đếm tiếp từ đầu bảng. Như vậy ROT13(ROT13(x)) = x với x là kí tự bất kì trong bảng chử cái. Việc mã hóa và giải mã cũng có thể thực hiện nhờ bảng tra (lookup table) được tạo sẵn dựa vào nguyên tắc trên như sau:
Khi đó chúng ta dễ dàng thấy rằng A sẽ được mã hóa thành N và B sẽ thành O. Với một chuỗi văn bản HELLO chúng ta sẽ có kết quả sau mã hóa là URYYB, không thể được hiểu bởi con người.


Như bạn có thể dễ dàng nhận ra, đây là phương pháp mã hóa rất sơ khai, tính bảo mật của nó hầu như không có, Chính vì thế mà thông thường người ta chỉ sử dụng phương pháp này trong các trò chơi như là đố chử, các bài kiểm tra IQ. Tuy nhiên qua bài viết này tôi mong muốn các bạn có một chút cảm nhận về mã hóa và hãy sữ dụng ý tưởng về quy tắc thay thế xoay vòng để áp dụng cho nhiều trường hợp ứng dụng khác trong quá trình phát triển ứng dụng.

Binh Nguyen - Bioz


Cảm nhận:

7 thảo luận:

Cảm ơn anh! Anh có biết cách nào viết chương trình ứng dụng để mã hóa chuỗi tiếng Việt dạng text không?

anh ko hiểu chuỗi tiếng Việt sang text là sao? tuy nhiên thì để làm với tiếng Việt em cần tìm hiểu về:

- cách xử lý mã unicode trong một ngôn ngữ lập trình mà em muốn viết.
- Phương pháp mã hóa em muốn để áp dụng.

thông thường các hàm mã hóa cơ bản bao giờ cũng có sẵn trong các framework như .net hay opensource và chúng làm việc với unicode có nghĩa là với cả tiếng việt.

Thông thường

Anh có tài liệu nói về cách xử lý mã unicode trong ngôn ngữ lập trình C# không ạ? Nếu có anh gửi cho em được không ạ?

trong .net hầu như unicode đã được hỗ trợ tích hợp. Vấn đề chỉ là dùng như thế nào và cấu hình dự án, thiết lập property ra sao thôi. Em cần xác định mục tiêu muốn làm gì rồi search sẽ thấy nhiều, ví dụ : search với từ khóa unicode c#.

http://csharpindepth.com/Articles/General/Unicode.aspx

có thể xem cái này cho vui :)

Anh có thể giúp em code bài này đc không ạ?
Giả sử em có một chuỗi bất kỳ ví dụ: aoabcoeoed
Em muốn loại bỏ ký tự o ở vị trí thứ 2 và 8 trong chuỗi vì nó đứng giữa hai ký tự giống nhau.
Với chuỗi bất kỳ em muốn loại bỏ ký tự o mà đứng giữa hai ký tự giống nhau.
Em cám ơn anh nhiều ạ.

giãi bài này gồm 2 bước:
- tìm vị trí cần bỏ: duyệt chuỗi, nếu kí tự thứ [i] = o thì kiểm tra [i-1] và [i+1] có giống nhau không nếu giống nhau thì [i] là vị trí cần bỏ.
- loại bỏ phần tử [i] bằng cách dồn các phần tử từ [i+1]... lên 1 ví trí rồi gán vị trí [length - 1] = '\0'; length = length - 1;
- lặp lại 2 bước trên cho tới khi duyệt hết chuỗi.

-> đây chỉ là một bài tập nhỏ em nên động não mà làm, tại sao lại có thể có một yêu cầu phi lí tới vậy. Nếu e là sinh viên CNTT thì anh khuyên em 1 là nên bỏ nghề đi 2 là nên thay đổi thái độ học tập. Nếu em không phải chuyên ngành CNTT thì hãy chú ý đầu tư nhiều hơn và hãy sửa câu hỏi lại là: anh vui lòng giúp gợi ý cho em cách giải quyết thay vì kêu anh làm bài giùm em em gái ạ!?

Đăng nhận xét

chia sẻ cho chúng tôi ý tưởng hay khó khăn của bạn ...