1. Trang chủ
  2. » Công Nghệ Thông Tin

Các giải pháp lập trình CSharp- P67 ppt

10 193 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 2,65 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lớp này cung cấp một vỏ bọc được-quản-lý cho hàm CryptGenRandom của Win32 CryptoAPI, và bạn có thể sử dụng để đổ vào một mảng byte các giá trị byte ngẫu nhiên.. Nếu người dùng quên pass

Trang 1

các bộ tạo số ngẫu nhiên cụ thể đều sẽ thừa kế từ nó Hiện tại, chỉ có một hiện thực là lớp

RNGCryptoServiceProvider Lớp này cung cấp một vỏ bọc được-quản-lý cho hàm

CryptGenRandom của Win32 CryptoAPI, và bạn có thể sử dụng để đổ vào một mảng byte các

giá trị byte ngẫu nhiên

Các số do RNGCryptoServiceProvider sinh ra không thật sự ngẫu nhiên Tuy

nhiên, chúng “đủ” ngẫu nhiên để đáp ứng yêu cầu cho các ứng dụng mật mã và bảo mật trong hầu hết các môi trường chính phủ và thương mại.

Lớp cơ sở RandomNumberGenerator là một factory cho các lớp hiện thực dẫn xuất từ đó Gọi

RandomNumberGenerator.Create("System.Security.Cryptography.RNGCryptoServiceProvider")

sẽ trả về một thể hiện của RNGCryptoServiceProvider, và bạn có thể sử dụng nó để tạo số ngẫu nhiên Ngoài ra, vì RNGCryptoServiceProvider là hiện thực duy nhất nên nó sẽ là lớp mặc định được tạo ra khi bạn gọi phương thức Create không có đối số:

RandomNumberGenerator.Create()

Ví dụ dưới đây tạo một đối tượng RNGCryptoServiceProvider và sử dụng nó để tạo các giá trị ngẫu nhiên Phương thức GetBytes đổ vào một mảng byte các giá trị byte ngẫu nhiên Bạn có thể sử dụng phương thức GetNonZeroBytes nếu cần dữ liệu ngẫu nhiên không chứa giá trị zero

using System;

using System.Security.Cryptography;

public class SecureRandomNumberExample {

public static void Main() {

// Tạo mảng byte dùng để lưu trữ dữ liệu ngẫu nhiên.

byte[] number = new byte[32];

// Tạo bộ tạo số ngẫu nhiên mặc định.

RandomNumberGenerator rng = RandomNumberGenerator.Create();

// Tạo dữ liệu ngẫu nhiên.

rng.GetBytes(number);

// Hiển thị dữ liệu ngẫu nhiên.

Console.WriteLine(BitConverter.ToString(number));

}

}

Trang 2

Những nỗ lực tính toán cần thiết để tạo một số ngẫu nhiên với

RNGCryptoServiceProvider lớn hơn nhiều so với Random Đối với mục đích thường ngày, sử dụng RNGCryptoServiceProvider là quá mức cần thiết Bạn nên xem xét

số lượng số ngẫu nhiên cần tạo và mục đích của các số này trước khi quyết định

sử dụng RNGCryptoServiceProvider Sử dụng lớp RNGCryptoServiceProvider quá mức và không cần thiết có thể ảnh hưởng đáng kể lên hiệu năng của ứng dụng.

Bạn cần lưu trữ password của người dùng một cách an toàn để bạn có thể sử

dụng nó để xác thực người dùng đó trong tương lai.

Đừng lưu trữ password của người dùng ở dạng plaintext vì đây là một nguy cơ

bảo mật lớn Thay vào đó, hãy tạo và lưu trữ một mã băm của password bằng

System.Security.Cryptography.HashAlgorithm Khi xác thực, tạo mã băm của password và so sánh nó với mã băm đã được lưu trữ.

