Thuật toán mã hóa AES

Một phần của tài liệu Ứng dụng mail client (Trang 35)

II. MÔ TẢ CHỨC NĂNG

4 Thuật toán mã hóa AES

Ứng dụng của nhóm có sử dụng thuật toán mã hóa AES( Advanced Encryption Standard hay Tiêu chuẩn mã hóa tiên tiến).

AES là một thuật toán mã hóa khối được chính phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa. Giống như tiêu chuẩn tiền nhiệm DES, AES được kỳ vọng áp dụng trên phạm vi thế giới và đã được nghiên cứu rất kỹ lưỡng. AES được chấp thuận làm tiêu chuẩn liên bang bởi Viện tiêu chuẩn và công nghệ quốc gia Hoa kỳ (NIST) sau một quá trình tiêu chuẩn hóa kéo dài 5 năm.

Các hàm của thuật toán:

Hàm mã hóa một mảng kiểu byte thành một mảng kiểu byte sử dụng Key và IV.

private byte[] Encrypt(byte[] clearData, byte[] Key, byte[] IV) {

// Create a MemoryStream that is going to accept the encrypted bytes

MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key;

alg.IV = IV;

CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);

cs.Write(clearData, 0, clearData.Length); cs.Close();

byte[] encryptedData = ms.ToArray();

return encryptedData; }

Hàm trả về một chuỗi mã hóa sử dụng Rijndael (128,192,256 Bit).

public string Encrypt(string Data, string Password, int Bits) {

byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(Data);

PasswordDeriveBytes pdb = new

PasswordDeriveBytes(Password,

new byte[] { 0x00, 0x01, 0x02, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4 });

if (Bits == 128) {

byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(16), pdb.GetBytes(16));

return Convert.ToBase64String(encryptedData); }

else if (Bits == 192) {

byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(24), pdb.GetBytes(16));

return Convert.ToBase64String(encryptedData); }

else if (Bits == 256) {

byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));

return Convert.ToBase64String(encryptedData); }

else

{

return string.Concat(Bits); }

}

Hàm giải mã một mảng kiểu byte thành một mảng kiểu byte sử dụng Key và IV

private byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV) {

MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key;

alg.IV = IV;

CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);

cs.Write(cipherData, 0, cipherData.Length); cs.Close();

byte[] decryptedData = ms.ToArray();

return decryptedData; }

Hàm giải mã một chuỗi thành chuỗi password

public string Decrypt(string Data, string Password, int Bits) {

//string Password = aeskey192;

byte[] cipherBytes = Convert.FromBase64String(Data); PasswordDeriveBytes pdb = new

PasswordDeriveBytes(Password,

new byte[] { 0x00, 0x01, 0x02, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4 });

if (Bits == 128) {

byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(16), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } else if (Bits == 192) {

byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(24), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } else if (Bits == 256) {

byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } else {

return string.Concat(Bits); }

Một phần của tài liệu Ứng dụng mail client (Trang 35)

Tải bản đầy đủ (PDF)

(54 trang)