- [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
[C#] Hướng dẫn mã hóa và giải mã sử dụng thuật toán ROT13
Bài viết hôm nay, mình sẽ tiếp tục chia sẽ đến các bạn một hàm mã hóa nữa là hàm mã hóa ROT 13 C#.
[C#] Tutorial Encrypt and Decrypt ROT 13
Vậy Mã hóa ROT 13 là gì?
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.
Và dưới đây là giao diện demo mã hóa ROT13 của C#:
Source code mã hóa ROT 13 C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RC4_cypher_Csharp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string Rot13(string input)
{
StringBuilder result = new StringBuilder();
Regex regex = new Regex("[A-Za-z]");
foreach (char c in input)
{
if (regex.IsMatch(c.ToString()))
{
int charCode = ((c & 223) - 52) % 26 + (c & 32) + 65;
result.Append((char)charCode);
}
else
{
result.Append(c);
}
}
return result.ToString();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
txtEncrypt.Text = Rot13(txtInput.Text);
}
private void button2_Click(object sender, EventArgs e)
{
txtDecrypt.Text = Rot13(txtEncrypt.Text);
}
}
}
Have Fun :)