Các giải thuật băm là các hàm mật mã một chiều, nhận plaintext có chiều dài thay đổi và tạo một giá trị số có kích thước cố định Chúng là một chiều vì gần như không thể tìm lại

plaintext gốc từ mã băm Các giải thuật băm là tất định (deterministic); áp dụng cùng giải

thuật băm cho một mẩu plaintext luôn tạo ra cùng mã băm Điều này khiến mã băm trở nên hữu ích cho việc xác định hai khối plaintext (trong trường hợp này là password) có giống nhau hay không Mục đích của các giải thuật băm bảo đảm rằng—mặc dù không phải không xảy ra—khả năng hai mẩu plaintext khác nhau tạo ra cùng mã băm là cực kỳ nhỏ Ngoài ra, không có mối tương quan nào giữa sự giống nhau của hai mẩu plaintext và mã băm của chúng; một khác biệt nhỏ trong plaintext cũng có thể gây ra khác biệt đáng kể trong mã băm Khi sử dụng password để xác thực một người dùng, bạn không quan tâm đến nội dung của password do người dùng nhập vào Bạn chỉ cần biết rằng password được nhập trùng khớp với password mà bạn đã ghi lại cho người dùng đó trong cơ sở dữ liệu tài khoản Bản chất của các giải thuật băm khiến chúng trở nên lý tưởng trong việc lưu trữ password một cách an toàn Khi người dùng cung cấp một password mới, bạn phải tạo mã băm của password và lưu trữ

mã băm này, rồi loại bỏ password dạng text Mỗi khi người dùng xác thực với ứng dụng của bạn, tính mã băm của password do người đó cung cấp và so sánh nó với mã băm mà bạn đã lưu trữ

Người ta thường hỏi cách thu lấy password từ một mã băm Và câu trả lời là

không thể Mục đích của mã băm là đóng vai trò như một token và bạn có thể tùy ý lưu trữ nó mà không sinh ra lỗ hổng bảo mật nào Nếu người dùng quên password, bạn không thể tìm lại nó từ mã băm đã được lưu trữ; bạn phải reset tài khoản này thành giá trị mặc định nào đó, hoặc tạo một password mới cho người dùng.

Trang 3

thể dẫn xuất từ đó Thư viện lớp NET Framework có sáu hiện thực giải thuật băm cụ thể

(được liệt kê trong bảng 14.1), mỗi lớp hiện thực là một thành viên của không gian tên

System.Security.Cryptography Các lớp với phần đuôi là CryptoServiceProvider bọc lấy các

chức năng do Win32 CryptoAPI cung cấp, trong khi các lớp với phần đuôi là Managed được hiện thực hoàn toàn bằng mã lệnh được-quản-lý

Bảng 14.1 Các hiện thực giải thuật băm

Tên giải thuật Tên lớp Kích thước mã băm (bit)

Mặc dù bạn có thể trực tiếp tạo ra thể hiện của các lớp giải thuật băm, lớp cơ sở

HashAlgorithm là một factory cho các lớp hiện thực dẫn xuất từ nó Gọi phương thức tĩnh

HashAlgorithm.Create với đối số là tên giải thuật sẽ trả về một đối tượng thuộc kiểu đã được

chỉ định Sử dụng factory cho phép bạn ghi mã lệnh tổng quát và mã lệnh này có thể làm việc

với bất kỳ hiện thực giải thuật băm nào

Một khi bạn đã có đối tượng HashAlgorithm, phương thức ComputeHash của nó nhận một mảng byte chứa plaintext và trả về một mảng byte mới chứa mã băm được tạo ra Bảng 14.1 cho biết kích thước của mã băm (tính bằng bit) được tạo ra bởi mỗi lớp giải thuật băm

