You are on page 1of 6

BÀI TẬP

Viết chương trình thực hiện yêu cầu sau:


1. Cho người dùng nhập một đoạn văn bản từ bàn phím
2. Mã hoá đoạn văn bản này rồi xuất ra màn hình
3. Tính toán chuỗi băm của đoạn văn bản này rồi gởi đến một máy tính khác trên
mạng

Bài làm.
Ở đây em mã hóa bằng RSA và dùng hàm băm MD5, bởi vì quen làm bằng
winform nên xin phép làm bằng winform ạ
Coding:
//câu 1,2//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//dùng namespace System.Security.Cryptography để dùng các hàm liên quan
tới RSA//
using System.Security.Cryptography;
namespace BTVN
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
//tạo một lớp Encryption (mã hóa)//
static public byte[] Encryption(byte[] Data, RSAParameters RSAKey, bool
DoOAEPPadding)
{
try
{
//khai báo mảng encryptedData có kiểu dữ liệu là byte//
byte[] encryptedData;
//lớp RSACryptoServiceProvider thực hiện mã hóa và giải mã bất đối xứng
bằng cách sử dụng thuật toán RSA do nhà cung cấp dịch vụ mật mã (CSP)
cung cấp. Lớp này không thể được thừa kế//
using (RSACryptoServiceProvider RSA = new
RSACryptoServiceProvider())
{
//Imprort key từ RSAKey//
RSA.ImportParameters(RSAKey);
// Chuyển dữ liệu tới encrypted, thông tin khóa bí mật(Data)//
// Mã hóa mảng byte đã truyền và chỉ định phần đệm OAEP//
encryptedData = RSA.Encrypt(Data, DoOAEPPadding);
}
return encryptedData;
}
catch (CryptographicException e)
{
//hiển thị message//
Console.WriteLine(e.Message);
return null;
}

}
//tạo một lớp Decryption (giải mã)//
//các bước tương tự Encryption//
static public byte[] Decryption(byte[] Data, RSAParameters RSAKey, bool
DoOAEPPadding)
{
try
{
byte[] decryptedData;
using (RSACryptoServiceProvider RSA = new
RSACryptoServiceProvider())
{
RSA.ImportParameters(RSAKey);
// Nhập thông tin Khóa RSA, bao gồm khóa cá nhân//
// chỉ định phần đệm OAEP//
decryptedData = RSA.Decrypt(Data, DoOAEPPadding);
}
return decryptedData;
}
catch (CryptographicException e)
{
//chuyển sang chuỗi(ToString())//
Console.WriteLine(e.ToString());
return null;
}
}
//class UnicodeEncoding dùng để đại diện cho bảng mã UTF-16 của các ký tự
Unicode, chuyển đổi byte//
UnicodeEncoding ByteConverter = new UnicodeEncoding();
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//khai báo 2 mảng//
byte[] plaintext;
byte[] encryptedtext;
//button 1 dùng để mã hóa//
private void button1_Click(object sender, EventArgs e)
{
//nhập thông điệp từ textbox textbox1, chuyển sang kiểu byte//
plaintext = ByteConverter.GetBytes(textbox1.Text);
// Chuyển dữ liệu tới encryptedtext, thông tin khóa công khai (sử dụng
RSACryptoServiceProvider.ExportParameters (false) và cờ boolean chỉ định
không có phần đệm OAEP//
encryptedtext = Encryption(plaintext, RSA.ExportParameters(false), false);
//textbox2 sẽ hiển thị ra chuỗi đã được mã hóa//
textbox2.Text = ByteConverter.GetString(encryptedtext);
}
//button 2 là để giải mã//
private void button2_Click(object sender, EventArgs e)
{
// Chuyển dữ liệu đến decryptedtex, thông tin khóa cá nhân (sử dụng
RSACryptoServiceProvider.ExportParameters (true) và cờ boolean chỉ định
không có phần đệm OAEP//
byte[] decryptedtex = Decryption(encryptedtext,
RSA.ExportParameters(true), false);
//textbox3 sẽ hiển thị ra chuỗi đã được giải mã//
textbox3.Text = ByteConverter.GetString(decryptedtex);
}
//câu3//
//hàm băm SHA265//
static string ComputeSha256Hash(string rawData)
{
//tạo SHA256//
using (SHA256 sha256Hash = SHA256.Create())
{
//ComputeHash trả về mảng byte//
//lấy dữ liệu từ textbox1//
byte[] bytes =
sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(textbox1.text));
// chuyển từ byte sang string//
StringBuilder builder = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
builder.Append(bytes[i].ToString("x2"));
}
return builder.ToString();
}
}
//Button 3 dùng để gửi mã băm//
private void button3_Click(object sender, EventArgs e){

}
}

You might also like