Lớp HashPasswordExample dưới đây trình bày cách tạo mã băm từ một chuỗi (password chẳng hạn) Ứng dụng này cần hai đối số dòng lệnh: tên của giải thuật băm cần sử dụng và chuỗi cần tạo mã băm Vì phương thức HashAlgorithm.ComputeHash yêu cầu một mảng byte nên trước hết bạn phải mã hóa chuỗi nhập bằng lớp System.Text.Encoding (lớp này cung cấp các cơ chế dùng để chuyển chuỗi thành/từ các định dạng mã hóa ký tự khác nhau)

using System;

using System.Text;

using System.Security.Cryptography;

public class HashPasswordExample {

public static void Main(string[] args) {

// Tạo HashAlgorithm của kiểu được chỉ định bởi

// đối số dòng lệnh thứ nhất.

using (HashAlgorithm hashAlg = HashAlgorithm.Create(args[0])) {

Trang 4

// Chuyển chuỗi password (đối số dòng lệnh thứ hai)

// thành một mảng byte.

byte[] pwordData = Encoding.Default.GetBytes(args[1]);

// Tạo mã băm của password.

byte[] hash = hashAlg.ComputeHash(pwordData);

// Hiển thị mã băm của password.

Console.WriteLine(BitConverter.ToString(hash));

}

}

}

Chạy lệnh HashPasswordExample SHA1 ThisIsMyPassword sẽ hiển thị mã băm sau đây:

80-36-31-2F-EA-D9-93-45-79-34-C9-FD-21-EE-8D-05-16-DC-A1-E2

Bạn cần xác định nội dung của một file có thay đổi theo thời gian hay không.

Tạo mã băm cho nội dung của file bằng phương thức ComputeHash của lớp

System.Security.Cryptography.HashAlgorithm Lưu trữ mã băm này để sau này

so sánh với các mã băm được tạo mới.

Ngoài việc cho phép bạn lưu trữ password một cách an toàn (đã được thảo luận trong mục 14.2), mã băm còn cung cấp một phương cách rất hay để xác định một file có thay đổi hay không Bằng cách tính toán và lưu trữ mã băm của một file, sau này bạn có thể tính lại mã băm của file này để xác định file có thay đổi trong thời gian chuyển tiếp hay không Giải thuật băm sẽ sinh ra một mã băm rất khác ngay cả chỉ với một thay đổi rất nhỏ trong file, nên khả năng hai file khác nhau cho ra cùng mã băm là cực kỳ nhỏ

Các mã băm chuẩn không phù hợp khi gửi cùng với một file để bảo đảm tính

toàn vẹn của nội dung file Nếu ai đó chặn được file trên đường đi, người này có thể dễ dàng thay đổi file và tính lại mã băm Chúng ta sẽ thảo luận một biến thể của mã băm trong mục 14.5 (mã băm có khóa), mã băm này phù hợp cho việc bảo đảm tính toàn vẹn của file trên đường đi.

Dễ dàng tạo được mã băm của một file với lớp HashAlgorithm Trước hết, thể hiện hóa một trong các hiện thực giải thuật băm dẫn xuất từ lớp HashAlgorithm (bạn cần truyền tên giải thuật băm cho phương thức HashAlgorithm.Create—xem tên các giải thuật băm hợp lệ trong bảng 14.1) Kế tiếp, thay vì truyền một mảng byte cho phương thức ComputeHash, bạn hãy truyền một đối tượng System.IO.Stream mô tả file cần được tạo mã băm Đối tượng

Trang 5

cho file.

Lớp HashStreamExample dưới đây trình bày cách tạo mã băm từ một file Bạn phải chỉ định tên giải thuật băm và tên file làm đối số dòng lệnh, ví dụ HashStreamExample SHA1

HashStreamExample.cs.

using System;

using System.IO;

using System.Security.Cryptography;

public class HashStreamExample {

public static void Main(string[] args) {

// Tạo một HashAlgorithm với kiểu được chỉ định trong

// đối số dòng lệnh thứ nhất.

using (HashAlgorithm hashAlg = HashAlgorithm.Create(args[0])) {

// Mở một FileStream cho file được chỉ định trong

// đối số dòng lệnh thứ hai.

using (Stream file = new FileStream(args[1],

FileMode.Open)) {

// Tạo mã băm cho nội dung của file.

byte[] hash = hashAlg.ComputeHash(file);

// Hiển thị mã băm.

Console.WriteLine(BitConverter.ToString(hash));

}

}

}

}

Bạn cần xác minh một password hoặc xác nhận một file vẫn không thay đổi bằng

cách so sánh hai mã băm.

Chuyển cả mã băm cũ và mới thành chuỗi thập lục phân, chuỗi Base64, hay

mảng byte và so sánh chúng.

Trang 6

Bạn có thể sử dụng mã băm để xác định hai mẩu dữ liệu có giống nhau hay không, để không phải lưu trữ hay duy trì việc truy xuất đến dữ liệu gốc Để xác định dữ liệu có thay đổi theo thời gian hay không, bạn phải tạo và lưu trữ mã băm của dữ liệu gốc Sau đó, hãy tạo một mã băm khác cho dữ liệu này rồi so sánh mã băm cũ và mới để cho thấy có thay đổi nào xảy ra hay không Định dạng của mã băm gốc sẽ xác định cách thức phù hợp nhất để kiểm tra mã băm mới được tạo

Nhiều mục trong chương này sử dụng phương thức ToString của lớp

System.BitConverter để chuyển mảng byte thành giá trị chuỗi thập lục phân khi hiển thị Mặc dù dễ sử dụng và thích hợp cho mục đích hiển thị, bạn có thể nhận thấy cách này không phù hợp khi lưu trữ mã băm vì nó đặt dấu gạch nối (-) giữa mỗi giá trị byte (ví dụ, 4D-79-3A-C9- …) Ngoài ra, lớp BitConverter không cung cấp phương thức nào để phân tích một biểu diễn chuỗi như thế trở về một mảng byte.

Mã băm thường được lưu trữ trong file text ở dạng chuỗi thập lục phân (ví dụ,

89D22213170A9CFF09A392F00E2C6C4EDC1B0EF9) hoặc chuỗi được mã hóa theo Base64 (ví dụ,

idIiExcKnP8Jo5LwDixsTtwbDvk=) Mã băm cũng có thể được lưu trữ trong cơ sở dữ liệu ở dạng giá trị byte thô Bất kể bạn lưu trữ mã băm theo cách nào, bước đầu tiên khi so sánh mã băm

cũ và mới là đưa chúng về một dạng chung

Đoạn mã dưới đây chuyển mã băm mới (mảng byte) thành chuỗi thập lục phân khi so sánh với

mã băm cũ Ngoài phương thức BitConverter.ToString mà chúng ta đã thảo luận ở trên, thư

viện lớp NET Framework không cung cấp phương thức nào để chuyển một mảng byte thành

chuỗi thập lục phân Bạn phải viết một vòng lặp đi qua các phần tử của mảng byte, chuyển mỗi byte thành chuỗi, và gắn chuỗi này vào biểu diễn chuỗi thập lục phân của mã băm Sử dụng System.Text.StringBuilder sẽ tránh tạo ra các chuỗi mới không cần thiết mỗi khi vòng lặp gắn giá trị byte kế tiếp vào chuỗi kết quả (xem mục 2.1 để biết thêm chi tiết)

// Phương thức dùng để so sánh mã băm mới với

// mã băm có sẵn (được biểu diễn ở dạng chuỗi thập lục phân).

private static bool VerifyHexHash(byte[] hash, string oldHashString) {

// Tạo biểu diễn chuỗi cho mã băm mới.

System.Text.StringBuilder newHashString =

new System.Text.StringBuilder(hash.Length);

foreach (byte b in hash) {

newHashString.AppendFormat("{0:X2}", b);

}

// So sánh biểu diễn chuỗi của mã băm cũ và mới,

// và trả về kết quả.

Trang 7

Trong đoạn mã dưới đây, mã băm mới là một mảng byte và mã băm cũ là một chuỗi được mã

hóa theo Base64 Đoạn mã này sẽ mã hóa mã băm mới thành chuỗi Base64 rồi thực hiện phép

so sánh chuỗi

// Phương thức dùng để so sánh mã băm mới với

// mã băm có sẵn (được biểu diễn ở dạng chuỗi Base64).

private static bool VerifyB64Hash(byte[] hash, string oldHashString) {

// Tạo biểu diễn chuỗi Base64 cho mã băm mới.

string newHashString = System.Convert.ToBase64String(hash);

// So sánh biểu diễn chuỗi của mã băm cũ và mới,

// rồi trả về kết quả.

return (oldHashString == newHashString);

}

Cuối cùng, đoạn mã dưới đây so sánh hai mã băm được biểu diễn ở dạng mảng byte Thư viện

lớp NET Framework không có phương thức nào thực hiện kiểu so sánh này, do đó bạn phải

viết một vòng lặp để so sánh các phần tử của hai mảng Đoạn mã này có sử dụng một vài kỹ thuật không tốn nhiều thời gian như: bảo đảm các mảng byte có cùng chiều dài trước khi bắt đầu so sánh chúng, và trả về false khi tìm thấy khác biệt đầu tiên

// Phương thức dùng để so sánh mã băm mới với

// mã băm có sẵn (được biểu diễn ở dạng mảng byte).

private static bool VerifyByteHash(byte[] hash, byte[] oldHash) {

// Nếu một mảng là null, hoặc hai mảng có chiều dài khác nhau

// thì chúng không bằng nhau.

if (hash == null || oldHash == null || hash.Length != oldHash.Length)

return false;

// Duyệt qua mảng byte và so sánh mỗi giá trị byte.

for (int count = 0; count < hash.Length; count++) {

if (hash[count] != oldHash[count]) return false;

}

// Hai mã băm bằng nhau.

return true;

}

Trang 8

5. B o đ m tính toàn v n d li u b ng mã băm có khóa B o đ m tính toàn v n d li u b ng mã băm có khóa ả ả ả ả ẹ ữ ệ ằ ẹ ữ ệ ằ

Bạn cần chuyển một file cho ai đó và cấp cho người này một phương cách để xác

minh tính toàn vẹn của file.

Cấp cho người nhận một khóa bí mật (key) Khóa này có thể là một số được sinh

ngẫu nhiên, nhưng nó cũng có thể là một nhóm từ mà bạn và người nhận đã thỏa thuận Sử dụng khóa cùng với một trong những lớp giải thuật băm có khóa dẫn xuất từ lớp System.Security.Cryptography.KeyedHashAlgorithm để tạo mã băm có khóa Gửi mã băm này cùng với file Khi nhận được file, người nhận sẽ tạo mã băm có khóa cho file này bằng khóa Nếu hai mã băm giống nhau, người nhận sẽ biết rằng file này do bạn gửi đến và nó không bị thay đổi trong quá trình chuyển giao.

Mã băm rất hữu ích khi so sánh hai mẩu dữ liệu để xác định chúng có giống nhau hay không (cả khi bạn không thể truy xuất được dữ liệu gốc) Tuy nhiên, bạn không thể sử dụng mã băm

để cam đoan với người nhận về tính toàn vẹn của dữ liệu Nếu có ai đó chặn được dữ liệu, người này có thể thay thế dữ liệu và tạo mã băm mới Khi người nhận kiểm tra mã băm, nó có

vẻ đúng nhưng thực tế dữ liệu không giống với những gì bạn gửi lúc ban đầu

Một giải pháp đơn giản và hiệu quả cho vấn đề toàn vẹn dữ liệu là mã băm có khóa (keyed

hash code) Mã băm có khóa cũng tương tự như mã băm bình thường (đã được thảo luận trong

mục 14.2 và 14.3); tuy nhiên, mã băm có khóa kết hợp thêm một phần tử dữ liệu bí mật (khóa), phần tử này chỉ có người gửi và người nhận biết Nếu không có khóa, không ai có thể tạo được mã băm đúng từ tập dữ liệu cho trước

Khóa phải được giữ bí mật Nếu ai đó biết khóa thì có thể tạo ra mã băm có khóa

hợp lệ, nghĩa là bạn sẽ không thể xác định họ có thay đổi nội dung của tài liệu hay không Vì lý do này, bạn không nên chuyển giao hay lưu trữ khóa cùng với tài liệu cần được bảo vệ tính toàn vẹn Mục 14.10 sẽ cung cấp một cơ chế mà bạn

có thể sử dụng để trao đổi khóa một cách an toàn.

Tạo mã băm có khóa cũng tương tự như tạo mã băm bình thường vì lớp trừu tượng

System.Security.Cryptography.KeyedHashAlgorithm mở rộng lớp

System.Security.Cryptography.HashAlgorithm Lớp KeyedHashAlgorithm cung cấp một lớp

cơ sở để tất cả các giải thuật băm có khóa dẫn xuất từ đó Thư viện lớp NET Framework có

hai hiện thực giải thuật băm có khóa được liệt kê trong bảng 14.2; mỗi hiện thực là một thành viên của không gian tên System.Security.Cryptography

Bảng 14.2 Các hiện thực giải thuật băm có khóa

Giải thuật/Tên lớp Kích thước khóa (bit) Kích thước mã băm (bit)

Trang 9

khóa, hoặc bạn có thể sử dụng phương thức tĩnh KeyedHashAlgorithm.Create với đối số là tên

giải thuật Sử dụng factory cho phép bạn viết mã lệnh tổng quát và mã lệnh này có thể làm

việc với bất kỳ hiện thực giải thuật băm có khóa nào, nhưng theo bảng 14.2, mỗi lớp hỗ trợ các chiều dài khóa khác nhau nên bạn phải cung cấp giá trị này trong mã lệnh tổng quát Nếu sử dụng phương thức khởi dựng để tạo đối tượng băm có khóa, bạn có thể truyền khóa

cho phương thức này Khi sử dụng factory, bạn phải thiết lập khóa bằng thuộc tính Key (được thừa kế từ lớp KeyedHashAlgorithm) Một khi đã cấu hình khóa, gọi phương thức ComputeHash

với đối số là một mảng byte hay một đối tượng System.IO.Stream Giải thuật băm có khóa sẽ

xử lý dữ liệu nhập và trả về một mảng byte chứa mã băm có khóa Bảng 14.2 cho thấy kích thước của mã băm do mỗi giải thuật băm có khóa sinh ra

Lớp KeyedHashStreamExample dưới đây trình bày cách tạo mã băm có khóa từ một file Bạn phải chỉ định tên file và một khóa làm đối số dòng lệnh Ứng dụng này sử dụng lớp HMACSHA1

để tạo mã băm có khóa và rồi hiển thị nó ra cửa sổ Console.

using System;

using System.IO;

using System.Text;

using System.Security.Cryptography;

public class KeyedHashStreamExample {

public static void Main(string[] args) {

// Tạo mảng byte từ chuỗi key (là đối số dòng lệnh thứ hai)

byte[] key = Encoding.Unicode.GetBytes(args[1]);

// Tạo một đối tượng HMACSHA1

// (truyền key cho phương thức khởi dựng).

using (HMACSHA1 hashAlg = new HMACSHA1(key)) {

// Mở một FileStream để đọc file (tên file

// được chỉ định trong đối số dòng lệnh thứ nhất).

using (Stream file = new FileStream(args[0],

FileMode.Open)) {

// Tạo mã băm có khóa cho nội dung file.

byte[] hash = hashAlg.ComputeHash(file);

// Hiển thị mã băm có khóa ra cửa sổ Console.

Trang 10

Console.WriteLine(BitConverter.ToString(hash));

}

}

}

}

Lệnh KeyedHashStreamExample KeyedHashStreamExample.cs secretKey sẽ sinh ra mã băm như sau:

95-95-2A-8E-44-D4-3C-55-6F-DA-06-44-27-79-29-81-15-C7-2A-48

Ứng dụng KeyedHashMessageExample.cs (có trong đĩa CD đính kèm) trình bày cách tạo một

mã băm có khóa từ một chuỗi Ứng dụng này yêu cần hai đối số dòng lệnh: một thông điệp và một khóa, và sẽ tạo ra mã băm có khóa cho chuỗi thông điệp bằng khóa này Ví dụ, lệnh

KeyedHashMessageExample "Two hundred dollars is my final offer" secretKey sẽ sinh ra

mã băm như sau:

83-43-0D-9D-07-6F-AA-B7-BC-79-CD-6F-AD-7B-FA-EA-19-D1-24-44

6. B o v file b ng phép m t hóa đ i x ng B o v file b ng phép m t hóa đ i x ng ả ệ ả ệ ằ ằ ậ ậ ố ứ ố ứ

Bạn cần mật hóa một file bằng giải thuật mật hóa đối xứng (symmetric

encryption).

Trước hết, bạn phải thể hiện hóa một trong các lớp giải thuật đối xứng cụ thể

dẫn xuất từ lớp System.Security.Cryptography.SymmetricAlgorithm Sau đó, gọi phương thức CreateEncryptor hay CreateDecryptor của đối tượng

SymmetricAlgorithm để thu lấy một đối tượng có hiện thực giao diện

System.Security.Cryptography.ICryptoTransform Sử dụng đối tượng

ICryptoTransform này kết hợp với một đối tượng

System.Security.Cryptography.CryptoStream để mật hóa hay giải mật hóa dữ liệu đọc từ một file (được truy xuất bằng một đối tượng System.IO.FileStream ).

Lớp trừu tượng SymmetricAlgorithm cung cấp một lớp cơ sở để tất cả các hiện thực giải thuật

đối xứng cụ thể dẫn xuất từ đó Thư viện lớp NET Framework có bốn hiện thực giải thuật đối

xứng cụ thể được liệt kê trong bảng 14.3, mỗi lớp là một thành viên của không gian tên

System.Security.Cryptography Các lớp có đuôi là CryptoServiceProvider bọc lấy các chức

năng do Win32 CryptoAPI cung cấp, trong khi các lớp có đuôi là Managed (hiện tại chỉ có

RijndaelManaged) được hiện thực hoàn toàn bằng mã lệnh được-quản-lý Bảng này cũng cho thấy chiều dài khóa mà mỗi giải thuật hỗ trợ (chiều dài mặc định được in đậm) Nói chung, khóa càng dài, càng khó giải mật hóa ciphertext nếu không có khóa, nhưng cũng có nhiều yếu

tố khác cần xem xét

Bảng 14.3 Các hiện thực giải thuật đối xứng

Tên giải thuật Tên lớp Chiều dài khóa (bit)

Ngày đăng: 08/07/2014, 17:20

HÌNH ẢNH LIÊN QUAN

Bảng 14.1 Các hiện thực giải thuật băm - Các giải pháp lập trình CSharp- P67 ppt
Bảng 14.1 Các hiện thực giải thuật băm (Trang 3)
Bảng 14.2 Các hiện thực giải thuật băm có khóa - Các giải pháp lập trình CSharp- P67 ppt
Bảng 14.2 Các hiện thực giải thuật băm có khóa (Trang 8)
Bảng 14.3 Các hiện thực giải thuật đối xứng - Các giải pháp lập trình CSharp- P67 ppt
Bảng 14.3 Các hiện thực giải thuật đối xứng (Trang 10)

TỪ KHÓA LIÊN QUAN